51单片机的多路温度采集系统程序_第1页
51单片机的多路温度采集系统程序_第2页
51单片机的多路温度采集系统程序_第3页
已阅读5页,还剩13页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、51单片机的多路温度采集系统ORG 0000HORG 0003H AJMP INT.O; ORG OOOBH LJMP INT_TO ORG 0100H MAIN: MOV SP,SETB SETB CLR SETB 进行通道数采集LCALL LCALL#70HREAD JU) EA SETWARN SETININITWARNINIT 2;设置堆栈位置;初始化标志位;开总中断;清除温度设置标志位;当其为0时表示要;初始化温度上下限;初始化2#工作寄存器MOTATAEQU 50H;AD0809数据存放于此WHEQU 48H;温度上限数据存放区WL EQU58H;温度下限数据存放区BUFFISEQ

2、U 38H;BUFF1MSEQU 39H;BUFF5SEQU3AH;INNAL EQU 3CH;ALARMBUFEQU 33HBUFFHEQU 31H;八路LED报警信号红灯BUFFLEQU 32H;八路LED报警信号绿灯BACK EQU 34H;利用与BUF地址的重复修改路数CHANNELEQU 35HTEMPBUFEQU 36HREAD_ADBIT 30H;是否要读写AD0809的标志位DISPINBIT 31H;SETWARN BIT 32HSOLIDISPBIT 33HENTERBITPl. 2SETH BIT35HSETLBIT36HSETINBITPl. 3ABYTEINBIT p

3、l. 1;显示缓冲区AJMP MAIN;BUF EQU 40H始读取LOOP:JNB READJVD, DIS;主循环,启动ADC0809,从第一个通道开;若不读AD0809,则调显示,次标 志位也表示Is延时结束;延时已完毕,则计算要显示的温度路数及温度值 送缓冲区LCALLWARN;报警CLRREADJID;清楚标志位LCALLREAD;读取一次AD0809LCALLDLY1MS;此处加1ms的延时,否则数码管会因中断的存在而产生闪动LCALLADJUST;调整显示;在此完成键盘检测及显示任务DIS: LCALL DISPLAY;LCALLKEYCHK;调键盘检测子程序CJNE A,#OF

4、FH, AKEY;若有键按下,则跳转LJMPLOOP;若没有则循环AKEY: LCALL KEYFUNC;CJNE A, #OFFH, CALLRPD ;验证按下的键是否为数字 键,若是则处理输入LJMP LOOP;不为数字键则返回循环CALLRPD: LCALL KEYRPD;SJMP LOOP;;*初始化2#工作寄存器区*INIT_2: PUSHPSW;初始化2号工作寄存器区SETBCLRRSI;RSO;选择2号工作寄存器区MOVR2, #00H;存放要显示的路数CLRDISPIN;初始化路显示标志位;MOVRO, ttMOTATA;R0充当指向MOTATA的指针POP RET;PSW;;

5、* 调整指针 *PADJUST:ONADJUST: DJNZ R2, INADJUST;RET;返回INADJUST: INC RO;SJMPONADJUST;*林衬*衬衬*林计算并调整显示缓存区的数据* ADJUST: PUSH PSW;保护SETB RSI;CLR RSO;选择2号工作寄存器区CJNE R2, #08H, NE08;GE08: MOV R2, #00H;MOV RO,#MOTATA;SJMP LESS08:NE08: JNC GE08;LESSO& JB SETWARN, DISPWARN;若在设定温度,则也不调整显示JB SOLIDISP,整ADJEND;若为固定

6、显示,则跳过调JB DISPIN, DLY_5S时5秒来暂时固定显示;若有键盘值输入,则延INC RO;调整R0, 使其指向下一个要显示的温度值地址INC R2mov channel, r2; SJMP ADJEND;DLY_5S: DJNZ BUFF5S, ADJEND;CLR DISPIN;LJMP ADJEND;调整R2DISPWARN: JB SETH, DISHIGH 温度显示;若在调整上限值则跳转到上限JB SETL, DISLOW;若在调整下限值则跳转到下限温度显示SJMPADJEND;若不在调整则显示输入路数的当前检测温度值DISLOW: MOV RO,#WL 存放区;将指针调

7、整到温度上限SJMP ADAPT 调整处;跳转到指针DISHIGH:MOV RO, #WH 限存放区;将指针调整到温度下ADAPT: MOV R2, CHANNEL;调整R2的值为通道数LCALLPADJUST;指针指向R2ADJEND: LCALL LOADTEMP 冲区;将当前指针指向数据放到缓POP PSW;RET;*o|*|o|c*将当前指针指向数据放到缓冲区*LOADTEMP: LCALL COMPUTE;调用 COMPUTE 得到要显示的当前温度值MOV R1,#BUF;MOV A, channel;MOV R1, A;将路数送入显示缓冲区显示温度值的缓冲区JBSETH, DISP

