单片机温度采集系统(7)

2019-04-15 22:13

温度低于该设定的恒定温度2℃时,单片机发出控制命令信号,继电器动作吸合,外部加热电阻开始加热。当温度超过设定的恒温值2℃时,单片机发出命令信号,继电器断开,加热电阻停止加热;制冷过程采用自然冷却。

3.5 串口通信程序

串行通信的信息传输在一个方向上只占用1根线。在1根通信线上既传输数

据又传输联络控制信息是串行通信的特点。因此,串行通信有着一系列通信协议和规程。

3.5.1 串行通信协议

通信协议是对数据传输方式的规定,通信双方必须遵从统一的通信协议。 AT89C51串口与各智能模块的通讯按各自定义的通讯协议进行通讯,其过程如下: 1) 首先使所有从机的SM2位置,以使其处于只接收地址帧的状态。

2) 控制卡先发一地址信息,其中8位为地址,第9位为地址/数据信息的标志

位,该位置1表示该帧位地址信息。

3) 从机接收到地址帧后,各自将接收到的地址与从本机的地址比较。对于地址

相符的从机,使SM2=0,以接收主机随后发来的所有信息;对于地址不相符的从机,使SM2=1,继续执行采集和其他任务。

4) 当从机发送数据结束后,发送一帧校验和,并置第9位(TB8)为1,作为从

机数据传送的结束标志。

5) 控制卡接收数据时先判断数据结束标志(RB8),若RB8=1,且校验和正确,则

回送正确信号00H,此信号可令该从机复位,重新采集数据,等待地址帧。若校验和出错,则送0FFH,令该机重发数据,如果重发5次还不行,则认为失败,转其它地址。若接收帧RB8=0,则将原数据送到缓冲区,并准备接收下帧信息。

6) 从接收到的复位命令后回到监听地址状态(SM2=1)。

3.5.2 串行通信格式

异步串行通信遵守以下格式:如图3-5所示 ←——传输方向 - 31 -

1 0 1/0 1/0 1/0 1/0 数据位 1/0 1/0 1/0 1/0 1/0 1 起始位︱ 空号︱ ︱校验位︱停止位 图3-5 异步串行通信格式

逻辑0为串行异步通信的起始位,当接收设备监测到这个逻辑低电平时,就开始准备数据位接收信号。起始位的作用就是同步设备。

当接收设备接收到起始位后,接着就会接收到数据位。数据位的个数可以是5位、6位、7位或8位,由通信双方约定。数据发送时,低位在前,高位在后。

数据发送完以后,可以发送奇偶校验位。奇偶校验用于有限差错检测,通信双方约定一致的奇偶校验方式。如果选择偶效验逻辑1的数据位个数与逻辑1的奇偶位个数之和必须是偶数;如果选择奇校验,逻辑1的数据位个数与逻辑1的奇偶为个数之和必须是奇数。

在奇偶校验位或数据位(无奇偶校验位时)之后发送的是停止位。停止位是一个数据的结束标志,可以是1位、1.5位或2位的低电平。接收设备接收到停止位后,通信线便恢复到逻辑1的空闲状态。

字符帧格式是在数据位前面加1位用“0”作为标志的起始位,在数据位后

面加上1位奇/偶校验位和用“1”作为标志的停止位(1位或1.5位或2位)。 “0”和“1”这两种标志也分别称为传号和空号。发送器在发送1个字符之前,先发送起始位,而在字符发送完之后,再发送奇/偶校验位、停止位。当接收器检测到起始位时,便确定1个字符的传输到来,于是开始接收字符,并进行规定的奇/偶校验位和停止位检测,1个字符接收完成。

在字符帧格式的起始位和奇/偶校验位、停止位之间,是相应的字符信息,称为数据位。数据位通常由7位ASCII码组成,数据位传输是由低位向高位依次进行的。因此,传输1个字符,必须以完整的字符帧格式(10位或10.5位或11位)格式依序传输。

传输开始后,接收设备不断地检测传输线,在一系列的“1”(称为空闲位)之后检测到一个“0”信息位,就确认1个字符开始传输了,于是以位时间为间隔移位接收所规定的数据位和奇/偶校验位,最后是规定长度的停止位“1”。接收方把数据位拼装成1位字符,并进行奇/偶校验和停止位检测,只有既无校验

- 32 -

位错,亦无停止位错的接收才算正确的。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 -


单片机温度采集系统(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生物科技有限公司突发环境事件风险评估报告 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: