![]() |
|
| | 网站首页 | 电子知识 | 单片机知识 | 电路设计 | 微电子技术 | SCADA系统 | 资源下载 | 给我留言 | 谷歌商城 | 视频教程 | ieee | |
| 热门搜索关键字: 单片机教程 | 三极管 | 二极管 | C语言 | 汇编语言 | SCADA | 元器件 | 模拟电子 | |
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
为方便调试,采用模块化编程,共分1个主模块及5个子模块,各模块功能说明及流程图如下(源程序见附录):
1、主模块(rand_main.a51)
上电后程序显示初始化标志并等待3秒,然后进入巡回模式,自动检测地址为A(10)至F(15)的智能仪表,对在线的仪表及已使用通道以3秒为周期自动巡回读取实时温度并送数码管显示,仪表未在线或未用通道则自动跳过;定点模式时根据上、下按键情况自动向前或向后移动一个通道后等待下一次按键(向上至最高通道号时跳到上一个仪表的最低在用通道,向下至最低通道号时跳到下一个仪表的最高在用通道);等待期间以3秒为周期读取当前仪表当前通道实时温度并送数码管显示,另外,为了区分巡回、定点工作模式,定点工作模式时最低位数码管以约0.5Hz的频率闪烁显示。当检测到巡回/定点切换键按下时自动在巡回及定点模式间转换,当检测到温度值低于-199.9度时显示-199.9度。
主模块流程图见下:
YD_N100=仪表地址 TD_N=通道号 Y N 开始 上电初始化 置SP 巡回/定点标志=1? #0ah=>yd_n100,#0=>td_n 清闪烁、调用命令发送模块 接收正确吗? 调用数据转换程序 正常吗? Y N 送显示并延时3秒 Td_n+1=>td_n Td_n=8? Y N 0=>Td_n N Y Yd_n100+1=>yd_n100 Yd_n100=10h? 0ah=>yd_n100 start Td_n=0? 开外部中断1并置最低位闪烁 清软硬看门狗 2秒定时到? 下键? 上键? N N N Y Y Y 调用命令发送程序 调用数据转换程序 正确吗? 正确吗? 送显示 Y N N Y 7=>td_n Yd_n100-1=>yd_100 Yd_n100=9? 0fh=>yd_100 N N Y Y Td_n-1=>td_n 调用命令发送程序 正确吗? 正确吗? 调用数据转换程序 N Y Y N 送显示、置2S定时初值 上键处理流程与下键相似,此处从略。 N Y
2、数据转换子模块(rand_data.a51)
功能: 本模块先将ASCII码转换成BIN码,然后将BIN码转换成BCD码并将数据转换成可直接显示的格式
入口: a=通道号
出口: r1=个位,r2=十位,r3=百位,r4=千位(显示数据)
a=非0表示该通道未用
注:本子模块中直接将小数点信息加到相应位数据上,如需在某位显示小数点,则将该位数据加10H,显示子模块根据此信息显示小数点。
各子程序功能介绍:
l bcd2_bcd1:将r3,r4中的4位bcd码由低至高分别存入r1,r2,r3,r4中;
l ascii4_bcd3:将(r0)为首地址的4字节ascii码转换成bcd码并将bcd码由低至高依次存放在r3,r4,r5中,r3,r4中各存放2位bcd码,r5中存放一位bcd码;
l bin_bcd:将r1,r2中的bin码转换成bcd码并将bcd码由低至高依次存放在r3,r4,r5中,r3,r4中各存放2位bcd码,r5中存放一位bcd码;
l ascii4_bin2:将(r0)为首地址的4字节ascii码转换成2位bin码存放在r1(低字节),r2(高字节)中;
注:[(r0)指r0中内容]
l ascii_bin:将(r0)为地址的一位ascii码转换成bin码存A中。
(高级子程序调用低级子程序以实现更强的功能,源程序中对各子程序有较详细的注释,故此处仅画出主流程图)
开始 计算通道数据首地址 调用数据转换程序 还原小数位数存R6 BCD码超过5位吗? 该通道数据为0X0ffff吗? 返回该通道未用信息 Y Y N N 退出 转换成可显示数据存R1-R4 有效位前的零消除处理 返回数据正确信息 负数处理,当数据小于-199.9时显示-199.9
3、显示、软件看门狗、20ms定时器子程序(rand_disp.a51)
功能: 通过定时器0以1MS为周期动态显示缓冲区中的内容;同时完成20ms定时器及软件看门狗计数;当软件看门狗定时器溢出时自动复位。
入口: 以disp_buf为首地址依次存放从个位至十万位待显示数据,以disp_wc为首地址(位地址)依次存放个位至千位闪烁控制位信息,为'0'常亮,为'1'闪烁.
T0中断入口 保护现场 显示码表地址=>dptr Disp_s_c取反 Disp_c+1=>disp_c Disp_c=>R0 Disp_s-1=>disp_s,Disp_s=0? Y N