资源描述
基于AT89S51的温度测量系统的设计一、设计题目:基于AT89S51的温度测量系统的设计二、元件及器材:单片机AT89C51、温度传感器DS18B20、显示译码器74LS47、晶振11.0592MHz、MAX232CPE、3位LED七段显示器LN5361BS三、系统设计过程:1、电路功能:本单片机开发电路系统可实现温度测量的显示及与PC机的串行通信。2、电路原理图:3、电路分析:电路中采用的温度传感器DS18B20是美国DALLS公司生产的单总线数字温度传感器,可把温度信号直接转换成串行数字信号供微机处理。从DS18B20读出或写入的信息仅需要一根口线(单总线接口),读写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。GND:地;VCC:电源电压DQ:数据输入/输出脚(单线接口,可作寄生供电)DS18B20123GNDDQVCCDS18B20的外引脚图如下:在电路中DS18B20的VCC接+5V电源,给温度传感器提供电源;数据输入/输出脚DQ与单片机AT89C51的P2.0相连,实现将所测的温度读入CPU,经系统处理后转化为ASCII码通过P0.0P0.3传送给LED显示电路显示。温度读入程序如下:DSWD:CLR EALCALL RSTSNRJNB F0,KEND;如果没有应答,返回主程序MOV R0,#0CCHLCALL SEND_BYTE;跳过ROM匹配MOV R0,#44H;发出温度转换命令LCALL SEND_BYTESETB EAMOV P1,#00001111BMOV 48H,#1;延时75ms以上准备读SS2:MOV 49H,#255SS1:MOV 4AH,#255SS0:DJNZ 4AH,SS0DJNZ 49H,SS1DJNZ 48H,SS2MOV P1,#11111100BCLR EALCALL RSTSNRJNB F0,KENDMOV R0,#0CCH;跳过ROM匹配LCALL SEND_BYTEMOV R0,#0BEH ;发出读温度命令LCALL SEND_BYTELCALL READ_BYTEMOV WDLSB,ALCALL READ_BYTEMOV WDMSB,ALCALL TRANS12KEND:SETB EARETSEND_BYTE: MOV A,R0;发送一个字节程序 MOV R5,#8SEN3:CLR C RRC A JC SEN1 LCALL WRITE_0 SJMP SEN2SEN1:ACALL WRITE_1SEN2:DJNZ R5,SEN3;循环8次,写一个字节 RETREAD_BYTE:MOV R5,#8;读一个字节程序READ1: LCALL READ RRC A DJNZ R5,READ1;循环8次,读一个字节 MOV R0,A RET ;复位程序,如果复位置位F0,没有就复位F0RSTSNR:SETB DAT NOP NOP CLR DATMOV R6,#250;主机发复位脉冲持续2*300=600SDJNZ R6,$MOV R6,#50DJNZ R6,$SETB DAT;主机释放总线,口线改为输入MOV R6,#15DJNZ R6,$LCALL CHCK;调用应答检查程序MOV R6,#60DJNZ R6,$RETCHCK:MOV C,DATJC RST0SETB F0;检测到信号,置位F0SJMP CHCK0RST0:CLR F0;未准备好F0复位CHCK0:RET WRITE_0: CLR DAT;写0DJNZ R6,$SETB DATRETWRITE_1:CLR DAT;写1NOPNOP NOP NOP NOP SETB DAT DJNZ R6,$ RET ;读一位数据程序READ:SETB DAT ;先复位至少1US产生读起始信号 NOP NOP CLR DAT NOP NOPSETB DAT ;置位DAT准备接收数据NOPNOPNOPNOPNOPNOPNOPMOV C,DATMOV R6,#23DJNZ R6,$RET温度转换程序(只取整数)30H=LSB,31H=MSB;TRANS12:MOV A,30H;将读出的温度低字节送入累加器A ANL A,#0F0H;将低四位清0,保留高四位 MOV 3AH,A MOV A,31H;将读出的温度高字节送入累加器A ANL A,#0FH;将高四位清0,保留低四位 SWAP A MOV B,#10 DIV AB MOV 43H,B DIV AB MOV 42H,B MOV 41H,A ORL A,#30H;将BCD码转换为ASCII码 MOV 50H,A MOV A,42H ORL A,#30H MOV A,43H ORL A,#30H MOV 52H,A MOV 53H,#20H ACALL SEND2PC RET温度的数码显示:系统处理所得的ASCII码经P0.0P0.3送入74LS47译码锁存,单片机每隔10ms(定时/计数器0利用方式1)采用中断的形式循环扫描,利用P0.4P0.6依次点亮3个LED数码管,将译码器锁存数据显示。具体程序如下:ORG 0040HTMR0:MOV P0,40H ; 最高一位值送P0 ORL P0,# 01000000B; 点亮最高一位LED数码管 ACALL TIMSMOV P0,41H ORL P0,#00100000B;点亮次高一位LED数码管 ACALL TIMS ORL P0,#00010000B;点亮最低一位LED数码管 ACALL TIMS MOV TH0,#LOW(65535-10000) ;定时器10ms定时 MOV TL0,#HIGH(65535-10000) RETITIMS:MOV R5,#00H;延时子程序TT: MOV R6,#9DJNZ R6,$DJNZ R5,TT RET与PC机的串行通信利用P3.0、P3.1的第二功能RXD、TXD实现。4、程序设计:DAT BIT P2.0 ;数据通信口WDLSB DATA 30H ;读出的温度低字节WDMSB DATA 31H ;读出的温度高字节;*ORG 0000HLJMP MAINORG 000BHSJMP TMR0 ;定时显示;*;定时显示子程序,采用循环扫描方式;显示缓冲区40H47H;串口发送缓冲 5052H,ASCII格式ORG 0040HTMR0:MOV P0,40H ; 最后一位值送p0ORL P0,#10000000B; 点亮最后一位CALL T1MSMOV P0,41HORL P0,#01000000BCALL T1MSORL P0,#00100000BCALL T1MSMOV P0,43HORL P0,#00010000BMOV TH0,#LOW(65535-10000) ;定时器10MS中断MOV TL0,#HIGH(65535-10000)RETIT1MS: MOV R5,#00h ;延时子程序tt: MOV R6,#9DJNZ R6,$DJNZ R5,ttRET;*;主程序:MAIN: MOV SP,#60HMOV P2,#0FFHMOV R2,#8MOV R0,#40H ;OVER: MOV R0,#00H; 清显示缓冲INC R0DJNZ R2,OVERMOV TMOD,#21H;T0=16B Counter,T1=8B autoloadMOV TH1,#0FDH;串口波特率960011.0592MMOV TL1,#0FDHMOV SCON,#50H;串口方式1: 8,N,1MOV PCON,#00HMOV TH0,#LOW(65535-10000)MOV TL0,#HIGH(65535-10000)SETB TR1SETB TR0LOOP: LCALL DSWD ;调用读出DS18B20温度程序SJMP LOOP ; 读出DS18B20温度程序DSWD:CLR EALCALL RSTSNRJNB F0,KEND ;如果没有应答,返回主程序MOV R0,#0CCHLCALL SEND_BYTE ;跳过ROM匹配MOV R0,#44H ;发出温度转换命令LCALL SEND_BYTESETB EAMOV P1,#00001111BMOV 48H,#1 ;延时75ms以上准备读SS2: MOV 49H,#255SS1: MOV 4AH,#255SS0: DJNZ 4AH,SS0DJNZ 49H,SS1DJNZ 48H,SS2MOV P1,#11111100BJNB F0,KENDMOV R0,#0CCH ;跳过ROM匹配LCALL SEND_BYTEMOV R0,#0BEH ;发出读温度命令LCALL SEND_BYTELCALL READ_BYTEMOV WDLSB,ALCALL READ_BYTEMOV WDMSB,ALCALL TRANS12KEND: SETB EARET;* ;温度转换程序(只取整数) ,30H=LSB,31H=MSB;TRANS12:MOV A,30H;HEX to BCD ConvertANL A,#0F0HMOV 3AH,AMOV A,31HANL A,#0FHORL A,3AHSWAP AMOV B,#10DIV ABMOV 43H,B DIV ABMOV 42H,BMOV 41H,AORL A,#30H;BCD to ASCII ConvertMOV 50H,AORL A,#30HMOV 51H,AMOV A,43HORL A,#30HMOV 52H,AMOV 53H,#20HACALL SEND2PCRET;*;发送给PCSEND2PC:MOV R1,#50HMOV R2,#04HSNDPC:MOV SBUF,R1INC R1SWT:JBC TI,CHKSJMP SWTCHK:DJNZ R2,SNDPCRET;*SEND_BYTE: ;发送一个字节程序MOV A,R0MOV R5,#8SEN3: CLR CRRC AJC SEN1LCALL WRITE_0SJMP SEN2SEN1: LCALL WRITE_1SEN2: DJNZ R5,SEN3 ; 循环8次,写一个字节RETREAD_BYTE: ;读一个字节程序MOV R5,#8READ1: LCALL READRRC ADJNZ R5,READ1 ; 循环8次,读一个字节RET;复位程序,如果复位置位F0,没有就复位F0RSTSNR: SETB DATNOPNOPCLR DATMOV R6,#250 ;主机发复位脉冲持续3s200=600sDJNZ R6,$MOV R6,#50DJNZ R6,$SETB DAT ;主机释放总线,口线改为输入MOV R6,#15DJNZ R6,$CALL CHCK ;调用应答检查程序MOV R6,#60DJNZ R6,$SETB DATRETCHCK: MOV C,DATJC RST0SETB F0 ;检测到信号,置位F0SJMP CHCK0RST0: CLR F0 ;未准备好F0复位CHCK0: RETWRITE_0: ;写0MOV R6,#30DJNZ R6,$SETB DATRETWRITE_1: ;写1CLR DAT NOPNOPNOPNOPNOPSETB DATMOV R6,#30DJNZ R6,$RET;读一位数据程序READ: SETB DAT ;先复位至少1US产生读起始信号NOPNOPCLR DATNOPNOPSETB DAT ;置位DAT准备接收数据NOPNOPNOPNOPNOPNOPNOPMOV C,DATMOV R6,#23DJNZ R6,$RETEND;*5、系统仿真:将程序下载至芯片,并运行仿真6、PCB板图:7、调试:通过PC的串口传送至AT89S51的P1口,将程序写入AT89S51单片机中。接通电源,进行调试。本系统测试的温度范围为-50C125C。四、结束语 本次设计系采用EDA设计技术进行电路的设计及实现,从元件的选取、连线,到电路的调试、分析和软件的编译,都是在计算机中完成的,所有的工作均在虚拟环境下完成。采用EDA技术,在原理图设计阶段即可对设计进行评估,验证所设计的电路是否达到设计要求的技术指标,还可通过改变元器件的参数使电路性能优化。
展开阅读全文