使用计数器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 根据条件调用定时器/计数器服务函数。
全部0条评论
快来发表一下你的评论吧 !