06-T0定时器中断

1、定时器0的控制寄存器

AUXR  |= 0x80;//定时器时钟为1T模式

TMOD  &= 0xF0;//定时器T0工作在模式0  16位自动重载模式

TF0 = 0;

TR0 = 1;//开启定时器T0

ET0 = 1;//打开定时器0中断。

中断号为1 

2、程序代码

#include "stc8g.h"
#include "intrins.h"

sbit LED_R = P0^5;//红色LED
sbit LED_Y = P0^6;//黄色LED
sbit LED_G = P0^7;//绿色LED

unsigned int cnt = 0;

void Delay1us()
{
	unsigned char i;
	_nop_();
	_nop_();
	i = 9;
	while(--i);
}

void Delay1ms()
{
	unsigned char i,j;
	_nop_();
	_nop_();
	i = 46;
	j = 113;
	do{
		while(--j);
	}while(--i);
}

void Delay_ms(unsigned int ms)
{
	while(ms--)
	{
		Delay1ms();
	}
}

void TM0_Isr(void) interrupt 1
{
	cnt++;
	if(cnt == 1000)
	{
		LED_R = !LED_R;
		cnt = 0;
	}		
}

void Time0_Init()
{
	AUXR |= 0x80;//定时器时钟为1T模式
	TMOD &= 0xF0;//定时器T0工作在模式0 16位自动重载模式
	TL0 = 0x48;
	TH0 = 0x77;//定时器1ms
	TF0 = 0;//中断标志清0
	TR0 = 1;//打开定时器T0
	ET0 = 1;//打开定时器T0中断
	EA = 1;//打开总中断
}

void main()
{
	P0M0 = 0x00;//设置P0口为准双向口
	P0M1 = 0x00;
	
	Time0_Init();
	while(1)
	{
			
	}
}

### BS83A02A-4 定时器中断配置与使用 BS83A02A-4 是一款基于 8051 架构的微控制器,其定时器功能广泛应用于各种嵌入式系统中。以下是关于该芯片定时器中断配置和使用的详细介绍。 #### 硬件资源概述 BS83A02A-4 提供多个定时/计数器模块,支持多种工作模式。这些定时器可以用于时间测量、脉冲宽度调制 (PWM) 输出以及触发中断等功能[^1]。 #### 定时器中断配置流程 为了实现定时器中断的功能,需要完成以下几个方面的设置: 1. **初始化定时器寄存器** - 设置 TMOD 寄存器来定义定时器的工作模式(如模式 0模式 3)。例如,在模式 1 下,定时器是一个 16 位自动重载计数器。 ```c TMOD |= 0x01; // 配置 T0 工作于模式 1 ``` 2. **加载初始值到 THx 和 TLx** - 计算所需的初值以便达到期望的时间间隔。假设晶振频率为 12 MHz,则机器周期为 1 μs。如果希望每 5 ms 发生一次溢出中断,可以通过以下公式计算: \[ InitialValue = 65536 - DesiredTicks \] 对应 C 代码如下: ```c TH0 = (unsigned char)(InitialValue >> 8); // 加载高字节 TL0 = (unsigned char)(InitialValue & 0xFF); // 加载低字节 ``` 3. **使能全局中断定时器中断** - EA 控制全局中断开关;ET0 或 ET1 则分别控制 Timer0 和 Timer1中断允许状态。 ```c IE |= 0x82; // 开启总中断并启用 T0 中断 TR0 = 1; // 启动定时器 0 ``` 4. **编写中断服务程序 (ISR)** - 当发生溢出事件时会跳转至对应的 ISR 地址执行特定逻辑处理操作。 ```c void timer0_ISR(void) interrupt 1 { static unsigned int count; if (++count >= 200) { // 假设每次进入需累加一定次数才做实际动作 count = 0; // 插入具体业务代码... P1 ^= 0x01; // 如切换某个 I/O 口电平作为测试信号输出 } } ``` 以上步骤构成了完整的定时器中断配置过程[^2]。 #### 注意事项 - 在设计过程中要充分考虑外部环境干扰可能带来的影响,比如电源波动等因素可能会引起误触发现象。 - 如果项目中有其他外设也需要占用 CPU 时间片的话,则应该合理分配优先级以免造成重要任务延迟响应的情况出现[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41392061

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值