江西理工大学2011届本科生毕业设计(论文)
第四章 系统软件设计
该课题用的是STC89C52单片机进行控制的无线门铃的制作与设计,因此在用单片机进行控制的过程中我们需要设计软件对控制对象进行控制,软件的开发平台是Keil uVision3。Keil是最常用和最方便使用的单片机开发软件。系统软件模块的程序流程图下所示。 无线发射模块:
开始对cc1100和外部中断进行配置下降沿触发,允许中断?是进行数据发送一次否结束图4—1 无线模块程序流图
无线发射模块主程序:[12] #include
/******************************************************************************************************* **函数名称:void Int1_Init(void)
**函数描述:外部中断1的配置,配置为下降沿触发 **入口参数:无 **返回 值:无
********************************************************************************************************/ void Int1_Init(void)
- 19 -
江西理工大学2011届本科生毕业设计(论文)
{ }
void main(void) {
while(1) }
/******************************************************************************************************* **函数名称:void Int1_Isr(void) interrupt 2
**函数描述:外部中断1 服务程序,中断触发一次进行一次数据发送 **入口参数:无 **返回 值:无
********************************************************************************************************/ void Int1_Isr(void) interrupt 2 { }
无线接收模块:
unsigned char RxBuf[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}; EA = 0; IE1 = 0; EA = 1;
//关总中断 //清除标志
//开总中断
{ }
//RfSendPacket(RxBuf,8); CC1100_Init(); Int1_Init(); EX1 = 1; IE1 = 0; IT1 = 1; EA = 1;
//允许INT1 //清除标置位 //下降沿触发
RfSendPacket(RxBuf,8); //发送数据
- 20 -
江西理工大学2011届本科生毕业设计(论文)
开始对cc1100和外部中断进行配置初始化定时器0并设置各标志位比较接收到的数据正确接收数据错误开启音乐中断服务程序:定时10s关音乐结束图4—2 无线接收模块程序流图
无线接收模块主程序:[12] #include
sbit MUCEN = P3^3;
/******************************************************************************************************* **函数名称:void Timer0_Init(void) **函数描述:定时器0初始化,定时50ms **入口参数:无 **返回 值:无
*********************************************************************
- 21 -
江西理工大学2011届本科生毕业设计(论文)
***********************************/ void Timer0_Init(void) {
/*****中断设置********/ }
/*******************************************************************************************************
**函数名称:unsigned char Compared(unsigned char* cDat) **函数描述:比较接收到的数据是否正确 **入口参数:被比较的数据 **返回 值:0-> 错误
1-> 正确
********************************************************************************************************/ unsigned char Compared(unsigned char* cDat) { 据 }
} return 1;
return 0;
unsigned char i = 0;
for(i = 0;*(cDat + i) != '\\0';i++) {
if((i + 1) != *(cDat + i)) //其中有一个数据不同,则认为接收的是错误数ET0 = 1; TF0 = 0; IT0 = 1; EA = 1; TMOD = 0x01;
//方式1 16位定时器 //初值 //初值 //启动
//允许TIMER0 //清除标置位
//下降沿触发
/*****方式初值设置*****/
TL0 = 15536%6; TH0 = 15536/256;
// TR0 = 1;
- 22 -
江西理工大学2011届本科生毕业设计(论文)
void main(void) { }
/******************************************************************************************************* **函数名称:void Timer0_Isr(void) interrupt 1
**函数描述:定时器0 中断服务程序,定时10s钟后关闭音乐 **入口参数:无 **返回 值:无
********************************************************************************************************/ void Timer0_Isr(void) interrupt 1 {
static int num = 0; TF0 = 0;
if(200 != num)
//清楚标志位
int i = 0;
unsigned char RxBuf[8] = {0}; MUCEN = 0; Timer0_Init(); while(1) { }
RfReceivePacket(RxBuf,8); //接收数据 if(1 == Compared(RxBuf)) { }
TR0 = 1; i = 8;
//启动定时器0 //开启音乐
//清空数据
MUCEN = 1; while(i--)
RxBuf[i] = 'A';
//如果接收到的数据是正确的
CC1100_Init();
//关闭音乐
//CC1100模块初始化 //定时器0初始化
- 23 -