分别用“统计外部中断0中断次数”和“让定时/计数器T0工作于方式2计数”的方法,实现对10个脉冲的计数,计数完成后,控制P1.0引脚上的电平取反,写出两种方法的完整程序
单片机计数器编程问题
单片机
分别用“统计外部中断0中断次数”和“让定时/计数器T0工作于方式2计数”的方法,实现对10个脉冲的计数,计数完成后,控制P1.0引脚上的电平取反,写出两种方法的完整程序
ORG 0x0000
MOV TMOD, #0x00 ; T0工作于模式0
MOV TH0, #0x00 ; 定时器初值
MOV TL0, #0x00
MOV TCON, #0x04 ; 启动T0
MOV IE, #0x81 ; 启用外部中断0,启用总中断
MOV IT0, #1 ; 外部中断0上升沿触发
MOV P1, #0xFF ; 初始化P1
MOV CNT, #0 ; 计数器初始化
LOOP:
JNB P1.0, LOOP ; 等待外部中断0触发
INC CNT
CPL P1.0 ; 取反P1.0引脚
CJNE CNT, #10, LOOP ; 继续循环
SJMP $ ; 无限循环
EX0_ISR:
CLR EX0 ; 清除外部中断0标志
RETI
ORG 0x003B
LJMP EX0_ISR
END
方法二:让定时/计数器T0工作于方式2计数
ORG 0x0000
MOV TMOD, #0x06 ; T0工作于方式2计数
MOV TH0, #0x00 ; 定时器初值
MOV TL0, #0x00
MOV TCON, #0x04 ; 启动T0
MOV P1, #0xFF ; 初始化P1
MOV CNT, #0 ; 计数器初始化
LOOP:
JNB TF0, LOOP ; 等待T0溢出中断触发
CLR TF0 ; 清除T0溢出标志
INC CNT
CPL P1.0 ; 取反P1.0引脚
CJNE CNT, #10, LOOP ; 继续循环
SJMP $ ; 无限循环