用汇编语言对8051单片机设计一个 3 位十进制计数器,可对外部脉冲进行计数,并将计数值输出到P2上,该脉冲由T0用中断方式产生的周期为200ms脉冲模拟,用T1对脉冲计数,并在P3.2用开关控制计数的暂停和继续
时间: 2024-02-25 12:58:34 浏览: 163
以下是8051单片机汇编语言的程序设计,实现一个3位十进制计数器,可对外部脉冲进行计数,并将计数值输出到P2上,该脉冲由T0用中断方式产生的周期为200ms脉冲模拟,用T1对脉冲计数,并在P3.2用开关控制计数的暂停和继续。
```
ORG 0H ;程序从地址0开始
MOV P2, #00H ;初始化P2输出为0
MOV P3, #04H ;P3.2设置为输入,其余位设置为输出
MOV TMOD, #11H ;设置定时器0和1为模式1
MOV TH0, #0EAH ;设置定时器0的初值,使其每200ms产生一次中断
MOV TL0, #0BEH
SETB TR0 ;启动定时器0
SETB TR1 ;启动定时器1
MAIN:
JB P3.2, $ ;等待P3.2为1
JNB TF0, $ ;等待T0中断发生
CLR TF0 ;清除T0中断标志位
INC CNT ;计数器加1
CJNE CNT, #1000H, SKIP ;如果计数器不等于1000,则跳转到SKIP
CLR CNT ;计数器清零
SKIP:
MOV A, CNT ;将计数器的值装入A寄存器
DIV AB, #010H ;将A寄存器的值除以10,商存入B寄存器,余数存入A寄存器
ADD A, #30H ;将余数加上0x30,以ASCII码形式存入A寄存器
MOV P2, A ;将A寄存器的值输出到P2
JMP MAIN ;跳转到主循环
```
在上述程序中,计数器CNT从0开始,每当T0中断发生时,CNT加1,当CNT等于1000时,CNT清零,然后将计数器的值按照3位十进制数的形式输出到P2上。同时,程序通过P3.2的状态来控制计数的暂停和继续,当P3.2为1时,程序等待P3.2为0时再执行计数操作。
阅读全文