第44节:从机的串口收发综合程序框架
时间:11-22
来源:互联网
点击:
- 成一个int类型的数据
- uiSetData3=uiSetData3<8;
- uiSetData3=uiSetData3+ucRcregBuf[uiRcMoveIndex+7];
- ucWd3Update=1; //窗口3更新显示
- break;
- case 0x04: //设置参数4
- ucStatus=0; //从设置参数4结束发送数据的状态,表示发送数据的过程成功,切换回待机状态
- uiSetData4=ucRcregBuf[uiRcMoveIndex+6];//把两个字节合并成一个int类型的数据
- uiSetData4=uiSetData4<8;
- uiSetData4=uiSetData4+ucRcregBuf[uiRcMoveIndex+7];
- ucWd4Update=1; //窗口4更新显示
- break;
- }
- ucSendregBuf[0]=0xeb; //把准备发送的数据放入发送缓冲区
- ucSendregBuf[1]=0x00;
- ucSendregBuf[2]=0x55;
- ucSendregBuf[3]=0xf5;//代表校验正确
- ucSendregBuf[4]=0x00;
- ucSendregBuf[5]=0x00;
- ucSendregBuf[6]=0x35;
- for(i=0;i<7;i++)//返回校验正确的应答指令
- {
- eusart_send(ucSendregBuf[i]);//发送一串数据给上位机
- }
- }
- else
- {
- ucSendTimeOutLock=1; //原子锁加锁
- uiSendTimeOutCnt=0;//超时计时器计时清零
- ucSendTimeOutLock=0; //原子锁解锁
- ucSendregBuf[0]=0xeb; //把准备发送的数据放入发送缓冲区
- ucSendregBuf[1]=0x00;
- ucSendregBuf[2]=0x55;
- ucSendregBuf[3]=0xfa; //代表校验错误
- ucSendregBuf[4]=0x00;
- ucSendregBuf[5]=0x00;
- ucSendregBuf[6]=0x3a;
- for(i=0;i<7;i++)//返回校验错误的应答指令
- {
- eusart_send(ucSendregBuf[i]);//发送一串数据给上位机
- }
- }
- ucSendTimeOutLock=1; //原子锁加锁
- uiSendTimeOutCnt=0;//超时计时器计时清零
- ucSendTimeOutLock=0; //原子锁解锁
- break; //退出循环
- }
- uiRcMoveIndex++; //因为是判断数据头,游标向着数组最尾端的方向移动
- }
- uiRcregTotal=0;//清空缓冲的下标,方便下次重新从0下标开始接受新数据
- }
- }
- void eusart_send(unsigned char ucSendData) //发送一个字节,内部自带每个字节之间的delay延时
- {
- ES = 0; //关串口中断
- TI = 0; //清零串口发送完成中断请求标志
- SBUF =ucSendData; //发送一个字节
- delay_short(400);//每个字节之间的延时,这里非常关键,也是最容易出错的地方。延时的大小请根据实际项目来调整
- TI = 0; //清零串口发送完成中断请求标志
- ES = 1; //允许串口中断
- }
- void display_service(void) //显示的窗口菜单服务程序
- {
- switch(ucWd)//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
- {
- case 1: //显示P--1窗口的数据
- if(ucWd1Update==1)//窗口1要全部更新显示
- {
- ucWd1Update=0;//及时清零标志,避免一直进来扫描
- ucDigShow8=12;//第8位数码管显示P
- ucDigShow7=11;//第7位数码管显示-
- ucDigShow6=1; //第6位数码管显示1
- ucDigShow5=10;//第5位数码管显示无
- //先分解数据
- ucTemp4=uiSetData1/1000;
- ucTemp3=uiSetData1%1000/100;
- ucTemp2=uiSetData1%100/10;
- ucTemp1=uiSetData1%10;
- //再过渡需要显示的数据到缓冲变量里,让过渡的时间越短越好
- if(uiSetData1<1000)
- {
- ucDigShow4=10;//如果小于1000,千位显示无
- }
- else
- {
- ucDigShow4=ucTemp4;//第4位数码管要显示的内容
- }
- if(uiSetData1<100)
- {
- ucDigShow3=10;//如果小于100,百位显示无
- }
- else
- {
- ucDigShow3=ucTemp3;//第3位数码管要显示的内容
- }
- if(uiSetData1<10)
- {
- ucDigShow2=10;//如果小于10,十位显示无
- }
- else
- {
- ucDigShow2=ucTemp2;//第2位数码管要显示的内容
- }
- ucDigShow1=ucTemp1;//第1位数码管要显示的内容
- }
- break;
- case 2://显示P--2窗口的数据
- if(ucWd2Update==1)//窗口2要全部更新显示
- {
- ucWd2Update=0;//及时清零标志,避免一直进来扫描
- ucDigShow8=12;//第8位数码管显示P
- ucDigShow7=11;//第7位数码管显示-
- ucDigShow6=2;//第
从机串口收程序框 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)