基于单片机的多路温度采集系统_第1页
基于单片机的多路温度采集系统_第2页
基于单片机的多路温度采集系统_第3页
基于单片机的多路温度采集系统_第4页
基于单片机的多路温度采集系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、目 录 第1节 前 言11.1 多路温度采集系统概述11.2 本设计任务和主要内容1第2节 系统总体设计22.1 系统概述22.2 系统工作原理2第3节 系统的硬件设计3 3.1 CPU的选用33.2 ADC08094 3.2.1 ADC0809的内部逻辑结构4 3.2.2引脚结构5第4节 软件编辑思路及流程64.1 软件编辑思路64.2 具体软件编程6第5节 结束语18参考文献1918基于单片机的多路温度采集系统第1节 前 言 本课题要设计一种多路温度采集检测系统,采用目前低价位但技术十分成熟的AT89C52单片机作为内核,选用电位器代替热敏电阻为输入元件,利用ADC0809转换信号,送到显

2、示器(8个LED数码管)循环显示所测的四路温度数值,并根据现场工业需要,设置了一定范围的报警值,报警优先显示,利用按键消除报警。可用按键查看某一路的温度值,查看时采集不中断。软件算法上采用了直接拟合的方法(通过电压-温度关系来计算温度值),符合课题要求。本课题构成的多路温度系统具有结构简单、价格低廉、测量精度高、量程宽的特点,在很多场合具有一定的适用性。关键词: AT89单片机、温度采集、显示、报警1.1 多路温度采集系统概述 温度采集在工业中的应用越来越广泛,而且要求也越来越高,我们结合本学期所学的单片机原理与应用技术课程,利用实验室已有的AT89系列单片机,作一个简易的可多路检测温度并能在

3、超出范围时报警的系统。该系统用AT89S52单片机作为内核,利用ADC0809转换芯片辅助,以八个电位器作为模拟温度输入信号,一个5路8位数码管作为显示设备。可单独循环显示每一路的温度值,并且有键盘控制显示每路的温度值,这样可以满足在工业需要。1.2 本设计任务和主要内容设计应解决下列各主要问题:1、8路温度值(可用05V电压值模拟0-100)的数据采集,经A/D转换后送入单片机;2、8个键盘、8个LED数码管显示电路,用于循环显示每一路的温度值(显示精确到小数点后一位),通过按键还可以选择任意一路显示。3、设温度值的正常范围,若当前温度值超过此范围,则LED闪烁报警;4、通过按键解除报警。

4、第2节 系统总体设计2.1 系统概述根据设计要求的性能指标,本系统不仅要满足一定精度的温度采集的基本功能,而且由于测量的路数为8路,还存在多路信号的循环显示问题,还要考虑温度超限报警输出的功能,同时系统还具有显示当前各路的测量温度值的功能和键盘选择显示路数的功能。22 系统工作原理根据本课题的设计目标以及硬件的特点,本系统的结构原理图如下图2-1所示:              图2-1  系统结构原理图图2-2 系统原理图第3节 系统的硬件设计 一个温度

5、采集系统,包括被采集信息的采集、转换、显示等环节,在本多路温度采集系统中,包括A/D转换电路的设计,CPU的选型以及包括显示电路,存储器、报警电路、电源电路等设计。31 CPU的选用目前,生产单片机的厂商有很多,尤其是近年来微电子技术、计算机技术的飞速发展,比较著名的有Intel、Philips、Microchip、Motorola、Zilog、Atmel等半导体企业。在上述著名的半导体企业产品中,尤其在工业测控场合,运用较多的为Intel公司的MCS-51系列,Microchip公司的PIC系列,如果作单路温度测量,恐怕要选择该系列的CPU,但由于本系统涉及的是多路,各路报警的输出信号需要单

6、独输出,而且考虑信号调理电路的切换等还需要不少的控制线,因此该系列的少引脚特点就不适合本设计的需要,因此,本设计还是选用了ATMEL最新的8位单片机AT89S52作为本系统的CPU。下面简单地介绍一下89S52。功能特性描述:AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度易失性存储器技术制造,与工业  80S52 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 AT89S52 为众多嵌

7、入式控制应用系统提供高灵活、超有效的解决方案。89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至  0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。    

8、60;                                                  &#

9、160;    图3-1   89C52的引脚  32 ADC0809ADC0809是把采集的模拟量转换成数字量并传送到89C52中。它是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件并且还是逐次逼近式A/D转换器,可以和单片机直接接口。  3.2.1  ADC0809的内部逻辑结构               

