8051当触发外中断 1 时,利用定时计数器让发光二极管间隔 1 秒闪烁
时间: 2023-06-14 10:07:40 浏览: 67
当8051触发外中断1时,可以通过配置定时器的计数值和时钟源使得定时器溢出的时间为1秒,然后在中断服务程序中控制发光二极管的亮灭状态来实现闪烁效果。具体步骤如下:
1. 配置定时器的计数值和时钟源,使得定时器溢出的时间为1秒。
例如,若使用定时器0和12MHz的系统时钟,则可以设置计数值为65536-12000,使得定时器每1秒溢出一次。
2. 在外中断1的中断服务程序中,控制发光二极管的亮灭状态。
例如,若使用P1口控制发光二极管,则可以定义一个变量flag用于记录发光二极管的状态,然后在中断服务程序中将flag翻转,并根据flag的值设置P1口输出高低电平。
下面是一个示例代码:
```c
#include <reg52.h>
sbit LED = P1^0; // 定义发光二极管控制口
unsigned int cnt; // 定义定时器计数值
bit flag = 0; // 定义发光二极管状态标志
void main()
{
TMOD = 0x01; // 定时器0工作在模式1(16位定时器)下
TH0 = 0xFC; // 设置计数初值
TL0 = 0x66;
TR0 = 1; // 启动定时器0
IT1 = 1; // 外中断1下降沿触发
EX1 = 1; // 打开外中断1
EA = 1; // 打开总中断
while(1);
}
void Interrupt1() interrupt 2
{
flag = ~flag; // 翻转发光二极管状态标志
if(flag)
LED = 1; // 发光二极管亮
else
LED = 0; // 发光二极管灭
cnt = 0; // 重置定时器计数值
TF0 = 0; // 清除溢出标志
TR0 = 1; // 启动定时器0
}
void Timer0() interrupt 1
{
cnt++; // 定时器计数值加1
if(cnt == 12000) // 定时器溢出1秒
{
cnt = 0; // 重置定时器计数值
TF0 = 0; // 清除溢出标志
flag = ~flag; // 翻转发光二极管状态标志
if(flag)
LED = 1; // 发光二极管亮
else
LED = 0; // 发光二极管灭
}
}
```
在上述代码中,当外中断1触发时,会进入中断服务程序Interrupt1(),翻转发光二极管状态标志flag,并根据flag的值控制P1^0口输出高低电平。同时,会重置定时器计数值cnt,并启动定时器0。当定时器0溢出时,会进入中断服务程序Timer0(),判断定时器计数值cnt是否达到12000,若达到则翻转发光二极管状态标志flag并根据flag的值控制P1^0口输出高低电平。通过这样的操作,就可以使发光二极管以1秒为周期闪烁了。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)