51单片机温度报警器汇编程序
时间: 2023-10-19 13:07:49 浏览: 67
下面是一个简单的51单片机温度报警器汇编程序,使用DS18B20温度传感器,当温度超过设定值时,会触发蜂鸣器报警。
```
;*******************************************************************************
; 51单片机温度报警器汇编程序
; 使用DS18B20温度传感器,当温度超过设定值时,会触发蜂鸣器报警。
;*******************************************************************************
; 定义端口地址
sbit DQ=P3^7 ;DS18B20数据线
sbit beep=P1^5 ;蜂鸣器
; 定义变量
temp db 0 ;存放温度值
flag db 0 ;用于判断是否超过设定值
; 定义常量
set_temp equ 30 ;设定温度值
;*************************************
; 主程序
;*************************************
main:
mov beep, #1 ;初始化蜂鸣器
mov temp, #0 ;初始化温度值
mov flag, #0 ;初始化标志位
;*************************************
; 初始化DS18B20
;*************************************
init_ds18b20:
clr DQ ;将DQ拉低
mov r6, #100 ;延时1us
loop1:
djnz r6, loop1
setb DQ ;将DQ拉高
mov r6, #8 ;延时60us
loop2:
djnz r6, loop2
clr DQ ;将DQ拉低
mov r6, #100 ;延时1us
loop3:
djnz r6, loop3
setb DQ ;将DQ拉高
mov r6, #8 ;延时60us
loop4:
djnz r6, loop4
;*************************************
; 读取温度值
;*************************************
read_temp:
clr DQ ;将DQ拉低
mov r6, #100 ;延时1us
loop5:
djnz r6, loop5
setb DQ ;将DQ拉高
mov r6, #8 ;延时60us
loop6:
djnz r6, loop6
clr DQ ;将DQ拉低
mov r6, #100 ;延时1us
loop7:
djnz r6, loop7
setb DQ ;将DQ拉高
mov r6, #8 ;延时60us
loop8:
djnz r6, loop8
clr C ;读取温度值
mov A, #0 ;初始化A寄存器
mov r7, #8 ;读取8位温度值
loop9:
clr C ;清除进位标志位
rlc A ;左移一位
mov DQ, #0 ;将DQ拉低
mov r6, #2 ;延时15us
loop10:
djnz r6, loop10
mov C, DQ ;将DQ的状态存入进位标志
mov DQ, #1 ;将DQ拉高
mov r6, #2 ;延时15us
loop11:
djnz r6, loop11
mov C, DQ ;将DQ的状态存入进位标志
mov DQ, #0 ;将DQ拉低
djnz r7, loop9 ;继续读取下一位
mov temp, A ;将温度值存入temp变量
;*************************************
; 判断温度是否超过设定值
;*************************************
judge_temp:
mov A, temp ;将温度值存入A寄存器
subb A, set_temp ;比较温度值和设定值
mov flag, CY ;将比较结果存入标志位
;*************************************
; 报警
;*************************************
alarm:
mov A, flag ;读取标志位
jz no_alarm ;温度未超过设定值,不报警
mov beep, #0 ;温度超过设定值,触发蜂鸣器报警
sjmp alarm ;循环报警
no_alarm:
mov beep, #1 ;恢复蜂鸣器
sjmp main ;循环检测温度
;*************************************
; 程序结束
;*************************************
end
```
注意:此程序仅供参考,具体实现可能需要根据不同的硬件环境进行调整。