10、0;                 图3-2  ADC0809的内部逻辑结构由图3-2可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。3.2.2 引脚结构   &

11、#160;                    图3-4 ADC0809的引脚第4节 软件编辑思路及流程41 软件编辑思路 软件编辑思路:数字显示-算法-一路采集-一路采集转换及显示-八路采集转换及显示-键盘小子程序-八路循环采集且键盘控制-八路循环采集且键盘控制和报警。4.2 具体软件编程 ORG 0000H    AJMP MAIN;   

12、BUF  EQU  40H ;显示缓冲区    MOTATA  EQU  50H ;AD0809数据存放于此    WH    EQU  48H ;温度上限数据存放区    WL  EQU  58H ;温度下限数据存放区    BUFF1S  EQU 38H;    BUFF1MS  EQU  39H; &#

13、160;  BUFF5S  EQU  3AH;    INNAL  EQU  3CH;    ALARMBUF  EQU 33H    BUFFH     EQU 31H ;八路LED报警信号 红灯    BUFFL     EQU  32H ;八路LED报警信号 绿灯    BACK 

14、EQU  34H ;利用与BUF地址的重复修改路数    CHANNEL  EQU  35H    TEMPBUF  EQU  36H    READ_AD  BIT  30H ;是否要读写AD0809的标志位    DISPIN   BIT  31H;    SETWARN BIT  32H    SOLI

15、DISP  BIT  33H    ENTER    BIT   P1.2    SETH  BIT   35H    SETL   BIT   36H    SETIN     BIT   P1.3    ABYTEIN   B

16、IT  p1.1    ORG 0003H    AJMP INT_0;    ORG 000BH    LJMP INT_T0    ORG 0100HMAIN: MOV  SP,   #70H        ;设置堆栈位置        SETB 

17、0; READ_AD         ;初始化标志位        SETB  EA               开总中断        CLR  SETWARN     

18、;      ;清除温度设置标志位        SETB  SETIN            当其为0时表示要进行通道数采集        LCALL  INITWARN        ;初始化温度

19、上下限        LCALL  INIT_2          初始化2#工作寄存器区  ;主循环,启动ADC0809,从第一个通道开始读取LOOP:  JNB  READ_AD,DIS        ;若不读AD0809,则调显示,次标志位也表示1s延时结束    

20、;                           ;延时已完毕,则计算要显示的温度路数及温度值送缓冲区        LCALL  WARN         

21、60;  报警        CLR  READ_AD           清楚标志位        LCALL  READ            读取一次AD0809  

22、;      LCALL  DLY1MS          此处加1ms的延时,否则数码管会因中断的存在而产生闪动        LCALL  ADJUST          调整显示;在此完成键盘检测及显示任务 DIS: LCALL  D

23、ISPLAY;       LCALL  KEYCHK           调键盘检测子程序       CJNE  A,#0FFH, AKEY     若有键按下,则跳转       LJMP  LOOP  

24、            ;若没有则循环AKEY:  LCALL  KEYFUNC;       CJNE   A,#0FFH,CALLRPD   验证按下的键是否为数字键,若是则处理输入       LJMP  LOOP      

25、;         不为数字键则返回循环CALLRPD: LCALL  KEYRPD;       SJMP  LOOP; *初始化2#工作寄存器区*INIT_2: PUSH  PSW               初始化2号工作寄存器区  

26、      SETB  RS1;        CLR   RS0               选择2号工作寄存器区        MOV  R2, #00H     &

27、#160;     存放要显示的路数        CLR  DISPIN             初始化路显示标志位;        MOV  R0, #MOTATA       

28、0;R0充当指向MOTATA的指针        POP  PSW;        RET; *调整指针*PADJUST:ONADJUST: DJNZ  R2,INADJUST;         RET;返回INADJUST: INC  R0;       SJMP 

29、ONADJUST; *计算并调整显示缓存区的数据*ADJUST: PUSH  PSW ;保护        SETB  RS1;        CLR   RS0                选择2号工作寄存器区   

30、     CJNE  R2,#08H,NE08;  GE08: MOV  R2,#00H;        MOV  R0,#MOTATA;        SJMP LESS08;  NE08: JNC GE08;LESS08: JB  SETWARN,  DISPWARN   若在设定温度,则也不调整显示 &

