89C51单片机定时/计数器、P1口编程举例
扫描二维码
随时随地手机看文章
在89C51单片机的P1.0端口上接有一个发光二极管,P1.0输出低电平时发光二极管点亮,输出高电平时熄灭。P1.7接有一个开关,开关闭合时,P1.7为低电平,断开时为高电平。请设计一个控制程序,当开关闭合时,发光二极管每秒钟闪烁一次,当开关断开时,发光二极管每秒钟闪烁两次。已知系统使用12MHz的晶体。
LED BIT P1.0 ;发光二极管控制信号输出端口
KEY BIT P1.7 ;开关状态检测端口
CLOK EQU 20H ;时钟单元(单位:1/16秒)
SEC BIT CLOK.3 ;秒闪烁控制位
DSEC BIT CLOK.2 ;半秒闪烁控制位
ORG 0000H
LJMP MAIN ;至主程序
ORG 000BH
LJMP TTT ;至定时中断子程序
ORG 0030H
MAIN: MOV P1,#0FFH ;初始化端口
ANL TMOD,#0F0H
ORL TMOD,#01H ;设置定时器0为十六位定时器
MOV CLOK,#0 ;时钟单元初始化
MOV TH0,#0BH ;计数初值(定时1/16秒=62500us)
MOV TL0,#0DCH
SETB ET0 ;允许定时器0中断
SETB EA ;开中断
SETB TR0 ;启动定时器0
LOOP: ORL PCON,#1 ;主程序进入睡眠状态
LJMP LOOP
TTT: ORL TL0,#0DCH ;定时子程序,重装时常数
MOV TH0,#0BH
INC CLOK ;调整时钟
JB KEY,TTT1 ;检测开关状态
MOV C,SEC ;开关闭合,取秒闪烁信号
SJMP TTT2
TTT1: MOV C,DSEC ;开关断开,取半秒闪烁信号
TTT2: MOV LED,C ;控制发光二极管
RETI ;中断返回