No.42955 作者:dingji534 邮件:dingji534@sohu.com ID:98069 登陆:4次 文章数:30篇 最后登陆IP:123.120.18.33 最后登陆:2011/1/13 14:53:09 注册:2008/1/8 15:15:36 财富:110 发帖时间:2011/1/13 14:53:09 发贴者IP:123.120.18.33 标题:dingji534:串口液晶 摘要:No.42955串口液晶 C51开发HMI指南(dingji534@sohu.com) 1.串口通信处理 //串口的处理,串口接收采用中断方式,串口发送采用查询方式 sbit TIFLG=0; //串口发送标记 sbit HMIFLG=0; //触控界面数据接收标记 uchar data HMI_Page,HMI_Key; //触控界面传回来的当前页面位置和按键编码 uchar xdata cmd[8]; void Serial_Int(void) interrupt 4 { if(TI==1) { TI=0; TIFLG=1;} //TIFLG在作为其它程序的查询标记 if(RI==1) { cmd[0]=cmd[1]; //触控界面下,接收触摸按键数据 AA 78 K0 K1 CC 33 C3 3C cmd[1]=cmd[2]; //采用移动窗口方式接收 cmd[2]=cmd[3]; cmd[3]=cmd[4]; cmd[4]=cmd[5]; cmd[5]=cmd[6]; cmd[6]=cmd[7]; cmd[7]=SBUF; RI=0;} if((cmd[0]==0xaa)&&(cmd[1]==0x78)&&(cmd[4]==0xcc)&&(cmd[5]==0x33)&&(cmd[6]==0xc3)&&(cmd[7]==0x3c)) { HMIFLG=1; //置位触控界面标记,主程序中查询处理 HMI_Page=cmd[2]; HMI_Key=cmd[3];} } //查询方式发送数据到串口 //发送一个字节 void Txbyte(uchar i) {TIFLG=0; SBUF=i; While(TIFLG==0); TIFLG=0; } //发送一个以0xCC 0x33 0xC3 0x3C为结束标记的数据串到串口 void Txstring(uchar *str) {uchar i0,i1,i2,i3; i0=0; i1=0; i2=0; i3=0; TIFLG=0; while(!((i0==0xcc)&&(i1==0x33)&&(i2==0xc3)&&(i3==0x3c))) {i0=i1; I1=i2; I2=i3; i3=*str; str++; SBUF=i3; While(TIFLG==0); TIFLG=0;} } 2.I/O后台程序的处理 使用一个定时器产生一个定时器中断,来刷新I/O状态、采集设备信息,或对设备的控制; 比如,我们可以使用一个100mS的定时器,定时来进行A/D转换,采集温度信息; 对于多路信息的采集,如果每一路的处理时间比较长,就应该把任务分解成“节拍”来分成几次中断来执行,以保证其它中断程序能够被可靠执行,并提高CPU ......
>>返回讨论的主题
|