31、#160;      JB  SOLIDISP,   ADJEND   ;若为固定显示,则跳过调整        JB  DISPIN,DLY_5S        ;若有键盘值输入,则延时5秒来暂时固定显示        INC  R0  

32、                调整R0,使其指向下一个要显示的温度值地址        INC  R2                  ;调整R2   &#

33、160;    mov  channel,r2;        SJMP  ADJEND;DLY_5S: DJNZ  BUFF5S,ADJEND;        CLR  DISPIN;        LJMP  ADJENDDISPWARN: JB  SETH,DISHIGH  

34、;    若在调整上限值则跳转到上限温度显示           JB  SETL,DISLOW       ;若在调整下限值则跳转到下限温度显示        SJMP   ADJEND        

35、60;若不在调整则显示输入路数的当前检测温度值DISLOW: MOV  R0,#WL              将指针调整到温度上限存放区        SJMP  ADAPT              跳转到指针调整处

36、DISHIGH:MOV  R0,#WH              将指针调整到温度下限存放区ADAPT: MOV  R2,CHANNEL           调整R2的值为通道数       LCALL  PADJUST  

37、60;         指针指向R2ADJEND: LCALL  LOADTEMP          ;将当前指针指向数据放到缓冲区        POP  PSW;        RET; * 将当前指针指向数据放到缓冲区*LOADTEM

38、P: LCALL  COMPUTE        调用COMPUTE得到要显示的当前温度值           MOV  R1,#BUF;        MOV  A,channel;           MO

39、V  R1,A            将路数送入显示缓冲区           INC  R1               调整到要显示温度值的缓冲区     

40、      JB  SETH,DISPH        若设定温度上限,则显示H           JB  SETL,DISPL        若设定温度下限,则显示L      

41、0; Mov  a,#10h           消隐           SJMP  DISP2DISPH:  MOV  A,#11H        SJMP  DISP2DISPL:  MOV  A,#12HDISP2:  m

42、ov  r1,a;        INC  R1;        MOV  A,R5;        ANL  A,#0FH;        MOV  R1,A        &#

43、160;        最低位        INC  R1;        MOV  A,R5;        ANL  A,#0F0H;        SWAP A;    &

44、#160;   MOV  R1,A                次低位 ,应当在此处添加小数点        INC  R1;        MOV  A,R4;      &#

45、160; ANL  A,#0FH;        MOV  R1,A                 次高位        INC  R1;        MOV  A,

46、R4;        ANL  A,#0F0H;        SWAP  A;        MOV  R1,A                 最高位   

47、     RET; *读取一次0809的内容*READ: MOV  R6,#08H                ;用中断的方式读取一次AD0809       MOV  R0,#MOTATA          

48、0;  0号工作寄存器区      MOV  DPTR,#0FFFEH           A0作为地址      MOV  A,#00H                 ;表示先检测第一个

49、通道       MOV  INNAL,A                将检测的路数保存      MOVX  DPTR,A              

50、60;开启ADC0809       SETB   EX0              ;开外部中断0      RET                 

51、0;       若已读取完毕,则返回 *显示子程序*;要显示的数据入口为BUF(6位);1号工作寄存器区DISPLAY: PUSH  PSW          ;压栈保护         SETB  RS0;         CLR &#

52、160; RS1           ;切换工作寄存器区到 1         MOV  R0,#BUF         MOV  R7,#06H         MOV  R1,#01HNEXTDIS: MOV  A,

53、R0        MOV  DPTR,#TABLE        MOVC  A,A+DPTR ;取段码              CJNE  R7,#03H,NODIP ;显示小数点        

54、;      ANL   A,#07FHNODIP:  MOV  DPTR,#0FFDCH        MOVX  DPTR,A   ;送段码        MOV  DPTR,#0FFDDH        

55、MOV  A,R1        MOVX  DPTR,A    ;送位码        RL   A        MOV  R1,A        LCALL  DLY1MS  

56、;      INC  R0         ;调整显示        DJNZ  R7,NEXTDIS;        POP  PSW;        RET;*延时1ms*DLY1MS: MOV 

57、; BUFF1MS,#0F9H        DJNZ  BUFF1MS,$        RET *按键检查子程序*KEYCHK:MOV  A,#00H      ;查看是否有键按下      MOV  DPTR,#0FFDDH      

58、; MOVX  DPTR,A       MOV  DPTR,#0FFDEH       MOVX  A,DPTR       CPL  A       ANL  A,#0FH       

