使用计数器T0,工作在方式0,对外部脉冲进行计数,当外部脉冲数量累计达到1000后LED显示值加1。其实验电路如图所示

分析: 使用计数器与使用定时器类似,只是计数脉冲由系统时钟脉冲改为外部脉冲。也可以使用中断查询的方式进行编程,就是先给定时器寄存器赋初值,当计满后就清掉溢出标志TF0.再进入下一轮中断,当然也可以不使用中断查询,而直接使用数值比较完成要求,数值比较其实就是每次都将TH0和TL0与预设的Hight和Lower进行比较,当比较的结果都为真时,进行计数到后的服务程序。下面依次给出其程序清单。
(1)使用中断查询方式的程序清单如下:
sfr data_buf=0xA0; //显示数据端口
unsigned char conter; //全局变量,用于保存计数值
void main(void)
{
conter=0;
Conter_Init();
while(1)
{
Conter0();
disply(conter);
}
}
void Conter_Init(void)
{
TMOD=0x04; //工作方式设置
/*计数器初值设置*/
TH0=0xe0; //初始值设置,7192转为13位后的高8位
TL0=0x18; //初始值设置,7192转为13位后的低5位
/*关闭计数器中断*/
EA=0 ; //关中断
ET0=0 ; //关T0中断
/*启动计数器*/
TR0=1 ; //启动T0
}
void Conter0(void)
{
if(TF0==1)
{
TF0=0;
/*计数器初值设置*/
TH0=0xe0; // 初始值设置
TL0=0x18;
conter++;
if(conter >=99)
conter=0;
}
}
void disply(unsigned char BCD) //显示函数
{
unsigned char x,y; //定义x,y两个变量
x=BCD%10; //取i的个位字符BCD编码放于x中
y=BCD/10; //取i的十位字符BCD编码放于y中
y< <=4; //x左移4位
data_buf=y|x; //返回个位与十位的组合BCD编码并送P2口显示
}
通过上面案例可以看出使用定时器/计数器的基本步骤如下。
1 写TMOD,设置定时器/计数器的工作方式。
2 计算定时器/计数器的初值,并将初值写入TH0/TH1、TL0/TL1。
3 设置IE、IP,以开放或关闭相应的中断和设定中断优先级。
4 启动定时/计数器。
5 根据条件调用定时器/计数器服务函数。
-
寄存器
+关注
关注
31文章
5590浏览量
129104 -
计数器
+关注
关注
32文章
2306浏览量
97601 -
中断
+关注
关注
5文章
913浏览量
43568 -
定时器
+关注
关注
23文章
3361浏览量
121781 -
CD4511
+关注
关注
4文章
24浏览量
30017
发布评论请先 登录
大学生电子设计—脉冲宽度测量与显示
CD4511 pdf datasheet
VR头显2021年或将实现两位数增长
利用ATmega328P和4位7段显示器制作两位数加减计数器

基于CD4511的两位数显脉冲计数器
评论