12 实验三 中断系统及定时/计数器实验 实验目的 1.了解 MCS-51 单片机的中断原理,掌握中断程序的设计方法; 2.掌握 MCS-51 单片机定/计数器的工作原理与工作方式; 3. 掌握定时/计数器 T0 和 T1 在定时器和计数器两种方式下的编程。 实验内容 1.单片机集成的定时器可以产生定时中断,使用定时器 0 与定时器 1 进行定时, 编写汇编语言实验程序在 P1.0 及 P1.1 引脚上分别输出 1 秒和 2 秒的方波信号,通过二极管亮灭 来观察实验现象。
时间: 2024-02-13 17:01:26 浏览: 159
c语言控制51单片机模拟实验 定时器/计数器、外部中断实验
5星 · 资源好评率100%
本实验需要使用定时器0和定时器1产生定时中断,并在P1.0和P1.1引脚上分别输出1秒和2秒的方波信号。以下是一种实现方式:
首先,需要设置定时器0和定时器1的工作模式为模式1,即16位自动重载计数器。同时,需要设置定时器的时钟源和计数初值,以获得1秒和2秒的计时周期。
```
MOV TMOD, #11h ; 设置定时器0和定时器1为模式1,即16位自动重载计数器
MOV TH0, #0Bh ; 设置定时器0计数器初值为0x0BDC,以获得1秒钟的计时周期
MOV TL0, #0DCh
MOV TH1, #0Eh ; 设置定时器1计数器初值为0x0E78,以获得2秒钟的计时周期
MOV TL1, #0x78
```
接下来,需要开启定时器并设置中断,以便在定时器计数完成时触发中断服务程序。同时,需要设置一个变量来记录当前应该输出高电平还是低电平。
```
SETB TR0 ; 开启定时器0
SETB TR1 ; 开启定时器1
SETB ET0 ; 开启定时器0的中断
SETB ET1 ; 开启定时器1的中断
CLR LED ; 初始化输出电平为低电平
```
最后,需要编写定时器0和定时器1的中断服务程序。在中断服务程序中,需要将输出电平取反,并将其输出到P1.0和P1.1引脚上,以实现方波信号的输出。
```
TIMER0_ISR:
CLR TF0 ; 清除定时器0中断标志
CPL LED ; 取反输出电平
MOV P1.0, LED ; 将输出电平输出到P1.0引脚上
RETI ; 返回中断
TIMER1_ISR:
CLR TF1 ; 清除定时器1中断标志
CPL LED ; 取反输出电平
MOV P1.1, LED ; 将输出电平输出到P1.1引脚上
RETI ; 返回中断
```
完整的汇编代码如下:
```
ORG 0000h
MOV TMOD, #11h ; 设置定时器0和定时器1为模式1,即16位自动重载计数器
MOV TH0, #0Bh ; 设置定时器0计数器初值为0x0BDC,以获得1秒钟的计时周期
MOV TL0, #0DCh
MOV TH1, #0Eh ; 设置定时器1计数器初值为0x0E78,以获得2秒钟的计时周期
MOV TL1, #0x78
SETB TR0 ; 开启定时器0
SETB TR1 ; 开启定时器1
SETB ET0 ; 开启定时器0的中断
SETB ET1 ; 开启定时器1的中断
CLR LED ; 初始化输出电平为低电平
MAIN_LOOP:
SJMP MAIN_LOOP ; 主循环
TIMER0_ISR:
CLR TF0 ; 清除定时器0中断标志
CPL LED ; 取反输出电平
MOV P1.0, LED ; 将输出电平输出到P1.0引脚上
RETI ; 返回中断
TIMER1_ISR:
CLR TF1 ; 清除定时器1中断标志
CPL LED ; 取反输出电平
MOV P1.1, LED ; 将输出电平输出到P1.1引脚上
RETI ; 返回中断
END
阅读全文