59、JNZ  TEST      ;若有键按下则检测,无则返回。       MOV  A,#0FFH       RETTEST: LCALL KEYTEST       MOV  BACK,A       LCALL DISPLAY

60、0;      LCALL KEYTEST       CJNE  A,BACK,NOKEYD       WAIT: LCALL  DISPLAY;       MOV  A,#00H       ;等待键抬起

61、0;      MOV  DPTR,#0FFDDH       MOVX  DPTR,A       MOV  DPTR,#0FFDEH       MOVX  A,DPTR       CPL  A 

62、;       ANL  A,#0FH        JNZ  WAIT     ;若键未抬起,则继续等待        MOV  A,BACK ;将检测到的键值送给A        SJMP  CHKENDNOKEYD

63、: MOV A,#0FFHCHKEND: RET;*按键检测子程序*KEYTEST: MOV  R0,#0FEH         MOV  R1,#00H         MOV  R2,#08HNEXTL: MOV  A,R0         MOV  DPTR,#0FFDDH 

64、0;       MOVX  DPTR,A         MOV  DPTR,#0FFDEH         MOVX  A,DPTR         CPL  A      &

65、#160;  ANL  A,#0FH         JNZ   KEYDWN     ;看按下的键是否在当前列         DJNZ  R2,GOSCAN  看是否扫描完毕,若没有则调整继续扫描         S

66、JMP  TSTEND     若扫描完毕,则返回。GOSCAN: MOV  A,R0         RL   A         MOV  R0,A         INC  R1   

67、      SJMP  NEXTLKEYDWN: MOV  R3,#00HLL0: RRC  A         JC  LL1         INC  R3         SJMP  LL0LL1:

68、60; MOV  A,R3         MOV  B,A         MOV  A,#8         MUL  AB         ADD  A,R1  ;A中返回的为按下的键

69、的代码         RETTSTEND: MOV  A,#0FFH         RET *延时1s*DLY_1S: MOV TMOD,#01H;      SETB  ET0;      MOV  TH0,#0F0H    ;10ms

70、0;     MOV  TL0,#0D8H;      MOV  buff1s,#100;      SETB  TR0;      RET;*定时器T0中断服务程序*INT_T0:CLR  TR0 ;关计数器    DJNZ  buff1s ;NEXT_10MS;若不到1s继续    &

71、#160;  SETB  READ_AD;若到了,则置标志位    cpl  p1.0;    clr  et0;       SJMP  T0_END;NEXT_10MS: MOV  TMOD,#01H    MOV  TH0,#0F0H    ;定时10ms    MOV  TL0,#

72、0D8H    SETB  TR0T0_END:   RETI *计算子程序,完成一路计算*COMPUTE: MOV  A,R0;     MOV  B,#04H ;测得的温度数乘以4     MUL  AB;     MOV  R6,B;     MOV  R7,A;    

73、LCALL  HB2 ;调用子程序转化为压缩BCD码,R4,R5为出口     RET;HB2: CLR ;BCD码初始化     MOV R4,A     MOV R5,A     MOV R3,#10H ;转换双字节十六进制整数HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中     RLC A     MOV R7,A 

74、;    MOV A,R6     RLC A     MOV R6,A     MOV A,R5 ;BCD码带进位自身相加,相当于乘2     ADDC A,R5     DA A ;十进制调整     MOV R5,A     MOV A,R4   

75、60; ADDC A,R4     DA A     MOV R4,A     DJNZ R3,HB3 ;处理完16bit     RET;*报警子程序*WARN: MOV  R0,#MOTATA ;R0指向MOTATA      MOV  R1,#WH ; R1指向WH      MOV  R7,#08H&

76、#160;   ;R7为循环次数WLOOP:MOV  A,R0      MOV  ALARMBUF,R1 ;与指令相适应的必要中转      CJNE  A,ALARMBUF,REDGEHIGH: CLR C      ;红灯信号      LJMP  NEXTREDRED : JNC  GEHIGH  &

77、#160;    ;读入数值比预设大      SETB  CNEXTRED:MOV  A,BUFFH       RLC  A   ;压入红灯信号       MOV  BUFFH,A       MOV  A,R1  ;调整R1指向WL 

78、0;     ADD  A,#10H       MOV  R1,A       MOV  ALARMBUF,R1       MOV  A,R0       CJNE  A,ALARMBUF,GREENLSLOW: CLR  C  

