计数器的计数脉冲是对一个有效计数脉冲进行计数器加1,累积计数个数。其计数方法与定时中断方法相同,因为定时器/计数器的定时功能是依靠计数实现的。计数0中断程序入口时000BH,IE赋值总中断、计数中断、外中断开启。项目要求当每按下一次小键盘上的“+1”键计数器就对外部计数脉冲计数一次,执行一次中断,则显示器加1计数显示。TF0溢出执行计数中断。程序点评:程序中使用了计数器0并选择了计数器工作方式1。......
2023-11-07
本实验机装有一只蜂鸣器,可以发出各种声音。涉及乐曲编程时,就必须了解定时器/计数器的设置。另外,很多实用项目也会用到它。这部分内容在本书第三章汇编语言中已经介绍过,但考虑到可能有读者直接看C语言部分,因此本节将先简单介绍一下定时器/计数器,作为C语言编程的前导。
1.定时器/计数器TC0/TC1介绍
定时器/计数器,即Timer/Counter,是8051系列单片机内的一个组件,简写为T/C。有两个相同的定时器/计数器,T/C0和T/C1。若作为定时器用,由内部机器时钟脉冲作为定时计数,累积到计满溢出停止,这个脉冲数就是定时时间。若作为计数器用,要由外部输入脉冲作为计数器,累计计数个数,累积到计满溢出停止,脉冲数就是计数个数。
一般作为定时器选用16位计数器,这时最大定时时间就是机器周期时间×65536。若晶体振荡器频率为6MHz,则定时器最大定时时间为
2μs×65536=0.13s
为了控制T/C工作,在8051系列单片机内设有关的寄存器。
(1)定时模式寄存器(TMOD)
其各位标志如下:
MSB表示最高有效位,LSB表示最低有效位。
单片机复位后,TMOD=0x00。其中,低4位控制T/C0,高4位控制T/C1。GATE是一个选通门。当GATE=0时,不管或引脚是高电平或低电平,均不影响定时器的选通;当GATE=1时,只有或引脚为高电平,才能作为定时器选通条件之一。
T/C=0为定时器方式,T/C=1为计数器方式。
M1 M0是选择定时器/计数器工作模式位:
(2)定时控制寄存器(TCON)
其各位标志如下:
MSB表示最高有效位,LSB表示最低有效位。
单片机复位后,TCON=0x00。
TF1是T/C1的溢出标志。当T/C1计数溢出时,TF1=1。进入中断服务程序后,由硬件自动清“0”。
TR1是T/C1运行控制位。若令TR1=1,T/C1进入工作,TR1=0,T/C1停止工作,均由软件控制。
TF0是T/C0的溢出标志。当T/C0计数溢出时,TF0=1,进入中断服务程序后,由硬件自动清0。
TR0是T/C0运行控制位。若令TR0=1,T/C0进入工作,TR0=0,T/C0停止工作。均由软件控制。
IE1是外部脉冲触发中断请求标志位。当单片机检测到引脚上出现外部中断脉冲的下降沿时,则IE1=1,请求中断,进入中断服务程序后由硬件自动清0。
IT1是外部脉冲触发中断类型控制位。由软件设置或清除。当ITl=l时,是下降沿触发;当IT1=0时,是电平触发。
IE0是外部脉冲触发中断请求标志位。其功能和操作类同IE1。IT0是外部脉冲触发中断类型控制位。其功能和操作类同IT1。
2.【例4-39】 灯D0闪烁运行,间隔时间0.5s。用T/C0控制定时,查询方式
(1)确定定时器T/C0各SFR的内容
1)确定TMOD值。
例如,选用T/C0做定时器,工作方式选mode1,即16位定时器,则TMOD=00000001B=0x01。
2)计算定时常数TH0/TL0。
例如,定时时间设为0.5s。在晶体振荡器频率为6MHz时T/C0的最大定时时间只达到0.13s,但可用软件达到要求。T/C0定时时间选T/C0=0.1s,靠软件重复5次,总定时时间T=5×0.1=0.5s。设定时常数为T0,则
T0=216-定时时间(μs)/机器周期(μs)
T0=65536-(100×103/2)
=65536-50000
=15536
实际上,T0就是一个预设计数值。15536+50000=65536,刚好计满产生溢出,表示定时时间到。因为T/C0是由2个8位定时器组成,必须将T0分解为高8位TH0和低8位TL0,即
TH0=15536/256=60=0x3C
TL0=15536-(256×60)=176=0xB0也可以用C语言列出表达式:
TH0=(65536-100×103/2)/256=60=0x3C
TL0=(65536-100×103/2)%256=176=0xB0
3)确定TCON值。(www.chuimin.cn)
TCON=00H,其TR0在软件中设置,TF0在软件中检测。
(2)编辑C语言源程序
(3)编译
(4)执行
1)软仿真。调试的方法是根据T/C0内容,通过人工施加变化控制定时器溢出标志位TF0的状态,观察程序的执行。操作如下:
①进入软仿真状态,调出端口P1状态窗口。
②单击“外部设备”→Timer→Timer0,调出定时器T/C0窗口。
③单击“跟踪”,执行到第9语句,Timer 0的定时常数已设定。但由于TF0=0,程序在此停留等待。人工置TF0=1,即“√”,表示定时器溢出。
④单击“跟踪”,进入a=a+1=0+1=1。当进入语句17、18、19,重置后,TF0=0。再次进入TF0查询状态。
⑤重复以上操作,直到变量a=5,灯D0取反,D0=0,D0点亮。
⑥在T/C0处于运行状态时,若直接由TL0/TH0增加到溢出,一直单击“跟踪”,这要消耗约几小时的时间。要解决这个问题,必须让TF0=1,人工产生定时器T/C0溢出。
⑦从第11语句开始执行,完成一次循环后,a=a+1。再次设TF0=1进入下一次循环,直到a=0x05。
⑧由于a=0x05,执行语句14,D0取反,同时a=0。
程序又返回到第9语句,重新开始下一次循环。这样连续执行,每隔0.1×5=0.5s,灯D0变化一次。
2)下载到实验机 程序执行后,灯D0闪烁,间隔0.5s。
(5)程序点评
在本例中,充分利用了调试的方法,对程序的走向,变量的控制进行了详细的仿真。在不涉及硬件条件下,检验了程序的运行。为实际硬件执行创造了条件。
3.【例4-40】 利用定时器T/C0做方波发生器,占空比为50%,频率为1kHz,查询方式
(1)确定定时器T/C0各SFR的内容
1)确定TMOD值。
选用T/C0做定时器。工作方式选mode1,即16位定时器。TMOD=0000 0001B=0x01。
2)计算定时常数。
要求P2.7输出频率f=1kHz,周期T=1/1kHz=1ms,占空比50%,据此定时器的定时时间应为1ms/2=0.5ms。设定时常数为T0,有
T0=65536-(0.5×103/2)
=65536-250
=65286
因为T/C0是由2个8位定时器组成,必须将T0分解为高8位TH0和低8位TL0,即
TH0=65286/256=255=0xFF
TL0=65286-(256×255)=65286-65280=0x06
3)确定TCON值。
其中TR0作为T/C0的启动在程序中设置,TF0由溢出决定,TCON初值仍为00。
(2)编辑C语言源程序
(3)编译
(4)执行
1)软仿真。本例与上例基本相同,若上例已经理解,本例可略去调试。
2)下载到目标机。程序执行后,蜂鸣器发出1kHz音频声。单击“RST”,可模拟莫尔斯电码发报。
(5)程序点评
本例练习定时器发声,采用查询方式。
有关零起点学习单片机多语言编程的文章
计数器的计数脉冲是对一个有效计数脉冲进行计数器加1,累积计数个数。其计数方法与定时中断方法相同,因为定时器/计数器的定时功能是依靠计数实现的。计数0中断程序入口时000BH,IE赋值总中断、计数中断、外中断开启。项目要求当每按下一次小键盘上的“+1”键计数器就对外部计数脉冲计数一次,执行一次中断,则显示器加1计数显示。TF0溢出执行计数中断。程序点评:程序中使用了计数器0并选择了计数器工作方式1。......
2023-11-07
定时器/计数器是MCS51系列单片机芯片内的一个组件,简写为T/C。它有2个相同的定时器/计数器,称为定时器/计数器0和定时器/计数器1。实际上定时器/计数器是一个计数器,可以8位、13位或16位计数,对应的两组4个8位计数器。TCON定时控制位共4位。TR0=0,停止定时器/计数器工作;TR0=1,开启定时器/计数器工作。TMOD是专业寄存器,用于设定定时器/计数器0和定时器/计数器1的工作方式,只能用字节传送设置。......
2023-11-07
第二行程序的开始地址是02,第二条机器码程序有两个指令有分别是“0B”、“05”,其中02地址单元中存放“0B”指令,03地址单元中存放“05”数据。第三条程序的开始地址是04,第三条机器码程序有三个指令有分别是“12”、“05”、“02”。......
2023-11-07
位运算是以运算量的二进制位为单位所进行的运算。一般位逻辑运算都是以十六进制数形式进行。在右移运算中,左端的空位补0,右端移出位则舍弃。按条件将a=0x85,b=0x36,执行位运算具体如下:P3=a<<1,左移1位后a=00001010=0x0A显示正确,左位取消,右位补0。......
2023-11-07
所谓独立键,就是各个按键的功能线之间没有电的连接,每个按键独立存在。这种连接方法一只按键要占用一个接口。常用于键少的应用场合。若再次查询按键并没有闭合,则认为按键未被按下,无效。流程图的作用就是将一个应用任务转化为计算机的工作流程。这是用计算机解决应用问题的必要前提。对于任何程序,只有三种基本结构,即顺序结构、分支结构和循环结构。反复执行,则P1.0反复取反状态,表示程序执行正确。......
2023-11-07
单片机是将CPU+ROM+RAM+I/O集成在一块小小的芯片上,这种结构使用非常灵活,可以“嵌入”任何控制对象内,组成嵌入式系统。单片机中的片内程序存储器是一种可编程可擦除的只读存储器。通用计算机的CPU主要是进行高速数据处理。单片机体积很小,可以直接“嵌入”到机器的控制板上,实际上就是将计算机系统嵌入到机器内,组成所谓的“嵌入式系统”。......
2023-11-07
安装在单片机上的两个数码管从“00”开始累加1显示,到“99”后循环。需要讲解的指令重点是累加器A加1赋值指令“INC A”和十进制变换指令“DA A”。低位数码管逐段循环显示源程序实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。......
2023-11-07
以上几方面导致了在嵌入式系统中应用高级语言变得非常必要。如何让读者较容易的具备嵌入式C语言的基本应用技能,从而为大量学习应用实例创造条件是本书的一个特点。嵌入式C语言与被控对象结合紧密,编程除具有标准C语言的特点外,与标准C语言相比,还有如下一些要求:1)对一些关键字进行了一定的扩展。......
2023-11-07
相关推荐