当前位置:首页 > 单片机温度采集系统
位错,亦无停止位错的接收才算正确的。1个字符接收完毕后,接收设备又继续检测传输线,监视“0”信号的到来和下一个字符传输的开始,如此反复。
3.5.3流程图
串口通信过程采用中断方式,SBUF是串行口数据缓冲器,是一个可以直接寻址的专用寄存器。在物理上,一个作为发送缓冲器,一个作为接收缓冲器。两个缓冲器共用一个口地址99H,由读写信号区分,CPU写SBUF时为发送缓冲器,读SBUF时为接收缓冲器。单片机响应串口中断申请,根据控制字执行相应的读写操作。串口中断过程如图3-6所示:
串口中断 关中断
控制字转移 读SBUF
调读函数 调写函数 控制“读” 控制“写”
结 束 开中断 图3-6 串口中断流程图
3.6 系统源程序
=======================各存储器地址定义=================================
ADPORT EQU 0FEFBH;AD转换口地址
- 33 -
LEDBUF EQU 30H; 将送显示的八段码存储器 TEMP EQU 40H; 置缓冲区首地址 LOWLIMIT EQU 30; 最低设定温度 HIGHLIMIT EQU 70; 最高设定温度 LOWTEMP EQU 0; 温度下限 HIGHTEMP EQU 100;温度上限
SETTEMP EQU 50H;设定温度值存储器 CURTEMP EQU 51H;当前实际温度存储器 ADRAM EQU 60H;AD转换后数字量存储器 DIN BIT 0B0H;串行通信口 CLK BIT 0BIH;触发源
=======================程序开始部分====================================
ORG 0000H;程序首地址 LJMP START ;跳到主程序
LEDLAB: DB 3FH,06H,5BH,4FH,66H,6DH;要显示温度值对应的八段码表 DB 7DH,07H,7FH,6FH
===========================显示子程序================================== DISPLAYLED:
PUSH ACC;保护现场 PUSH DPH PUSH DPL
MOV R0,#LEDBUF;
MOV R1,#TEMP;送缓冲区首址
MOV R2,#2;显示位数计数
DL0:
MOV DPTR,#LEDLAB;指向字形段码表首址 MOV A, @R0;取要显示的数据 MOVC A,@A+DPTR;查表取字形段码 MOV @R1,A
MOV P1,A;由P1口送LED显示 DP1:
JNB TI,DL1;等待发送完一帧 CLR TI;清发送中断标志
DEC R0;指向下一个显示单元 DJNZ R2,DL0;2位未显示重复 POP DPL;恢复现场 POP DPH POP ACC
======================延时子程序======================================= DELAY: MOV R6,#100 DELAYLOOP:
MOV R5,#248
- 34 -
DJNZ R5,$
DJNZ R6,DELAYLOOP RET
===================温度计算与处理子程序================================= READTEMP:
ACALL READAD
MOV ADRAM,A;存由READAD子程序得来的A/D转换数字量 MOV B,#(HIGHTEMP-LOWTEMP);执行相关计算 MUL AB
MOV A,B;取高八位相当于除以256 ADD A,#LOWTEMP
MOV CURTEMP,A;保存求得的温度 RET DISPLAYRESULT:
CALL READTEMP
MOV A,ADRAM;A/D转换的数字量送A PDC:
MOV A,CURTEMP;取当前温度 LJMP GOON GOON:
MOV B,#10;转换为相应的十进制的八段码的偏移量 DIV AB
MOV LEDBUF+1,A MOV A,B
MOV LEDBUF+2,A RET
=====================读A/D口子程序==================================== READAD:
MOV DPTR,#ADPORT CLR A
MOVX @DPTR,A; 使P0为高阻抗,并使ADC0804开始转换,
WR=0
WAIT: JB P3.2,WAIT; 检测ADC0804的INTR=0?,是则转换完
成
MOVX A,@DPTR; 将转换好的数据载入累加器 CPL A ; 将累加器的值反相 MOV P1,A ; 输出至P1显示 CALL DELAY ; 延时50毫秒 RET
==========================主程序======================================
- 35 -
START:
MOV SETTEMP,#50;设定恒温值为50℃ MLOOP1: ACALL DISPLAYRESULT ACALL DISPLAYLED ACALL READTEMP
MOV A,CURTEMP;以下是加热程序 JB ACC.7,LEO CLR C
MOV B,SETTEMP DEC B DEC B SUBB A,B JNC GN2 LEO:
SETB P3.4 SJMP GN4 GN2:
MOV A,CURTEMP SETB C
MOV B,SETTEMP INC B INC B SUBB A,B JC GN4 CLR P3.4 SJMP GN4 GN4:
ACALL DELAY1 LJMP MLOOP END
结论
本设计中,是以温度采集和过程控制,配合远距离串口通讯为总目标,采用AT89C51单片机最小应用系统为总控制中心,辅助设计有温度采样电路、A/D转
- 36 -
共分享92篇相关文档