79、60;    ;绿灯信号       LJMP  NEXTGRNGREEN: JC LSLOW      ;读入数值比预设小       SETB CNEXTGRN:MOV A,BUFFL        RLC A        MOV BUFFL,

80、A        MOV A,R1        SUBB A,#10H        MOV R1,A        INC R1        INC R0     DJNZ R7,WLOOPMOV

81、0; A,BUFFH ;将红灯报警信息送出MOV  DPTR,#0FBFFH ;红灯信号对应地址p2.2MOVX  DPTR,AMOV  A,BUFFL ;将绿灯报警信息送出MOV  DPTR,#0F7FFH ;绿灯信号对应地址p2.3MOVX  DPTR,ARET;*键位调整程序*KEYFUNC: MOV  DPTR,#KEYTABLE         ANL   A,#0FH ;消除键位干扰  

82、0;      MOVC  A,A+DPTR ;调整跳转位置        CJNE  A,#0AH,K1        MOV   A,#0FFH        SETB  SETIN        

83、; SETB  SETH ;表示要设定温度报警上限值        CLR   SETL         RET;  K1:   CJNE  A,#04H,K2        MOV   A,#0FFH      

84、60; SETB  SETIN        SETB  SETL ;表示要设定温度报警下限值        CLR   SETH        RET  K2:   CJNE A,#0FH,K3        MOV 

85、 A,#0FFH        JB  SETWARN,ENDISP        SETB  SETWARN        CLR  ABYTEIN        CLR  SETH      &#

86、160; CLR  SETL        CLR  ENTER        RETENDISP: CLR  SETWARN;        CLR  SETH;        CLR  SETL;     

87、   RET;  K3:  CJNE A,#0EH,K4       MOV  A,#0FFH        JB  SOLIDISP,ENSOLID;        SETB  SOLIDISP        RETENSOLID: CL

88、R  SOLIDISP         RET  K4:   CJNE A,#0CH,K5        MOV  A,#0FFH;        CLR  SETIN;        CLR  SETH;  

89、      CLR  SETL;        RET;  K5:  CJNE A,#0DH,K6       MOV   A,#0FFH        SETB   ENTER       

90、;  RET;  K6:   RETKEYTABLE:  db 07h,04h,08h,05h,09h,06,0Ah             0,   1 ,2  ,3  ,4  ,5  ,6          db 04h,01h,00h,02h,0Fh,03h,0E

91、h,0Ch,0Dh            ;  7 ,8  ,9   ,10 ,11,12, 13, 14  ,15;*实现对各个设定键的响应*KEYRPD: JB  SETWARN,WARNSET ;根据SOLIDISP的值调显示        PUSH  PSW;       

92、; SETB  RS1;        CLR   RS0 ;选择2号工作寄存器区       MOV   R0,#MOTATA;       MOV  CHANNEL,A ;将读入的值放入通道缓冲       MOV  R2,A;    

93、   MOV  BACK,A;       MOV  BUF,A;       LCALL   PADJUST ;调整R0,使其指向R2通道的温度值        SETB  DISPIN ;5s计时的标志位        MOV  BUFF5S,#

94、05H ;初始化5s计时       MOV  R2,CHANNEL;       POP   PSW;       RET ;调整完毕,返回WARNSET:JNB SETIN,INSET ;若未设定通道,先进行设定        LJMP  SETTEMP ;若已设定则跳转到温度设定处I

95、NSET: MOV  CHANNEL,A        RETSETTEMP:JB  SETH,HIGHSET ;设定温度警告上限        JB  SETL,LOWSET ;设定温度警告下限        RETHIGHSET: LCALL  READTEMP     &#

96、160;   MOV  R0,#WH ;调整R0使其指向温度上限存储区         LJMP  STORESETLOWSET: LCALL  READTEMP        MOV  R0,#WL ; 调整R0使其指向温度下限存储区STORESET:MOV   A ,TEMPBUF;      

97、 LCALL  COMPACT ;将输入的数转化为16进制数存储(未改变R0)        MOV  R2,CHANNEL ;送入要调整到的位置       LCALL  PADJUST ;调用调整子程序        MOV  R0 ,A ; 将温度值送到相应的位置        RETREADTEMP: JB  ABYTEIN,READLOW;若已经有一位读入则读取低位READHIGH: SWAP  A;          MOV  TEMPBUF,A;   &#

温馨提示

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

评论

0/150

提交评论