首页 理论教育零起点学习单片机多语言编程:定时器/计数器计数功能

零起点学习单片机多语言编程:定时器/计数器计数功能

【摘要】:计数器的计数脉冲是对一个有效计数脉冲进行计数器加1,累积计数个数。其计数方法与定时中断方法相同,因为定时器/计数器的定时功能是依靠计数实现的。计数0中断程序入口时000BH,IE赋值总中断、计数中断、外中断开启。项目要求当每按下一次小键盘上的“+1”键计数器就对外部计数脉冲计数一次,执行一次中断,则显示器加1计数显示。TF0溢出执行计数中断。程序点评:程序中使用了计数器0并选择了计数器工作方式1。

一般定时器/计数器的计数功能是依靠(TC0/TC1)外部脉冲输入到芯片P3.4和P3.5引脚的脉冲计数来实现的。计数器的计数脉冲是对一个有效计数脉冲(前1个机器周期为高电平、后1个机器周期为低电平)进行计数器加1,累积计数个数。一般使用中,当累积到计满溢出时产生计数中断,执行中断控制程序。若一个外部计数脉冲就能实现一个中断请求,执行一个中断控制程序,则计数器每对外部计数脉冲计数一次就执行一次中断。

另外,定时器/计数器的计数功能也可以对内部脉冲计数实现。其计数方法与定时中断方法相同,因为定时器/计数器(TC0/TC1)的定时功能是依靠计数实现的。

1.【例3-59】 每按下一次小键盘上的“+1”键,8个灯往返闪烁一次的源程序

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,当单片机运行该程序后,每按下一次小键盘上的“+1”键,8个灯往返闪烁一次。

程序点评:程序中使用了计数器0,对应的外部脉冲输入端是P3.4,并选择了计数器工作方式2。计数溢出采用中断方式。因为计数初始值TH0=0FFH,TL0=0FFH。所以,每当有一个外部计数脉冲就产生一次中断,8个灯往返闪烁一次。计数0中断程序入口时000BH,IE赋值总中断、计数中断、外中断开启。

2.编程练习

【例3-60】 计数器源程序(每按下一次小键盘上的“+1”键,显示器加1计数显示的源程序)

按项目要求设置计数器各寄存器初始值如下:

1)确定TMOD值。选用T/C0做定时器,工作方式选择工作方式3,即8位定时器。

TMOD=0000 0110B=06H。

2)计算定时常数。

项目要求当每按下一次小键盘上的“+1”键计数器就对外部计数脉冲计数一次,执行一次中断,则显示器加1计数显示。因为计数初始值为TH0=0FFH,TL0=0FFH。

3)确定TCON值。其中TR0作为T/C0的启动在程序中设置。TF0溢出执行计数中断。

4)中断允许控制寄存器IE值。中断总允许EA=1,计数中断允许ET0=1,允许外中断方式EX0=1,则IE=83H。

5)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。

6)确定中断服务程序地址入口000BH。

7)源程序如下:

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序后,每按下一次小键盘上的“+1”键,显示器就会加1显示计数。安装在单片机上的两个数码管从“00”开始累加1显示,到“99”后循环。(www.chuimin.cn)

程序点评:程序中使用了计数器0,对应的外部脉冲输入端是P3.4,并选择了计数器工作方式3。计数溢出采用中断方式。因为计数初始值TH0=0FFH,TL0=0FFH。所以,每按下一次小键盘上的“+1”键就有一个外部计数脉冲,产生一次中断,显示器加1计数显示。计数0中断程序入口是000BH,IE赋值总中断、计数中断、外中断开启。程序显示单元用了数据分离处理、转换为字形码、数码管显示模块,使用了数据比较条件转移指令。

另外,对小键盘上的“+1”键的扫描识别用了P2.0位状态判断指令。连续用了两条P2.0位状态判断指令是为了有效操作。

【例3-61】 1kHz信号产生器源程序(利用单片机内部时钟脉冲计数)

单片机产生的1kHz频率信号是占空比50%的方波,高、低电平各500μs。每一个机器周期2μs计数一次,共需要计数500μs÷2μs=250次。

按项目要求设置计数器各寄存器初始值如下:

1)确定TMOD值。选用T/C0为计数器。工作方式选mode 1,即16位定时器。

TMOD=0000 0001B=01H。

2)计算定时常数。

项目要求P2.7输出频率为f=1kHz,周期为T=1/1kHz=1ms,占空比为50%,据此定时器的定时时间应为1ms/2=0.5ms。

定时常数T0=65536-(0.5×103/2)=65536-250=65286。因为T/C0由2个8位定时器组成,必须将T0分解为高8位TH0和低8位TL0,即TH0=65286/256=255=0FFH,TL0=65286-(256×255)=65286-65280=06H。

3)确定TCON值。其中TR0作为T/C0的启动在程序中设置。TF0由溢出中断。

4)中断允许控制寄存器IE值。中断总允许EA=1,计数中断允许ET0=1,IE=82H。

5)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。

6)确定中断服务程序地址入口000BH。

7)源程序如下:

实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序后,安装在单片机上的蜂鸣器发出1kHz的音频信号。

程序点评:程序中使用了计数器0并选择了计数器工作方式1。计数溢出采用中断方式,中断入口为000BH。计数初始值TH0=0FFH,TL0=06H,由于选择计数器工作方式1,所以需要重新装载数据。