单片机 计数器实验 代码 8051 内部定时计数器 T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。 将其数值按二进制数在 P1 口驱动 LED 灯上显示出来。
时间: 2024-09-23 21:09:58 浏览: 87
单片机如8051内部的定时计数器T0常用于实现简单的定时和计数功能。在这个实验中,我们将使用T0的定时模式和方式1(也称为模式1中断),它的特点是自动重装计数初值并能产生溢出中断。
以下是基于8051指令集的简单示例代码:
```assembly
; 定义寄存器
ORG 0000H ; 首地址设定为0000H
; 开启外部中断INT0 (T0溢出中断)
MOV IE, #0B0H ; IE = 00001010B,设置中断允许位,ENI=0,ET0=1
; 设置T0为方式1计数
MOV TMOD, #01H ; TMOD = 0001B,设为定时/计数器1,方式1
; 初始化计数器初值 (1111 = 255)
MOV TH0, #0FFH
MOV TL0, #0FFH
; 主程序循环
LOOP:
SETB TR0 ; 启动定时器T0
JNB TF0, CLR display ; 如果TF0(T0溢出标志)未置1,则不清零LED显示
CLR TF0 ; 清除溢出标志,继续计数
JMP LOOP
; 溢出中断服务子程序
CLR TF0 ; 清除溢出标志
SETB P3.4 ; 当计数溢出时,点亮P3.4引脚(LED)
JMP $+2 ; 回到主程序的下一行,跳过中断返回
; 显示二进制数子程序
CLR display:
MOV A, TL0 ; 将低8位计数移至A
ADD A, #30H ; 将A转换为ASCII码(0-9对应48-57,1-2对应60-61)
MOV P1, A ; 将ASCII码显示在P1口
RET ; 返回主程序
END
```
这个代码首先设置了中断配置,然后启动了定时器T0,当计数达到最大值(255)时会触发溢出中断。在中断处理函数中,它将当前计数值转成对应的LED亮起状态,并回到主循环开始新的一轮计数。
阅读全文