基于51单片机的路灯控制器设计汇编语言实现多种功能的程序
时间: 2023-12-13 14:03:51 浏览: 195
好的,以下是一个基于51单片机的路灯控制器设计的汇编语言程序示例,实现了手动控制、定时控制和光控控制三种功能:
```
;--------------------------------------------
; 程序名称: 51单片机路灯控制器程序
; 功能描述: 实现手动控制、定时控制、光控控制
; 编写日期: xxxx年xx月xx日
;--------------------------------------------
; 定义常量
key EQU P3.3 ; 按键输入端口
led EQU P1.0 ; LED输出端口
relay EQU P1.1 ; 继电器输出端口
s1 EQU 20 ; 定时时间1,单位为秒
s2 EQU 40 ; 定时时间2,单位为秒
s3 EQU 60 ; 定时时间3,单位为秒
light EQU P0.0 ; 光敏电阻输入端口
; 定义变量
flag DB 0 ; 控制标志位,0为手动控制,1为定时控制,2为光控控制
timer DW 0 ; 定时器计数器,单位为秒
lightval DW 0 ; 光敏电阻读取值
; 程序入口
MAIN:
CLR A ; 清零累加器
MOV P1, #00H ; 初始化LED和继电器输出端口为低电平
MOV TMOD, #01H ; 定时器0工作模式为16位计数器
MOV TH0, #0D8H ; 定时器0初始值为0D8H
MOV TL0, #0F0H ; 定时器0初始值为0F0H
SETB TR0 ; 定时器0开始计时
MOV IE, #82H ; 开启定时器0中断和外部中断0
SETB EA ; 开启总中断
; 手动控制
MANUAL:
JB key, SETON ; 按键按下,跳转到SETON
SJMP MANUAL ; 循环检测按键
; 开灯
SETON:
SETB flag ; 设置为手动控制
SETB led ; LED亮
SETB relay ; 继电器通电
SJMP MANUAL ; 循环检测按键
; 关灯
SETOFF:
CLR flag ; 清除控制标志位
CLR led ; LED灭
CLR relay ; 继电器断电
SJMP MANUAL ; 循环检测按键
; 定时控制
TIMER:
CLR flag ; 清除控制标志位
MOV timer, #s1 ; 定时1开始计时
SETB relay ; 继电器通电
; 光控控制
LIGHT:
CLR flag ; 清除控制标志位
SETB light ; 光敏电阻通电
SJMP MANUAL ; 循环检测按键
; 定时器0中断服务程序
TIMER0_ISR:
INC timer ; 定时器计数器加1
JB flag.0, MANUAL_ISR ; 跳转到手动控制中断服务程序
CJNE timer, #s1, TIMER0_ISR_END ; 判断是否达到定时时间1
CLR timer ; 定时器计数器清零
MOV timer, #s2 ; 定时2开始计时
SJMP TIMER0_ISR_END
TIMER0_ISR_END:
CJNE timer, #s2, TIMER0_ISR_EXIT ; 判断是否达到定时时间2
CLR timer ; 定时器计数器清零
MOV timer, #s3 ; 定时3开始计时
SJMP TIMER0_ISR_EXIT
TIMER0_ISR_EXIT:
CJNE timer, #s3, TIMER0_ISR_END ; 判断是否达到定时时间3
CLR flag ; 清除控制标志位
CLR timer ; 定时器计数器清零
CLR relay ; 继电器断电
RETI ; 返回中断
; 外部中断0服务程序
INT0_ISR:
JB flag.1, INT0_ISR_EXIT ; 判断是否已经执行过该中断
CLR flag.1 ; 设置为已经执行过该中断
JB flag.0, INT0_MANUAL ; 跳转到手动控制中断服务程序
JB flag.2, INT0_LIGHT ; 跳转到光控控制中断服务程序
SJMP INT0_EXIT
INT0_MANUAL:
JB led, SETOFF ; 关灯
SJMP INT0_EXIT
INT0_LIGHT:
MOV lightval, light ; 读取光敏电阻的值
JB lightval.7, INT0_LIGHT_ON ; 光线强,开灯
JB lightval.6, INT0_LIGHT_AUTO ; 光线适中,自动控制
SJMP INT0_LIGHT_OFF ; 光线弱,关灯
INT0_LIGHT_ON:
SETB led ; LED亮
SETB relay ; 继电器通电
SJMP INT0_EXIT
INT0_LIGHT_OFF:
CLR led ; LED灭
CLR relay ; 继电器断电
SJMP INT0_EXIT
INT0_LIGHT_AUTO:
SETB flag.2 ; 设置为光控控制
SETB light ; 光敏电阻通电
INT0_EXIT:
RETI ; 返回中断
```
注意:这只是一个示例程序,仅供参考。如果您需要实际应用,请根据实际需求进行修改和优化。
阅读全文