温度巡检仪源程序.docx

上传人:b****6 文档编号:7111551 上传时间:2023-01-18 格式:DOCX 页数:18 大小:18.48KB
下载 相关 举报
温度巡检仪源程序.docx_第1页
第1页 / 共18页
温度巡检仪源程序.docx_第2页
第2页 / 共18页
温度巡检仪源程序.docx_第3页
第3页 / 共18页
温度巡检仪源程序.docx_第4页
第4页 / 共18页
温度巡检仪源程序.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

温度巡检仪源程序.docx

《温度巡检仪源程序.docx》由会员分享,可在线阅读,更多相关《温度巡检仪源程序.docx(18页珍藏版)》请在冰豆网上搜索。

温度巡检仪源程序.docx

温度巡检仪源程序温度巡检仪源程序/*内存分配定义*/TIME_CONTEQU33H/*定时时间*/TIME_COUNTEQU34H/*100ms中断次数*/KEY_CODEEQU35H/*按键代码*/KEY_VALEQU36H/*按键数值*/CHAN_NUMEQU37H/*当前采样通道号*/SAMP_NUMEQU38H/*采样次数*/CHAN_NUM1EQU39H/*当前显示通道号*/TEMP1EQU40H/*1通道温度*/TEMP2EQU41H/*2通道温度*/TEMP3EQU42H/*3通道温度*/TEMP4EQU43H/*4通道温度*/TEMP5EQU44H/*5通道温度*/TEMP6EQU45H/*6通道温度*/TEMP7EQU46H/*7通道温度*/TEMP8EQU47H/*8通道温度*/SAMP_MAXEQU48H/*当前通道10次采样最大值*/SAMP_MINEQU49H/*当前通道10次采样最小值*/SAMP_SUMHEQU4AH/*当前通道10次采样累加值高位*/SAMP_SUMLEQU4BH/*当前通道10次采样累加值低位*/SAMP_AVGEQU4CH/*当前通道去掉最大值和最小值后8次采样平均值*/SAMP_VALEQU4DH/*当前通道采样值*/TEMP_VALEQU4EH/*当前通道温度值*/DIS_BUF1EQU50H/*显示缓冲区1*/DIS_BUF2EQU51H/*显示缓冲区2*/DIS_BUF3EQU52H/*显示缓冲区3*/DIS_BUF4EQU53H/*显示缓冲区4*/DIS_BUF5EQU54H/*显示缓冲区5*/DIS_BUF6EQU55H/*显示缓冲区6*/DIS_NUMEQU57H/*显示通道号寄存器*/DIS_CONHEQU58H/*CH451操作命令高位*/DIS_CONLEQU59H/*CH451操作命令低位*/ST_FLAGBIT20H.0/*系统启动标志*/XJ_FLAGBIT20H.1/*巡回检测标志*/KEY_FLAGBIT20H.2/*有键按下标志*/T_1SBIT20H.3/*1秒时间到*/SAMP_1BIT20H.4SAMP_END10BIT20H.5/*10次采样结束标志*/SAMP_NO1BIT20H.6/*每通道采样开始标志*/DD_FLAGBIT20H.7/*定点检测标志*/CHAN_ADD0EQU0FF80H/*温度检测通道首地址*/AD_ADD0EQU0FE00H/*AD通道首地址*/AD_ENDBITP3.2/*AD转换结束标志*/DIS_DOUTBITP3.3/*按键输入*/DIS_LOADBITP1.0/*命令输入有效*/DIS_DINBITP1.1/*显示命令输出*/DIS_DCLKBITP1.2/*显示时钟输出*/ORG0000HSTART:

LJMPMAINORG0003H/*AD转换结束中断入口*/NOPNOPNOPNOPLJMPERRORG000BH/*定时器0中断入口*/LJMPTIME0NOPNOPLJMPERRORG0013H/*键盘中断入口*/LJMPKEY_INNOPNOPLJMPERRORG0040HMAIN:

MOVSP,#60HMOVTMOD,#21H/*定时器0为方式1工作,定时器2为方式2工作*/MOVTH0,#3CH/*定时器0定时值为500ms*/MOVTL0,#0AFHMOVTH1,#0FDH/*通信波特率为4800b/s*/MOVTL1,#0FDHMOVSCON,#01000000B/*串口方式为工作方式1*/MOVA,30HCJNEA,#0AAH,NRAMMOVA,31HCJNEA,#55H,NRAM/*判断是否上电复位*/SJMPDISP_INITNRAM:

MOVR0,#7FH/*RAM低128B清零*/NRAM1:

MOVR0,#00HDJNZR0,NRAM1MOV30H,#0AAH/*置上电标志*/MOV31H,#55HNOPNOPDISP_INIT:

NOPMOV20H,#00H/*内部状态位清零*/MOVDIS_BUF1,#0111001BMOVDIS_BUF2,#1110011BMOVDIS_BUF3,#0111110BMOVDIS_BUF4,#1000000BMOVDIS_BUF5,#1101101BMOVDIS_BUF6,#0000110B/*cpu-51写入显示缓冲区*/SETBDIS_DIN/*CH451串口方式设为四线制*/NOPNOPCLRDIS_DINNOPNOPSETBDIS_DINMOVTIME_CONT,#1HMOVSAMP_NUM,#00HMOVCHAN_NUM,#00HMOVCHAN_NUM1,#01HMOVTIME_COUNT,TIME_CONT/*定时时间设为100毫秒*/SETBIT1/*键盘中断设为边沿触发方式*/SETBPX1/*键盘中断设为高优先级*/SETBET0/*允许定时器0中断*/SETBEA/*开中断*/SETBTR0/*启动定时器0*/SETBSAMP_NO1MOVSAMP_NUM,#00HMAIN1:

JNBT_1S,MAIN1/*快速检测1通道温度值*/CLRT_1SLCALLSAMP/*采样一次*/MAIN2:

JNBSAMP_END10,MAIN1/*采完10次*/CLRSAMP_END10MOVDIS_CONH,#5H/*设定显示参数,不译码,扫描6位*/MOVDIS_CONL,#60HLCALLDISP_WRITEMOVDIS_CONH,#4H/*设定系统参数,启用显示及键盘功能*/MOVDIS_CONL,#03HLCALLDISP_WRITELCALLDISP_OUT/*显示“CPU51”*/CLREASETBEX1SETBEAWAIT:

JNBKEY_FLAG,WAITCLRKEY_FLAGMOVA,KEY_VALCJNEA,#8,WAIT1SETBST_FLAGWAIT1:

JNBST_FLAG,WAIT/*系统是否启动*/*巡检仪主程序*/CLREX1/*关键盘中断*/MOVDIS_CONH,#04H/*关显示器*/MOVDIS_CONL,#02HLCALLDISP_WRITEMOVDIS_CONH,#5H/*译码方式转为BCD方式*/MOVDIS_CONL,#0E0HLCALLDISP_WRITEMOVCHAN_NUM,#00HLCALLDISP_OUT/*输出显示数据*/MOVDIS_CONH,#4H/*开显示器*/MOVDIS_CONL,#03HLCALLDISP_WRITECLREASETBEX1/*开键盘中断*/SETBEAMOVTIME_CONT,#0AH/*定时时间设为1秒*/MOVTIME_COUNT,TIME_CONTMOVCHAN_NUM,#01H/*初始化检测通道,从第2通道开始*/SETBXJ_FLAG/*设为巡回检测状态*/SETBSAMP_NO1CLRSAMP_END10SETBTR1/*启动定时器1*/*主循环程序*/MAIN_LOOP:

JNBKEY_FLAG,MAIN_LOOP3/*是否有键按下*/CLRKEY_FLAG/*处理键盘命令*/MOVA,KEY_VALSETBEX1/*开键盘中断*/CJNEA,#8,MAIN_LOOP2/*是启动键?

*/JNBDD_FLAG,MAIN_LOOP1/*当前状态是定点检测方式*/SETBXJ_FLAG/*改为巡检方式*/CLRDD_FLAG/*清除定点标志*/MOVCHAN_NUM,#00H/*从1通道开始工作*/MOVSAMP_NUM,#00HSETBSAMP_NO1LCALLDISP_OUT/*显示输出*/MAIN_LOOP1:

SJMPMAIN_LOOP3MAIN_LOOP2:

CLRXJ_FLAG/*如为18键值则清除巡检标志*/SETBDD_FLAG/*改为定点检测方式*/MOVSAMP_NUM,#00HSETBSAMP_NO1MOVCHAN_NUM,KEY_VAL/*将按键值写入当前通道寄存器*/LCALLDISP_OUT/*显示该通道温度值*/MAIN_LOOP3:

