1、 系统结构原理图图2-2 系统原理图第3节 系统的硬件设计 一个温度采集系统,包括被采集信息的采集、转换、显示等环节,在本多路温度采集系统中,包括A/D转换电路的设计,CPU的选型以及包括显示电路,存储器、报警电路、电源电路等设计。31 CPU的选用目前,生产单片机的厂商有很多,尤其是近年来微电子技术、计算机技术的飞速发展,比较著名的有Intel、Philips、Microchip、Motorola、Zilog、Atmel等半导体企业。在上述著名的半导体企业产品中,尤其在工业测控场合,运用较多的为Intel公司的MCS-51系列,Microchip公司的PIC系列,如果作单路温度测量,恐怕要选
2、择该系列的CPU,但由于本系统涉及的是多路,各路报警的输出信号需要单独输出,而且考虑信号调理电路的切换等还需要不少的控制线,因此该系列的少引脚特点就不适合本设计的需要,因此,本设计还是选用了ATMEL最新的8位单片机AT89S52作为本系统的CPU。下面简单地介绍一下89S52。功能特性描述:AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度易失性存储器技术制造,与工业 80S52 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和
3、在系统可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 图3-1
4、 89C52的引脚32 ADC0809ADC0809是把采集的模拟量转换成数字量并传送到89C52中。它是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件并且还是逐次逼近式A/D转换器,可以和单片机直接接口。3.2.1 ADC0809的内部逻辑结构 图3-2由图3-2可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。3.2.2 引脚结构图
5、3-4 ADC0809的引脚第4节 软件编辑思路及流程41 软件编辑思路 软件编辑思路:数字显示-算法-一路采集-一路采集转换及显示-八路采集转换及显示-键盘小子程序-八路循环采集且键盘控制-八路循环采集且键盘控制和报警。4.2 具体软件编程 ORG 0000H AJMP MAIN; BUF EQU 40H ;显示缓冲区 MOTATA EQU 50H ;AD0809数据存放于此 WH 48H ;温度上限数据存放区 WL 58H ;温度下限数据存放区 BUFF1S EQU 38H; BUFF1MS 39H; BUFF5S 3AH; INNAL 3CH; ALARMBUF EQU 33H BUFF
6、H EQU 31H ;八路LED报警信号 红灯 BUFFL 32H ;八路LED报警信号 绿灯 BACK 34H ;利用与BUF地址的重复修改路数 CHANNEL 35H TEMPBUF 36H READ_AD BIT 30H ;是否要读写AD0809的标志位 DISPIN 31H; SETWARN BIT 32H SOLIDISP 33H ENTER P1.2 SETH SETL SETIN P1.3 ABYTEIN p1.1 ORG 0003H AJMP INT_0; ORG 000BH LJMP INT_T0 ORG 0100HMAIN: MOV SP, #70H ;设置堆栈位置 SET
7、B初始化标志位 EA ;开总中断 CLR SETWARN清除温度设置标志位当其为0时表示要进行通道数采集 LCALL INITWARN初始化温度上下限 INIT_2初始化2#工作寄存器区主循环,启动ADC0809,从第一个通道开始读取LOOP:JNB READ_AD,DIS若不读AD0809,则调显示,次标志位也表示1s延时结束延时已完毕,则计算要显示的温度路数及温度值送缓冲区 WARN报警清楚标志位 READ读取一次AD0809 DLY1MS此处加1ms的延时,否则数码管会因中断的存在而产生闪动 ADJUST调整显示在此完成键盘检测及显示任务DIS: DISPLAY; KEYCHK调键盘检测
8、子程序 CJNE A,#0FFH, AKEY若有键按下,则跳转 LJMP LOOP若没有则循环AKEY: KEYFUNC; A,#0FFH,CALLRPD验证按下的键是否为数字键,若是则处理输入不为数字键则返回循环CALLRPD: KEYRPD; SJMP LOOP;*初始化2#工作寄存器区*INIT_2: PUSH PSW初始化2号工作寄存器区 RS1; RS0选择2号工作寄存器区 R2, #00H存放要显示的路数初始化路显示标志位; R0, #MOTATAR0充当指向MOTATA的指针 POP PSW; RET;*调整指针*PADJUST:ONADJUST: DJNZ R2,INADJUS
9、T;返回INADJUST: INC R0; ONADJUST;*计算并调整显示缓存区的数据*ADJUST: PSW ;保护 R2,#08H,NE08; GE08: R2,#00H; R0,#MOTATA; SJMP LESS08; NE08: JNC GE08;LESS08: JB SETWARN, DISPWARN若在设定温度,则也不调整显示JB SOLIDISP, ADJEND若为固定显示,则跳过调整 DISPIN,DLY_5S若有键盘值输入,则延时5秒来暂时固定显示 R0调整R0,使其指向下一个要显示的温度值地址 R2调整R2 mov channel,r2; ADJEND;DLY_5S:
10、 BUFF5S,ADJEND; DISPIN; ADJENDDISPWARN: SETH,DISHIGH若在调整上限值则跳转到上限温度显示 SETL,DISLOW若在调整下限值则跳转到下限温度显示若不在调整则显示输入路数的当前检测温度值DISLOW: R0,#WL将指针调整到温度上限存放区SJMP ADAPT跳转到指针调整处DISHIGH:MOV R0,#WH将指针调整到温度下限存放区ADAPT: R2,CHANNEL调整R2的值为通道数LCALL PADJUST指针指向R2ADJEND: LOADTEMP将当前指针指向数据放到缓冲区POP* 将当前指针指向数据放到缓冲区*LOADTEMP:
11、COMPUTE调用COMPUTE得到要显示的当前温度值 R1,#BUF; A,channel; R1,A将路数送入显示缓冲区 R1调整到要显示温度值的缓冲区 SETH,DISPH若设定温度上限,则显示H SETL,DISPL若设定温度下限,则显示L Mov a,#10h消隐 DISP2DISPH: A,#11HDISPL: A,#12HDISP2: r1,a; R1; A,R5; ANL A,#0FH; 最低位 A,#0F0H; SWAP A;次低位 ,应当在此处添加小数点 A,R4;MOV R1,A次高位 SWAP A;最高位RET;*读取一次0809的内容*READ: R6,#08H用中断
12、的方式读取一次AD0809 R0,#MOTATA0号工作寄存器区 DPTR,#0FFFEHA0作为地址 A,#00H表示先检测第一个通道 INNAL,A将检测的路数保存 MOVX DPTR,A开启ADC0809SETB EX0开外部中断0 RET若已读取完毕,则返回*显示子程序*要显示的数据入口为BUF(6位);1号工作寄存器区DISPLAY:压栈保护 RS0; RS1切换工作寄存器区到 1 R0,#BUF R7,#06H R1,#01HNEXTDIS: A,R0 DPTR,#TABLEMOVC A,A+DPTR ;取段码 R7,#03H,NODIP ;显示小数点ANL A,#07FHNODI
13、P: DPTR,#0FFDCHMOVX送段码 DPTR,#0FFDDH A,R1送位码RL A R1,A DLY1MSINC R7,NEXTDIS; RET*延时1ms*DLY1MS: BUFF1MS,#0F9HDJNZ BUFF1MS,$RET*按键检查子程序*KEYCHK:查看是否有键按下 DPTR,A DPTR,#0FFDEH A,DPTRCPL A,#0FHJNZ TEST若有键按下则检测,无则返回。 A,#0FFHTEST:KEYTEST BACK,ADISPLAYCJNE A,BACK,NOKEYDWAIT:等待键抬起 WAIT若键未抬起,则继续等待 A,BACK ;将检测到的键值送给A CHKENDNOKEYD: MOV A,#0FFHCHKEND:*按键检测子程序*KEYTEST: R0,#0FEH R1,#00H R2,#08HNEXTL: A,R0 CPL KEYDWN看按下的键是否在当前列 R2,GOSCAN看是否扫描完毕,若没有则调整继续扫描 TSTEND若扫描完毕,则返回。GOSCAN: R0,A R1 NEXTLKEYDWN: R3,#00HLL0: RRCJC LL1 R3 LL0LL1: A,R3 B,A A,#8 MUL ABADD A,R1A中返回的为按下的键的代码R
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1