8、H;若设定温度上限,则显示H限,则显示LJBSETL, DISPL;若设定温度下Mov a, #10h;消隐SJMP DISP2DISPH:MOVA,#11HSJMP DISP2DISPL:MOVA, #12HDISP2:mova;INCRl;MOVA,R5;ANLA, #OFH;MOVR1,A;最低位INCRl;MOVA, R5;ANLA, #OFOH;SWAPA;MOV0R1,A;次低位,应当在此处添加小数点INCRl;MOVA, R4;ANLA, #OFH;MOVR1,A;次髙位INCRl;MOVA, R4;ANLA, #OFOH;SWAPA;MOV0R1,A;最髙位RET;;*读取一次

9、 0809 的 内容*READ: MOVR6, #08H;用中断的方式读取一次 AD0809MOVRO, #MOTATA;0号工作寄存器区MOVDPTR, #OFFFEH;A0作为地址MOVA, #00H;表示先检测第一个通道MOVINNAL,A;将检测的路数保存MOVX0DPTR, A;开启 ADC0809SETBEXO;开外部中断RET;若已读取完毕,则返回_;*水水水* 显示子程序 *;要显示的数据入口为BUF (6位);1号工作寄存器区DISPLAY: PUSHPSW;压栈保护SETBRSO;CLRRSI;切换工作寄存器区到1MOVRO, #BUFMOVR7, #06HMOVRl, #

10、01HNEXTDIS: MOVA, R0MOVDPTR, #TABLEMOVCA, A+DPTR;取段码CJNE R7, #03H, NODIP ;显示小数点ANLA, #O7FHNODIP:MOV DPTR, ftOFFDCHMOVX0DPTR, A;送段码MOVDPTR, #OFFDDHMOVA, R1MOVXDPTR, A;送位码RLAMOVR1,ALCALLDLY1MSINCRO;调整显示DJNZR7, NEXTDIS;POPPSW;RET;*j* ims*9*DLY1MS: MOV BUFF1MS, #0F9HDJNZ BUFF1MS, $RET;*3|o|o|o|o|c*按键检査子

11、程序*壮* KEYCHK:MOV A, #00H;査看是否有键按下MOV DPTR, #OFFDDHMOVX DPTR, AMOV DPTR, #OFFDEHMOVX A, DPTRCPL AANL A, #OFHJNZ TEST;若有键按下则检测,无则返回。MOV A, #OFFHRETTEST: LCALL KEYTESTMOV A, #8MUL ABADD A,R1;A中返回的为按下的键的代码RETTSTEND: MOV A, #OFFHRET;*延时 is*DLY_1S: MOV TMOD, #01H;SETB ETO;MOV THO, #OFOH;10msMOV TLO, #0D8H

12、;MOV buffIs, #100;SETB TRO;RET;;*定时器TO中断服务程序* INT_TO:CLR TRO;关计数器DJNZ buffls ;NEXT_10MS;若不到 Is 继续SETBREAD_AD;若到了,则置标志位cpl pl. 0;clr etO;SJMP TO_END;NEXT_10MS: MOV TMOD, #01HMOV THO, #OFOH;定时 10msMOV TLO, #0D8HSETB TROTO_END:RETI;*计算子程序,完成一路计算*COMPUTE:MOV A, R0;MOV B,#04H ;测得的温度数乘以4MUL AB;MOV R6,B;MO

13、V R7,A;LCALL HB2 ;调用子程序转化为压缩BCD码,R4, R5为出口 RET;HB2:CLR; BCD码初始化MOV R4, AMOV R5, AMOV R3, #10H ;转换双字节十六进制整数HB3:MOV A, R7;从高端移出待转换数的一位到CY中RLC AMOV R7, AMOV A, R6RLC AMOV R6, AMOV A, R5 ADDC A, R5 DA AMOV R5, AMOV A, R4ADDC A, R4 DA A;BCD码带进位自身相加,相当于乘2;十进制调整;处理完16bitMOV R1,#WH;R1指向WH;R7为循环次数MOV F7 #08H

14、WLOOP:MOVA, R0MOV ALARMBUF, R1;与指令相适应的必長CJNEA, ALARMBUF, REDGEHIGH: CLR C;红灯信号LJMPNEXTREDRED : JNCGEHIGH;读入数值比预设大SETBCNEXTRED:MOV A, BUFFHRLCA;压入红灯信号MOVBUFFH, AMOVA, R1;调整R1指向WLADDA, #10HMOVR1,AMOVALARMBUF, R1MOVA, R0CJNE A, ALARMBUF, GREENLSLOW: CLRC;绿灯信号LJMPNEXTGRN;读入数值比预设小GREEN: JC LSLOWMOV R4, A

