/*基于一个定时器加软件并行实现多个LED闪烁*/
#include "reg52.h"
/*宏定义:D1~D3的闪烁时间*/
#define D1_DELAY_XMS 1000
#define D2_DELAY_XMS 500
#define D3_DELAY_XMS 100
/*********************************/
#define u16 unsigned int
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
/*位定义:D1~D3延时时间到的标志位*/
bit D1_Delay_ON;
bit D2_Delay_ON;
bit D3_Delay_ON;
/*********************************/
u16 D1DelayCount, D2DelayCount, D3DelayCount; //1ms计数值定义
void Timer0Init(void);
void main(void)
{
Timer0Init();
D1DelayCount = D1_DELAY_XMS;
D2DelayCount = D2_DELAY_XMS;
D3DelayCount = D3_DELAY_XMS; //延时计数的装载初始
while(1)
{
if(D1_Delay_ON) //定时延时到
{
D1 = ~D1;
D1_Delay_ON = 0; //定时到标志位清零,为下一次延时做准备
D1DelayCount = D1_DELAY_XMS; //重载用于延时的计数值,为下次延时准备
}
if(D2_Delay_ON)
{
D2 = ~D2;
D2_Delay_ON = 0;
D2DelayCount = D2_DELAY_XMS;
}
if(D3_Delay_ON)
{
D3 = ~D3;
D3_Delay_ON = 0;
D3DelayCount = D3_DELAY_XMS;
}
}
}
void Timer0Init(void) //1毫秒@12MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //定时模式1
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //开启定时器中断
EA = 1; //开启总中断
}
void time0_isr(void) interrupt 1 //定时中断函数
{
TR0 = 0; //先清零,确保执行完中断函数再开启定时
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
if(D1DelayCount) //D1延时的软件定时器
{
D1DelayCount --;
if(!D1DelayCount)
D1_Delay_ON = 1; //D1的延时时间到
}
if(D2DelayCount)
{
D2DelayCount --;
if(!D2DelayCount)
D2_Delay_ON = 1;
}
if(D3DelayCount)
{
D3DelayCount --;
if(!D3DelayCount)
D3_Delay_ON = 1;
}
TR0 = 1;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
02-定时器实现多路非阻塞延时定时—实现LED并行闪烁.zip (20个子文件)
02-定时器实现多路非阻塞延时定时—实现LED并行闪烁
Objects
TIM_Soft_Delay 4KB
TIM_Soft_Delay.obj 4KB
TIM_Soft_Delay.hex 572B
TIM_Soft_Delay.lnp 103B
TIM_Soft_Delay.build_log.htm 1KB
TIM_Soft_Delay.uvgui.Knight 70KB
TIM_Soft_Delay.uvproj 12KB
TIM_Soft_Delay.uvopt 5KB
Project Backups
定时器和软件的非阻塞延时 [20231118, 18-12-12].pdsprj 11KB
定时器和软件的非阻塞延时 [Autosaved].pdsprj 15KB
Listings
TIM_Soft_Delay.lst 5KB
TIM_Soft_Delay.m51 6KB
TIM_Soft_Delay.c 2KB
定时器和软件的非阻塞延时.pdsprj 15KB
仿真
Project Backups
定时器加软件的非阻塞延时 [20240102, 20-10-30].pdsprj 15KB
定时器加软件的非阻塞延时 [Autosaved].pdsprj 15KB
定时器加软件的非阻塞延时 [20231208, 17-22-14].pdsprj 11KB
定时器加软件的非阻塞延时.pdsprj.LAPTOP-MNVEPGL0.Knight.workspace 3KB
定时器加软件的非阻塞延时.pdsprj 15KB
定时器和软件的非阻塞延时.pdsprj.LAPTOP-MNVEPGL0.Knight.workspace 3KB
共 20 条
- 1
资源评论
持续输入中。。。
- 粉丝: 54
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功