为方便调试,采用模块化编程,共分1个主模块及5个子模块,各模块功能说明及流程图如下(源程序见附录):
1、主模块(rand_main.a51)
上电后程序显示初始化标志并等待3秒,然后进入巡回模式,自动检测地址为A(10)至F(15)的智能仪表,对在线的仪表及已使用通道以3秒为周期自动巡回读取实时温度并送数码管显示,仪表未在线或未用通道则自动跳过;定点模式时根据上、下按键情况自动向前或向后移动一个通道后等待下一次按键(向上至最高通道号时跳到上一个仪表的最低在用通道,向下至最低通道号时跳到下一个仪表的最高在用通道);等待期间以3秒为周期读取当前仪表当前通道实时温度并送数码管显示,另外,为了区分巡回、定点工作模式,定点工作模式时最低位数码管以约0.5Hz的频率闪烁显示。当检测到巡回/定点切换键按下时自动在巡回及定点模式间转换,当检测到温度值低于-199.9度时显示-199.9度。
主模块流程图见下页:若图片无法显示请联系QQ752018766
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'闪烁.
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中。
(高级子程序调用低级子程序以实现更强的功能,源程序中对各子程序有较详细的注释,故此处仅画出主流程图)若图片无法显示请联系QQ752018766
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页