JNBT_1S,MAIN_LOOP7/*1秒时间到*/LCALLSAMP/*启动AD转换*/CLRT_1SJNBSAMP_END10,MAIN_LOOP7/*采完10次*/MOVSAMP_NUM,#00HCLRSAMP_END10SETBSAMP_NO1LCALLDISP_OUT/*显示温度值*/JNBXJ_FLAG,MAIN_LOOP7/*巡检标志置位*/MOVA,CHAN_NUM/*当前通道号加1*/ADDA,#1MOVCHAN_NUM,ACJNEA,#8H,MAIN_LOOP7/*当前通道号为8*/MOVA,#00H/*当前通道号复归为1号*/MOVCHAN_NUM,AMAIN_LOOP7:

LCALLSEND/*调用串口发送程序*/LJMPMAIN_LOOP/*数据采样子程序*/SAMP:

PUSHACCPUSHPSWSETBRS0MOVA,CHAN_NUMMOVDPTR,#CHAN_ADD0/*输出温度检测通道,发采样脉冲*/ADDA,DPLMOVDPL,AMOVXDPTR,ANOPNOPMOVA,CHAN_NUMMOVDPTR,#AD_ADD0/*根据通道号计算出对应的AD地址*/ADDA,DPLMOVDPL,AMOVXDPTR,A/*启动AD转换器*/NOPNOPNOPSAMP1:

JBAD_END,SAMP1/*等待AD转换结束*/MOVXA,DPTR/*读AD转换值*/INCSAMP_NUM/*采样次数加1*/JNBSAMP_NO1,SAMP2/*是否首次采样*/MOVSAMP_SUMH,#00H/*10次累加和赋初值*/MOVSAMP_SUML,AMOVSAMP_MAX,A/*最大值赋初值*/MOVSAMP_MIN,A/*最小值赋初值*/CLRSAMP_NO1SJMPSAMP4SAMP2:

MOVSAMP_VAL,A/*每次采样值累加*/ADDA,SAMP_SUMLMOVSAMP_SUML,ACLRAADDCA,SAMP_SUMHMOVSAMP_SUMH,AMOVA,SAMP_VAL/*当前采样值是否为最大值?

*/CLRCSUBBA,SAMP_MAXJCSAMP3MOVA,SAMP_VAL/*更新最大值*/MOVSAMP_MAX,ASJMPSAMP4SAMP3:

MOVA,SAMP_VAL/*当前采样值是否为最小值?

*/CLRCSUBBA,SAMP_MINJNCSAMP4MOVA,SAMP_VAL/*更新最小值*/MOVSAMP_MIN,ASAMP4:

MOVA,SAMP_NUMCJNEA,#0AH,SAMP5/*是否采样完10次*/*去极值平均算术数字滤波*/CLRC/*从累加和中减去最大值*/MOVA,SAMP_SUMLSUBBA,SAMP_MAXXCHA,SAMP_SUMHSUBBA,#00HXCHA,SAMP_SUMH/*再从累加和中减去最小值*/SUBBA,SAMP_MINMOVSAMP_SUML,AMOVA,SAMP_SUMHSUBBA,#00HSWAPA/*剩余数值除以8*/RLAXCHA,SAMP_SUMLSWAPARLAADDA,#80H/*结果四舍五入*/ANLA,#1FHADDCA,SAMP_SUMLMOVSAMP_AVG,A/*保存去极值平均滤波后的最终采样值*/SETBSAMP_END10SJMPSAMP6SAMP5:

AJMPSAMP8/*采样值转为温度值*/SAMP6:

MOVR2,#00HMOVR3,SAMP_AVGMOVR6,#0C7H/*r6r7为定点小数0.779*/MOVR7,#6CHMOVA,R3/*r3*r6r7小数部分四舍五入取整*/MOVB,R7MULABMOVR4,BMOVR5,AMOVA,R3MOVB,R6MULABADDA,R4MOVR4,ACLRAADDCA,BMOVR3,AMOVA,R2MOVB,R7MULABADDA,R4MOVR4,AMOVA,R3ADDCA,BMOVR3,ACLRARLCAXCHA,R2MOVB,R6MULABADDA,R3MOVR3,AMOVA,R2ADDCA,BMOVR2,AMOVA,R4JNBACC.7,SAMP7INCR3CJNER3,#0,SAMP7INCR2SAMP7:

MOVTEMP_VAL,R3/*将温度值存入TEMP_VAL*/MOVA,CHAN_NUMMOVR0,#TEMP1ADDA,R0MOVR0,AMOVR0,TEMP_VALSAMP8:

CLRRS0POPPSWPOPACCRET/*温度值显示子程序*/DISP_OUT:

PUSHACCPUSHPSWPUSHBPUSH00HJNBST_FLAG,DISP_OUT0/*系统在工作状态,将温度值写入显示缓冲区*/MOVA,CHAN_NUMADDA,#1HMOVCHAN_NUM1,AMOVA,CHAN_NUMMOVR1,#TEMP1ADDA,R1MOVR1,A/*将温度值转为三位BCD码,存入R3,A,B*/MOVA,R1MOVB,#100DIVABMOVR3,AMOVA,#10XCHA,BDIVABMOVDIS_BUF1,CHAN_NUM1/*显示通道号*/MOVDIS_BUF2,#10010B/*显示“”*/MOVDIS_BUF3,#00H/*显示温度千位*/MOVDIS_BUF4,R3/*显示温度百位*/MOVDIS_BUF5,A/*显示温度十位*/MOVDIS_BUF6,B/*显示温度个位*/*数据显示输出*/DISP_OUT0:

MOVR1,#7H/*显示位数为6位*/MOVR2,#0DH/*从左至右开始描扫*/MOVR0,#50H/*显示区首址*/DISP_OUT1:

MOVDIS_CONL,R0MOVA,R2ORLA,#8HMOVDIS_CONH,AACALLDISP_WRITE/*将数据写入显示芯片*/INCR0DECR2DJNZR1,DISP_OUT1/*共写6位数据*/POP00HPOPBPOPPSWPOPACCRET/*显示芯片命令写入子程序*/DISP_WRITE:

PUSHACCPUSHBPUSH07HPUSH00HCLREX1CLRDIS_LOADMOVR7,#08HMOVA,DIS_CONLMOVB,DIS_CONHDISP_WRITE8:

RRCACLRDIS_DCLKNOPNOPMOVDIS_DIN,CNOPNOPSETBDIS_DCLKDJNZR7,DISP_WRITE8MOVA,BMOVR7,#04HDISP_WRITE4:

RRCACLRDIS_DCLKNOPNOPMOVDIS_DIN,CNOPNOPSETBDIS_DCLKDJNZR7,DISP_WRITE4NOPNOPSETBDIS_LOADSETBEX1POP00HPOP07HPOPBPOPACCRET/*键盘中断程序*/KEY_IN:

PUSHPSWPUSHACCPUSHDPHPUSHDPLPUSH06HCLREX1MOVSAMP_NUM,#00HCLRDIS_LOADMOVA,#07HMOVR7,#04HDIS_READ4:

RRCA/*发送读键码命令*/CLRDIS_DCLKNOPNOPMOVDIS_DIN,CNOPNOPSETBDIS_DCLKDJNZR7,DIS_READ4SETBDIS_LOADCLRAMOVR7,#07HDIS_READ7:

MOVC,DIS_DOUT/*读出键码*/CLRDIS_DCLKRLCASETBDIS_DCLKDJNZR7,DIS_READ7CLRIE1MOVKEY_CODE,ASUBBA,#40HMOVKEY_VAL,ASETBKEY_FLAGSETBEX1POP06HPOPDPLPOPDPHPOPACCPOPPSWRETI/*100MS定时中断程序*/TIME0:

PUSHPSWPUSHACCMOVTH0,#3CH/*计数器重新赋值*/MOVTL0,#0AFHCLRAMOVA,TIME_COUNTDECAMOVTIME_COUNT,AJZTIME1SJMPTIME0_1TIME1:

MOVTIME_COUNT,TIME_CONTSETBT_1STIME0_1:

POPACCPOPPSWRETI/*串口发送子程序*/SEND:

PUSHACCPUSHPSWMOVR0,#80HMOVR1,#TEMP1MOVR0,#0DBH/*数据起始标志,DBDB写入发送缓冲区*/INCR0MOVR0,#0DBHINCR0MOVR2,#8HMOVR3,#00HSEND1:

MOVA,R1/*温度值写入发送缓冲区*/MOVR0,AADDA,R0MOVR3,AINCR1INCR0DJNZR2,SEND1MOVA,R3MOVR0,AINCR0MOVR0,#0EEHMOVR0,#80H/*发送缓冲区中数据*/MOVR4,#0BHSEND2:

MOVSBUF,R0SEND3:

JNBTI,SEND3/*查寻方式发送*/CLRTIINCR0DJNZR4,SEND2POPPSWPOPACCRET/*程序出错恢复子程序*/ERR:

CLREA/*关中断*/MOVDPTR,#ERR1/*准备返回地址*/PUSHDPLPUSHDPHRETI/*清除高级中断激活标志*/ERR1:

MOV30H,#0AAH/*重建上电标志*/MOV31H,#55HCLRAPUSHACC/*压入复位地址*/PUSHACCRETI/*清除低级中断标志*/ORG1FFAHNOPNOPNOPLJMPERREND

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1