计数器的计数脉冲是对一个有效计数脉冲进行计数器加1,累积计数个数。其计数方法与定时中断方法相同,因为定时器/计数器的定时功能是依靠计数实现的。计数0中断程序入口时000BH,IE赋值总中断、计数中断、外中断开启。项目要求当每按下一次小键盘上的“+1”键计数器就对外部计数脉冲计数一次,执行一次中断,则显示器加1计数显示。TF0溢出执行计数中断。程序点评:程序中使用了计数器0并选择了计数器工作方式1。......
2023-11-07
定时器/计数器(Timer/Counter)是MCS51系列单片机芯片内的一个组件,简写为T/C。它有2个相同的定时器/计数器,称为定时器/计数器0和定时器/计数器1。用符号分别表示为T/C0和T/C1。实际上定时器/计数器是一个计数器,可以8位、13位或16位计数,对应的两组4个8位计数器(TH0/TL0和TH1/TL1)。这4个计数器属于专业寄存器。
计数功能:若作为计数器使用,要对外部输入脉冲计数,累计计数,累积到计满溢出停止时,脉冲数就是计数的个数。计数器的计数方式是对一个有效计数脉冲(前1个机器周期为高电平、后1个机器周期为低电平)进行计数器加1。MCS51系列单片机芯片有T0(P3.4)和T1(P3.4)两个信号引脚对外部脉冲进行计数。外部输入的脉冲在负跳变时有效。
定时功能:定时功能是通过定时器/计数器的计数来实现的。若作为定时器使用,计数器对单片机内部的每个机器时钟脉冲作为定时计数,累积到计满溢出停止时,这个脉冲数就是定时时间。
1.【例3-53】 P1.0、P1.1的两个灯亮灭各定时0.5s的循环闪烁源程序
实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.0和P1.1位的灯亮灭按定时各0.5s的规律亮灭。
程序点评:程序中使用了定时器0,选择了定时工作方式1。计数溢出采用查询方式。程序进入“LOOP_2”循环段落后使用了取反指令“CPL”,P1.0和P1.1通过反复取反达到反复地置0、置1,从而控制了灯的亮灭。程序还用了数值比较转移指令“CJNE”。
2.定时器控制学习
MCS51系列单片机提供给用户的控制定时的寄存器共有3个,在设计使用定时器服务程序前首先要对所选定的定时寄存器进行正确的初始化(值)设置。计算计数初始值(因为定时是通过计数实现的)并且将初始值分别存放在定时器/计数器0和定时器/计数器1(T/C0和T/C1)所对应的两组4个8位专业寄存器中(TH0/TL0和TH1/TL1),并选择定时器/计数器的工作方式。
(1)与定时控制相关的寄存器
1)定时控制寄存器(TCON)。单片机复位后,TCON=00H。各位标志如下:
TCON寄存器参与中断控制和定时控制。寄存器中断控制位的设置见前述。TCON定时控制位共4位。
①TF0和TF1是计数溢出标志位。当计数器计数溢出时该位置“1”,可以将此位状态供位查询使用,查询后软件(指令)清“0”。也可以作为中断的标志位使用,在转向中断后也要清“0”。
②TR0和TR1定时器运行控制位。
TR0(TR1)=0,停止定时器/计数器工作;TR0(TR1)=1,开启定时器/计数器工作。
使用中用软件(指令)置“0”或置“1”。
定时控制寄存器(TCON)初始值设置可以是字节设置也可以是位设置。
2)工作方式控制寄存器(TMOD)。TMOD是专业寄存器,用于设定定时器/计数器0和定时器/计数器1(T/C0和T/C1)的工作方式,只能用字节传送设置。其各位定义如下:
MSB—表示最高有效位,LSB—表示最低有效位。单片机复位后,TMOD=00H。其中,低4位控制T/C0,高4位控制T/C1。工作方式控制寄存器(TMOD)各位设置如下:
①GATE———选通门控制。当GATE=0时,不管或
引脚是高电平或低电平,均不作为定时器选通条件;当GATE=1时,只有
或
引脚是高电平,才能作为定时器选通条件之一。
②C/T———定时方式或计数方式选择。T/C=0为定时器方式,T/C=1为计数器方式。
③M1、M0———定时器/计数器工作模式选择。
M1 M0=00,工作方式0(mode0)。
M1 M0=01,工作方式1(mode1)。
M1 M0=10,工作方式2(mode2)。
M1 M0=11,工作方式3(mode3)。
工作方式0(mode 0)是13位计数结构的工作方式(不常用),其计数器由TH0全部8位和TL0的低5位构成。TL0的低3位不用。计数范围为1~8192(213)。本款单片机晶振频率为6MHz,则最小定时时间为〔213-(213-1)〕×1/6×10-6×12μs=2×10-6μs=2μs,最大定时时间为:(213-0)×1/6×10-6×12μs=16384×10-6μs=16384μs。
工作方式1(mode1)是16位计数结构计数器,由TH高8位、TL低8位构成。计数范围为1~65536(216)。本款单片机晶振频率为6MHz,则最小定时时间为〔216-(216-1)〕×1/6×10-6×12μs=2×10-6μs=2μs,最大定时时间为(216-0)×1/6×10-6×12μs=131072×10-6μs=131072μs≈131ms。
工作方式2(mode 2)是8位自动重新加载工作方式。把16位计数器分成两部分,TL作计数器,TH作预置初始值寄存器。当TL计数溢出后,TH将初始值内容自动重新装入TL内。计数范围为1~255(28)。本款单片机晶振频率为6MHz,则最小定时时间为〔28-(28-1)〕×1/6×10-6×12μs=2×10-6μs=2μs,最大定时时间为:(28-0)×1/6×10-6×12μs=255×10-6μs=510μs。
工作方式3T/C0分成两个8位定时器,T/C1停止计数。
定时器/计数器工作模式选择一般作为定时器选用16位计数器,这时最大定时时间就是机器时钟时间×65536(216)。若晶体振荡器频率为6MHz,机器周期=晶振周期×12,而晶振周期T=1/f=1/6×10-6。所以机器周期=1/6×10-6×12=2μs,则定时器最大定时时间为2μs×65536=0.13s。
3)中断允许控制寄存器(IE)。寄存器(IE)的详细介绍见中断控制寄存器章节。与定时器/计数器有关的位再复习如下:
①EA———中断总允许控制位 EA=0中断总禁止,EA=1中断总允许。
②ET0、ET1———定时/计数中断允许控制位ET0(ET1)=0禁止定时/计数中断,ET0(ET1)=1允许定时/计数中断。
(2)定时初始化设置步骤(既定时控制寄存器的状态设置)
1)计算计数初始值(定时常数),并将定时常数分别放入TH0(TH1)和TL0(TL1)中。
2)确定TMOD值。
①选择定时器T/C0或T/C1并定义所对应的低半字节或高半字节。
②确定工作方式选M0M1。
③确定门控制位GATE。
④确定定时方式位(或确定计数方式位)。
3)确定TCON中TR0和TR1定时器运行控制位的值。
3.编程练习一(定时器:查询方式)
【例3-54】 使用定时器1,采用工作方式0和查询方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波并控制P1.0,P1.1两个灯亮灭各定时20ms循环闪烁源程序。
1)计算计数初始值。因为是周期为500μs的等宽方波,则该等宽方波由占空比50%的高、低电平组成。高低电平各为250μs。则250μs×80=20ms。另外,工作方式0(mode0)是13位计数结构。
(213-X)×2μs×1062=250μs×106 X=8192-125=8067
8067÷256=31余131 31÷16=1余15=1FH=11111B(因为余数15=FH)
余数131÷16=8余3=83H=10000011B
X=8067=1111110000011B,高8位=11111100放入计数器1的计数存储器TH1=11111100B,则TH1=0FCH。低5位=00011B放入计数器1的低位计数存储器TL1=03H。
2)工作方式控制寄存器TMOD的初始化。因为采用工作方式0,所以M1M0=00。又因为选择定时功能,所以C/T=0。选择了定时器1,为实现定时器1的运行控制GATE=0。另外,定时器0不用,有关为设置为0,则TMOD=00H。
说明:根据条件设置TMOD=00H,看似使用定时器1或使用定时器0没有区别,但是在程序中的指令是启动定时运行位控制TR1,只能使用定时器1。这一点应特别注意。
3)确定TCON中TR0和TR1定时器运行控制位的值,TR1=1。
4)源程序。(www.chuimin.cn)
实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.0和P1.1的灯按定时各20ms规律亮灭。
程序点评:程序中使用了定时器1,选择了定时器工作方式0。计数溢出采用查询方式。程序进入“LOOP_2”循环段落后P1.0和P1.1的状态反复取反达到亮灭效果。另外,本程序灯的亮灭控制时间明显快于例3-51。
【例3-55】 使用定时器0,采用工作方式2和查询方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波,并控制P1.2、P1.3两个灯亮灭各定时50ms循环闪烁的源程序
1)计算计数初始值。因为是周期为500μs等宽方波,则该等宽方波由占空比50%的高、低电平组成。高低电平各为250μs,则250μs×200=50ms。另外,工作方式2是8位计数结构。
(28-X)×2μs×1062=250μs×106,解X=255-125=130,130÷16=8余2=82H=10000010B。
将82H分别装入TH0和TL0中。
2)工作方式控制寄存器TMOD的初始化。因为采用工作方式2,所以M1M0=10。又因为选择定时功能,所以C/T=0。选择定时器0,为实现定时器0的运行控制GATE=0。另外,定时器1不用,设置为0,则TMOD=02H。
3)确定TCON中TR0和TR1定时器运行控制位的值,TR0=1。
4)源程序如下:
实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.2和P1.3接口的灯按定时各50ms规律亮灭。
程序点评:程序中使用了定时器0,选择了定时器方式为工作方式2(即自动重新装载方式)。计数溢出采用查询方式。
4.编程练习二(定时器:中断方式)
【例3-56】 使用定时器1,采用工作方式0和中断方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波,并控制P1.0、P1.1两个灯亮灭各定时20ms循环闪烁源程序
1)计算计数初始值。因为是周期为500μs的等宽方波,则该等宽方波由占空比50%的高、低电平组成。高低电平各为250μs,则250μs×200=50ms。另外,工作方式0(mode 0)是13位计数结构。
(213-X)×2μs×1062=250μs×106,X=8192-125=8067
8067÷256=31余131 31÷16=1余15=1FH=11111B(因为余数15=FH)
余数131÷16=8余3=83H=10000011B
X=8067=1111110000011B,高8位=11111100放入计数器1的计数存储器TH1=11111100B,则TH1=0FCH。低5位=00011B放入计数器1的低位计数存储器TL1=03H。
2)工作方式控制寄存器TMOD的初始化。因为采用工作方式0,所以M1M0=00。又因为选择定时功能,所以C/T=0。选择了定时器1,为实现定时器1的运行控制GATE=0。另外,定时器0不用,有关为设置为0,则TMOD=00H。
说明:根据条件设置TMOD=00H,看似使用定时器1或使用定时器0没有区别,但是在程序中的指令是启动定时运行位控制TR1,只能使用定时器1。这一点应特别注意。
3)确定TCON值。TR1=1在程序中设置(因为使用定时器1),其他位为0,TCON=00H。
4)确定中断允许控制寄存器(IE)数值。
EA=1,中断总允许;ET1=1,允许定时器1定时中断,IE=88h=10001000B。
5)确定中断入口。定时器1的中断入口为001BH。
6)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。
7)源程序如下:
实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.0和P1.1的灯按定时各50ms规律亮灭。
程序点评:程序中使用了定时器1,选择了定时器工作方式0。计数溢出采用中断方式。
【例3-57】 使用定时器0,采用工作方式2和中断方式。晶振频率为6MHz,一个机器周期2μs。设计产生一个周期500μs的连续等宽方波,并控制P1.2、P1.3两个灯亮灭各定时50ms循环闪烁的源程序
1)计算计数初始值。因为是周期为500μs等宽方波,则该等宽方波由占空比50%的高、低电平组成。高、低电平各为250μs,则250μs×200=50ms。另外,工作方式2(mode2)是8位计数结构。
(28-X)×2μs×1062=250μs×106,解得:X=255-125=130,130÷16=8,余2=82H=10000010B。将82H分别装入TH0和TL0中。
2)工作方式控制寄存器TMOD的初始化。因为采用工作方式2,所以M1M0=10。又因为选择定时功能,所以C/T=0。选择定时器0,为实现定时器0的运行控制,应使GATE=0。另外,定时器1不用,有关位设置为0,则有TMOD=02H。
3)确定TCON值。TR0=1在程序中设置(因为使用定时器),其他位为0,TCON=00H。
4)确定中断允许控制寄存器(IE)数值。
EA=1,中断总允许;ET0=1 允许定时器0定时中断,IE=82H=10000010B。
5)确定中断入口。定时器0的中断入口为000BH。
6)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。
7)源程序。
实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.2和P1.3的灯按定时各50ms规律亮灭。
程序点评:程序中使用了定时器0,选择了定时器方式工作方式2(即自动重新装载方式)。计数溢出采用中断方式。
【例3-58】 利用定时器T/C0控制P1.7灯闪烁,定时时间为1s,采用中断方式
1)确定TMOD值。选用T/C0做定时器,工作方式选工作方式1,即16位定时器。TMOD=00000001B=01H。
2)计算定时常数。要求定时时间为1s,选T/C0定时时间为T/C0=0.1s,靠软件重复10次,总定时时间T=10×0.1s=1s。定时常数T0=65536-(100×103/2)=65536-50000=15536。因为T/C0是由2个8位定时器组成,必须将T0分解为高8位TH0和低8位TL0,即TH0=15536/256=60=3CH,TL0=15536-(256×60)=176=0B0H。
3)确定TCON值。TR0在程序中设置,其他位为0,TCON=00H。
4)确定IE值。EA=1,允许总中断;ET0=1允许T/C0定时中断;其他位为0;IE=10000010=82H。
5)确定IP值。因只有一个中断,可以不设置优先级,仍保持复位状态IP=00H。
6)确定中断服务程序地址入口000BH。
7)源程序如下:
实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。安装在P1.7的灯按1s的定时规律亮灭。
程序点评:程序中使用了定时器0,选择了定时器方式工作方式1,计数溢出采用中断方式。
有关零起点学习单片机多语言编程的文章
计数器的计数脉冲是对一个有效计数脉冲进行计数器加1,累积计数个数。其计数方法与定时中断方法相同,因为定时器/计数器的定时功能是依靠计数实现的。计数0中断程序入口时000BH,IE赋值总中断、计数中断、外中断开启。项目要求当每按下一次小键盘上的“+1”键计数器就对外部计数脉冲计数一次,执行一次中断,则显示器加1计数显示。TF0溢出执行计数中断。程序点评:程序中使用了计数器0并选择了计数器工作方式1。......
2023-11-07
单片机是将CPU+ROM+RAM+I/O集成在一块小小的芯片上,这种结构使用非常灵活,可以“嵌入”任何控制对象内,组成嵌入式系统。单片机中的片内程序存储器是一种可编程可擦除的只读存储器。通用计算机的CPU主要是进行高速数据处理。单片机体积很小,可以直接“嵌入”到机器的控制板上,实际上就是将计算机系统嵌入到机器内,组成所谓的“嵌入式系统”。......
2023-11-07
所谓独立键,就是各个按键的功能线之间没有电的连接,每个按键独立存在。这种连接方法一只按键要占用一个接口。常用于键少的应用场合。若再次查询按键并没有闭合,则认为按键未被按下,无效。流程图的作用就是将一个应用任务转化为计算机的工作流程。这是用计算机解决应用问题的必要前提。对于任何程序,只有三种基本结构,即顺序结构、分支结构和循环结构。反复执行,则P1.0反复取反状态,表示程序执行正确。......
2023-11-07
第二行程序的开始地址是02,第二条机器码程序有两个指令有分别是“0B”、“05”,其中02地址单元中存放“0B”指令,03地址单元中存放“05”数据。第三条程序的开始地址是04,第三条机器码程序有三个指令有分别是“12”、“05”、“02”。......
2023-11-07
涉及乐曲编程时,就必须了解定时器/计数器的设置。一般作为定时器选用16位计数器,这时最大定时时间就是机器周期时间×65536。T/C=0为定时器方式,T/C=1为计数器方式。M1 M0是选择定时器/计数器工作模式位:定时控制寄存器其各位标志如下:MSB表示最高有效位,LSB表示最低有效位。......
2023-11-07
安装在单片机上的两个数码管从“00”开始累加1显示,到“99”后循环。需要讲解的指令重点是累加器A加1赋值指令“INC A”和十进制变换指令“DA A”。低位数码管逐段循环显示源程序实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,单片机自动运行该程序。......
2023-11-07
尽管单片机有许多特点,但仍然属于计算机的范围。这种特殊的语言就是程序设计语言,也就是由一系列语句组成的程序。程序设计语言从原理上可分为机器语言、汇编语言和高级语言三种类型,单片机也不例外。由于汇编语言指令具有直接对应机器语言指令的特点,因而生成的机器代码效率高,执行速度快,至今在单片机程序设计中仍被采用。在众多高级语言中,只有C语言成了应用于单片机系统的高级语言。......
2023-11-07
位运算是以运算量的二进制位为单位所进行的运算。一般位逻辑运算都是以十六进制数形式进行。在右移运算中,左端的空位补0,右端移出位则舍弃。按条件将a=0x85,b=0x36,执行位运算具体如下:P3=a<<1,左移1位后a=00001010=0x0A显示正确,左位取消,右位补0。......
2023-11-07
相关推荐