📄 comnoflash.c
字号:
#include "config.h"
struct usart xdata cominfor[MAXCOMBUF];
xdata uchar all_plan; //串口接收到的总帧数
extern reset_system(uchar i); //系统重新启动
extern xdata uchar word; //这个用于向主调函数返回存储器中是否有可显示的内容
void usart(void) interrupt 4 using 3
{
static uint point = 0; //接收数据计数器
static uint nodata = 0; //非显示数据测试计数器
static uchar cont=0; //字头检测计数器
static uchar plan; //接受帧计数器自减计数器
static uchar form=0; //数据帧号
static bit addrtest=0;
uchar xdata *pt; //存储器指针
if(TI) {TI = 0;return;}
RI = 0;
//COMOUTRESET;
if(addrtest != 0) return;
#ifndef USEDTW
//使用测试软件
if(cont < 5){
if((cont == 0)&&(SBUF != ADDR)) {cont=0; addrtest = 1; return;} //检测字头=设备地址
if((cont == 1)&&(SBUF != 0x55)) {cont=0; addrtest = 1; return;} //检测字头
if((cont == 2)&&(SBUF != 0xaa)) {cont=0; addrtest = 1; return;} //检测字头
if(cont == 4) plan = all_plan = SBUF; //检测字头=幕数
if(++cont == 1){point=0; nodata=0; form=0;}
return;
}
#else
//使用TW软件
if(cont < 2){
if((cont == 0)&&(SBUF != ADDR)) {cont=0; addrtest = 1; return;} //检测字头=设备地址
SM2 = 0;
if(cont == 1) plan = all_plan = SBUF; //检测字头=幕数
if(++cont == 1){point=0; nodata=0; form=0;}
return;
}
#endif
if(point < sizeof(cominfor[form].dip)){
pt = (uchar *)&cominfor[form];
pt += point++;
*pt = SBUF;
return;
}
if(nodata < (sizeof(cominfor[form].dip))) {nodata++; return;}
pt = (uchar *)&cominfor[form];
pt += point++;
*pt = SBUF;
if(point != (sizeof(cominfor[form]))) return;
nodata = 0;
point=0;
if(--plan != 0){
if(++form < MAXCOMBUF) return;
}
cont = 0;
addrtest = 0;
word = 0xaa; //存储器中是否有可显示的内容
reset_system(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -