基于AT89S51的温度测量系统的设计论文_第1页
基于AT89S51的温度测量系统的设计论文_第2页
基于AT89S51的温度测量系统的设计论文_第3页
基于AT89S51的温度测量系统的设计论文_第4页
基于AT89S51的温度测量系统的设计论文_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、基于at89s51的温度测量系统的设计一、设计题目:基于at89s51的温度测量系统的设计二、元件及器材:单片机at89c51、温度传感器ds18b20、显示译码器74ls47、晶振11.0592mhz、max232cpe、3位led七段显示器ln5361bs三、系统设计过程:1、电路功能:本单片机开发电路系统可实现温度测量的显示及与pc机的串行通信。2、电路原理图:3、电路分析:电路中采用的温度传感器ds18b20是美国dalls公司生产的单总线数字温度传感器,可把温度信号直接转换成串行数字信号供微机处理。从ds18b20读出或写入的信息仅需要一根口线(单总线接口),读写及温度变换功率来源于

2、数据总线,总线本身也可以向所挂接的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_b

3、yte;跳过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

4、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

5、,没有就复位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 datretwr

6、ite_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;

7、将读出的温度高字节送入累加器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)采用中断的形式循环扫描,利用p

8、0.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;延时子

9、程序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; 点亮最

10、后一位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,#00

11、h; 清显示缓冲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 rstsnr

12、jnb 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 ;发出读

13、温度命令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 con

14、vertmov 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_1待添加的隐藏

15、文字内容3sen2: 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,#60

16、djnz 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;

温馨提示

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

评论

0/150

提交评论