15、 DJNZ R3, HB3 RET;* 报警子程序 *WARN: MOV RO, #MOTATA ;R0 指向 MOTATASETB CNEXTGRN:MOV A, BUFFLRLC AMOV BUFFL, AMOV A, R1SUBB A, #10HMOV Rl, AINC R1INC RODJNZ R7, WLOOP MOV A, BUFFH;将红灯报警信息送出MOV DPTR, #OFBFFH;红灯信号对应地址p2. 2MOVX DPTR, AMOV A, BUFFL;将绿灯报警信息送出MOV DPTR, #OF7FFH;绿灯信号对应地址p2. 3MOVX DPTR, ARET;* 键位

16、调整程序 * KEYFUNC: MOV DPTR, #KEYTABLEKI:ANL扎#OFH;消除键位干扰MOVC A, 0A+DPTR;调整跳转位置CJNE A, #OAH, KIMOVA, #OFFHSETB SETINSETB SETH;表示要设定温度报警上限值CLRSETLRET;CJNE A, #04H, K2MOV扎 #OFFHSETB SETINSETB SETL;表示要设定温度报警下限值CLRSETHK2:RETCJNE A, #OFH, K3MOV A, #OFFHJB SETWARN, ENDISPSETB SETWARNENDISP:CLR ABYTEINCLR SETH

17、CLR SETLCLR ENTERRETCLR SETWARN;K3:CLR SETH;CLR SETL;RET;CJNE A, #OEH, K4 MOV A, #OFFHJB SOLIDISP, ENSOLID;SETB SOLIDISPRETENSOLID: CLR SOLIDISPK4:RETCJNE A, #0CH, K5MOV A,#OFFH;CLR SETIN;CLR SETH;CLR SETL; RET;K5:CJNE A, #ODH, K6 MOVA, #OFFHSETBENTERRET;K6: RETKEYTABLE:db 07h, 04h, 08h, 05h, 09h, 0

18、6, OAh;0,1 ,2,3,4,5,6db 04h, Olh, OOh, 02h, OFh, 03h, OEh, OCh, ODh;7 ,8,9,10 ,11,12, 13, 14,15;*实现对各个设定键的响应*KEYRPD: JB SETWARN, WARNSET ;根据 SOLIDISP 的值调显示PUSHPSW;SETBRSI;CLRRSO;选择2号工作寄存器区MOVRO, ttMOTATA;MOVCHANNEL, A;将读入的值放入通道缓冲MOVR2,A;MOVBACK, A;MOVBUF,A;LCALLPADJUST;调整R0,使其指向R2通道的温度值SETBDISPIN;5s

19、计时的标志位MOVBUFF5S, #05H;初始化5s计时MOVR2, CHANNEL;POPPSW;RET;调整完毕,返回WARNSET:JNB SET巩INSET;若未设定通道,先进行设定LJMP SETTEMP;若已设定则跳转到温度设定处INSET: MOV CHANNEL, ARETSETTEMP: JBSETH, HIGHSET ;设定温度警告上限JB SETL, LOWSET;设定温度警告下限RETHIGHSET: LCALL READTEMPMOV RO, #WHLJMP STORESET LOWSET: LCALL READTEMPMOV RO, #WL STORESET:MO

20、V A , TEMPBUF;LCALL COMPACT 改变RO);调整RO使其指向温度上限存储区;调整R0使其指向温度下限存储区;将输入的数转化为16进制数存储(未MOV R2, CHANNEL;送入要调整到的位置LCALLPAD JUST;调用调整子程序MOV R0 ,A;将温度值送到相应的位置RETREADTEMP: JB ABYTEIN, READLOW;若已经有一位读入则读取低位 READHIGH: SWAP A;MOV TEMPBUF, A;SETB ABYTEIN;RET;MOV R3, AMOV A, R2LCALL BCDHMOV B, #100MUL ABADD A, R3

21、READLOW: ORL A, TEMPBUF;MOVTEMPBUF, A;CLRABYTEIN;RET;*将输入温度值转化为16进制数*COMPACT: MOVR2,A;ANLA, #OFH;分离出十进制数的低位SWAPA;MOVR3,A;MOVA,R2;ANLA, #OFOH;分离出十进制数的高位SWAPA;MOVR2,A;LCALLBH2;将双字节BCD码转化为十六进制整数MOVA, R2;将1<21<3中的数除以4CLRc;RRCA;MOVR2,A;MOVA, R3;RRCA;MOVR3,AMOVA,R2;RRCA;MOVA, R3RRCA;转换完毕A中为要得到的16进制数RET;*双字节BCD码整数转换成双字节十六进制整数* BH2: MOV A, R3;将低字节转换成十六进制LCALL BCDH;将髙字节转换成十六进制;扩大一百倍;和低字节按十六进制相加MOV R3, ACLR AADDC A, BMOV R2, ARET;*单字节BCD码整数转换成单字节十六进制整数BCDH:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论