新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机远程灯控箱设计

单片机远程灯控箱设计

作者:时间:2013-03-12来源:网络收藏

点击浏览下一页

该系统的软件设计由主程序、中断程序、串行接收子程序、串行发送子程序、X5045读写子程序及若干功能实现子程序。其中,:X5045读写子程序需对时钟进行精确操作,用汇编语言编写,其他均用C语言编写。

3.1主程序设计

在主程序中,先将及X5045初始化,然后等待新命令。当NewData=1时,表示已接收到一个有效的命令帧,否则继续等待。接着判断是否是本机地址,若是则判断控制命令,否则继续等待。上位机发送指定的字符串,分别表示开灯、关灯、查询、设置等命令。通过字符串比较,判断出命令指令,跳到相应的入口子程序中;操作成功后,通过串口发送子程序返回相应的提示符,其具体流程如图3所示。在本系统中,上位机的人机交互界面由C++Builder开发,限于篇幅,在此从略。

3.2串口中断程序设计

为了增强抗干扰性,有效地区分噪声和数据便于操作,串口中断程序加强了通讯协议的制定[2],具体实现方法是加开始标志和结束标志。噪声是以随机字节出现的,通过测试和实验,发现在本系统中0x00后跟0xFF时噪声不容易发生。因此,设置开始标志为0x000xFF,结束标志为回车换行符0x0D0x0A。如果接收命令帧成功,则置NewData=1,表示新命令有效。考虑到纠检错,数据采用短包方式。中间采用延时,以保证起始位可靠。串口中断程序流程如图4所示。部分程序清单如下。

//串行接子函数

INT8U ReUART(INT8U*ch)

{INTl6U delay=6000;

while(--delay) //延时

{if(RI),/串行接收中断标志

{RI=0;//接收中断标志软件复位

、 *ch=SBU F=//读数据缓冲器

return 1;}//成功返回l

}

return(0);//接收失败返回0

)

//串行中断处理程序

void UART_Inter(void)interrupt 4

{INT8U ii;

INT8U temp,templ;

ReUART(temp、);//先连续接收2个字节

ReUART(templ);点击浏览下一页

//开始标志

if((temp==0x00)(templ==0xFF))

//连续接收一个命令帧

{for(ii=0;ii12;ii++)

{if(ReUART(buff[ii])==0)

goto Inter._end;}//跳出中断

if((buf[10]==0x0D)(buf[ll]==0x0A)),/结束标志

NewData=l; //新命令标志有效

}

Inter_end:;//中断出口

}



评论


相关推荐

技术专区

关闭