中职基于Proteus仿真的单片机技能应用(双色)proteus项目6教学课件 .ppt

上传人:春哥&#****71; 文档编号:90568999 上传时间:2023-05-15 格式:PPT 页数:88 大小:1.53MB
返回 下载 相关 举报
中职基于Proteus仿真的单片机技能应用(双色)proteus项目6教学课件 .ppt_第1页
第1页 / 共88页
中职基于Proteus仿真的单片机技能应用(双色)proteus项目6教学课件 .ppt_第2页
第2页 / 共88页
点击查看更多>>
资源描述

《中职基于Proteus仿真的单片机技能应用(双色)proteus项目6教学课件 .ppt》由会员分享,可在线阅读,更多相关《中职基于Proteus仿真的单片机技能应用(双色)proteus项目6教学课件 .ppt(88页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、中职 基于Proteus仿真的单片机技能应用(双色)proteus项目6教学课件 高教版 项目六 定时/计数器系统及其应用 随着电子技术与单片机技术的发展,电子计时器的应用非常广泛,越来越多的取代的传统的机械式计时器及设备。一、产生1KHz方波信号1.技能要求技能要求设晶振频率6MHz。利用单片机定时器T0的方式1,在P3.0端口上输出周期为2ms的方波。2.仿真电路图仿真电路图本实例仿真电路图如图6-1所示。P3.0端口的示波器用于观察波形和计算信号频率。图中示波器的每小格为0.1ms,因此信号周期为1ms,频率为1KHz。技能应用一 电子计时器的设计 技能应用一 电子计时器的设计图6-1

2、产生1KHz方波信号的电路 技能应用一 电子计时器的设计3.程序设计与调试程序设计与调试频率为1KHz的方波,其周期为1/1KHz,即1ms。要在P3.0端口上输出周期为1ms的方波,需要使P3.0端口每隔0.5ms取反一次。我们可以通过定时器作0.5ms定时,定时时间到,则向CPU申请中断,在中断服务程序中对P3.0取反。(1)确定工作模式和工作方式定时器T0工作方式1时:M1M0=01,=0,GATE=0,高4位未使用,全部赋0,则TMOD=0 x01。(2)计算0.5ms定时T0的初值。晶振频率6MHz,则机器周期为2s,设T0的初值为X,则:X=(2165002)=65036=FF06

3、H因此,TH0的初值为0 xff,TL0的初值为0 x06。技能应用一 电子计时器的设计 参考程序如下:#include sbit out=P30;int main(void)TMOD=0 x01;TH0=0 xff;TL0=0 x06;EA=1;ET0=1;TR0=1;while(1);void time_0()interrupt 1TH0=0 xff;TL0=0 x06;out=!out;二、秒闪电路的设计1.技能要求技能要求所谓秒闪,即1s定时闪烁电路,就是让一个发光二极管每一秒钟固定闪烁一次,实际上就是让发光二极管亮500ms,然后再灭500ms,如此循环。本实例要求单片机P1.0脚接

4、一只LED,编写程序实现LED以1Hz的频率闪烁。2.仿真电路图仿真电路图 1秒定时闪烁电路原理图如图6-3所示。图6-3 1秒定时闪烁电路原理图二、秒闪电路的设计3.程序设计与调试程序设计与调试 500ms的定时可通过定时器/计数器T0的工作方式1来实现,但是定时器/计数器T0在工作方式1下最大定时时间只有65.536ms,该怎么实现500ms的定时呢?我们可以做一个50 ms的定时,即每50 ms中断一次,然后通过一个变量记录中断次数,每中断一次,让这个变量加1,当这个变量等于10时,说明已经中断了10次,正好就是500 ms,这时再对P1.0取反。本制作中使用定时器/计数器T0,工作方式

5、1,定时时间取50ms,通过定时中断10次来达到定时500ms的目的。二、秒闪电路的设计1s定时闪烁电路的参考程序如下:#include/MCS-51系列单片机头文件sbit led=P10;/定义led代表P1.0,用于控制发光二极管的亮灭 unsigned char n=0;/变量n用于统计中断的次数 void init()/定时器/计数器的初始化函数 TMOD=0 x01;/使用T0,方式1,启动只受TR0控制,定时功能 TH0=15536/256;/给T0的高8位赋初值 TL0=15536%256;/给T0的低8位赋初值 EA=1;/开总中断二、秒闪电路的设计 ET0=1;/打开定时器

6、0中断 TR0=1;/启动T0工作int main()/主函数 init();/定时器初始化 while(1);/进入死循环void timer_0()interrupt 1/定时器0的中断处理函数,中断号为1 TH0=15536/256;/重新赋计数初值 TL0=15536%256;n+;/*变量n用于统计定时中断的次数,每中断一次,n的值便增加1*/if(n=10)/如果n值为10,说明500ms定时时间到 n=0;/变量n的值重新被初始化 led=!led;/发光二极管由亮变灭或由灭变亮 二、秒闪电路的设计 下面分析一下这个程序:进入主函数后,首先是对定时器和中断有关的特殊功能寄存器初始

7、化,首先是对TMOD赋初值,以确实使用定时器T0的工作方式1,并设定其启动仅受TR0的控制,工作在定时模式下;定时50ms的初始值我们在前面已分析过,应为65536-50000=15536,将15536除256所得商赋给T0的高8位TH0,将15536除256所得余数赋给T0的低8位TL0,然后打开中断(包括开总中断和相应的中断源中断),启动定时器开始计数定时。初始化一旦完成,定时器便开始独立计数,不再占用CPU的时间,CPU的工作和定时器的计数是同时进行的,互不影响。直到定时器计满溢出,表明定时时间50ms到,才向CPU发出中断申请,CPU响应中断,暂停主函数的执行,转去执行中断处理函数ti

8、mer_0,重载T0的计数初始值,变量n加1,并判断变量n的值是否已达到10(定时500ms时间是否已到),若n=10,说明500ms定时时间已到,将n的值重新初始化为0,并将发光二极管的亮灭状态取反,从而实现发光二极管每1秒钟闪烁1次。处理完毕后返回主函数断点处继续执行主函数(死循环)。三、带数显的交通指示灯的设计 1.技能要求 制作带数码显示倒计时的交通灯控制系统,要求南北方向为主干道,通行车辆较多,绿灯时间为40秒,东西方向为支干道,通行车辆较少,绿灯时间为30秒。2.仿真电路 带数码显示倒计时的交通灯控制系统电路图如图6-5所示。上下为南北方向,左右为东西方向,两个方向各有一对红绿灯和

9、两位数码管。三、带数显的交通指示灯的设计图6-5 带数码显示的交通灯控制系统三、带数显的交通指示灯的设计3.程序设计与调试南北方向为主干道,东西方向为支干道,共有四种状态:状态一,南北方向绿灯亮,东西方向红灯亮,计时40秒;状态二,南北方向黄灯亮,东西方向红灯亮,计时5秒;状态三,南北方向红灯亮,东西方向绿灯亮,计时30秒;状态四,南北方向红灯亮,东西方向黄灯亮,计时5秒。循环重复上述过程。为了编程方便,我们使用一个变量4个不同取值表示交通灯的四个状态,由一个状态进入另一个状态,只需要修改这个变量的值即可。带数码显示的交通灯控制系统参考程序如下:#include#include unsigne

10、d char count;/中断次数计数unsigned char s;/状态变量unsigned char sn,ew;/倒计时变量三、带数显的交通指示灯的设计unsigned char code seg=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/09十个数字和共阳型段码sbit r1=P10;/两个方向的红黄绿灯sbit y1=P11;sbit g1=P12;sbit r2=P15;sbit y2=P14;sbit g2=P13;void delay(unsigned int j)while(j-);三、带数显

11、的交通指示灯的设计display()unsigned char i,wk=0 x01;/wk变量作位控,初始选通右边第1位unsigned char buf4;/声明数码管显示字形缓冲数组buf0=segsn%10;/南北方向计时变量buf1=segsn/10%10;buf2=segew%10;buf3=segew/10%10;for(i=0;i4;i+)P3=wk;/输出位控P0=bufi;/依次输出段码delay(50);/延时wk=_crol_(wk,1);/位控左移一位P0=0 xff;/熄灭所有数 三、带数显的交通指示灯的设计int main()TMOD=0 x01;TH0=0 x3

12、c;TL0=0 xb0;EA=1;ET0=1;TR0=1;sn=40;ew=45;while(1)display();switch(s)三、带数显的交通指示灯的设计case 0:/状态一r1=1;y1=1;g1=0;r2=0;y2=1;g2=1;if(sn=255)/字符型数据0减1等255 sn=4;s=1;break;case 1:/状态二r1=1;y1=0;g1=1;r2=0;y2=1;g2=1;if(sn=255)三、带数显的交通指示灯的设计 sn=35;ew=30;s=2;break;case 2:/状态三r1=0;y1=1;g1=1;r2=1;y2=1;g2=0;if(ew=255

13、)ew=4;s=3;三、带数显的交通指示灯的设计break;case 3:/状态四r1=0;y1=1;g1=1;r2=1;y2=0;g2=1;if(ew=255)sn=40;ew=45;s=0;break;三、带数显的交通指示灯的设计void timer0()interrupt 1 TH0=0 x3c;TL0=0 xb0;count+;if(count=20)/1秒定时 count=0;sn-;ew-;四、数字时钟的设计1.技能要求技能要求数字时钟需要显示时、分、秒三个计时单位,每个计时单位有2位数字共需6个数码管,为显示美观和读取时间方便,在时、分、秒之间显示分隔符“-”,共用8个数码管,显

14、示格式如图6-6所示。另外,数字时钟还必须可以通过按键调整时间,为了调整的方便,本任务使用行列键盘,各按键定义如图6-7所示。图6-6 数字时钟数码管显示格式 1234577890设置四、数字时钟的设计2.仿真电路图仿真电路图 数字时钟电路如图6-8所示。显示电路采用8位数码管动态扫描显示,最高2位显示时,中间2位显示分,最低2位显示秒,时、分、秒之间用“-”隔开。调整时间时,按下“设置”键,小时数开始闪烁,表示设置小时数,第一次输入数字键调整十位,第二次输入数字键调整个位,再次按下“设置”键,分钟数开始闪烁,第一次输入数字键调整十位,第二次输入数字键调整个位,再次按下“设置”键,退出调整,数

15、码管不再闪烁。四、数字时钟的设计图6-8 数字时钟电路四、数字时钟的设计3.程序设计与调试程序设计与调试 程序的设计主要是利用单片机内部的定时/计数器产生1秒的定时,每经过1秒使秒数加1,加到60后向分钟数进位,分钟数达到60后向小时数进位,小时数达到24后全部变为0。数字时钟程序流程图如图6-9所示。(a)主程序(b)定时中断程序四、数字时钟的设计(c)键盘扫描处理程序四、数字时钟的设计根据流程图,编写参考程序如下:#include#include sbit key1=P16;sbit key2=P17;unsigned char count,count_f,sec,min,hour;/co

16、unt和count_f对中断次数计数,count控制秒/count_f控制数码管闪烁频率unsigned char set;/set对设置键计次,实现1个键多个功能bit flash_m,flash_h,ge_shi;/这3个位变量分别是分钟闪烁、小时闪烁和 /个位/十位调整切换的标志位unsigned char code tab=四、数字时钟的设计0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;delay(unsigned int j)while(j-);display()/显示子函数unsigned char i,wk

17、=0 x01;unsigned char buf8;buf0=tabsec%10;buf1=tabsec/10;四、数字时钟的设计buf2=0 xbf;if(flash_m)/分钟闪烁标志buf3=0 xff;buf4=0 xff;elsebuf3=tabmin%10;buf4=tabmin/10;buf5=0 xbf;if(flash_h)/小时闪烁标志buf6=0 xff;buf7=0 xff;四、数字时钟的设计elsebuf6=tabhour%10;buf7=tabhour/10;for(i=0;i=7;i+)P2=wk;P0=bufi;delay(100);wk=_crol_(wk,1

18、);P0=0 xff;unsigned char keypress()/按键识别子函数四、数字时钟的设计unsigned char temp,num;num=15;temp=0 xff;P1=0 xf0;if(P1!=0 xf0)/判断是否有按键按下delay(1000);/延时去抖if(P1!=0 xf0)/再次判断是否有按键按下P1=0 xf0;/行作输出,列作输入temp=P1;/读取列值四、数字时钟的设计P1=0 x0f;/列作输出,行作输入temp=temp|P1;/读取行值并和列值合并switch(temp)case 0 xee:num=1;break;case 0 xde:num

19、=2;break;case 0 xbe:num=3;break;case 0 xed:num=4;break;case 0 xdd:num=5;break;case 0 xbd:num=6;break;case 0 xeb:num=7;break;case 0 xdb:num=8;break;case 0 xbb:num=9;break;case 0 xe7:num=0;break;case 0 xd7:num=10;break;case 0 xb7:num=11;break;四、数字时钟的设计P1=0 xf0;while(P1!=0 xf0)display();return num;butt

20、on()/按键处理子函数unsigned char keyNum;keyNum=keypress();/返回按键号,带返回值的函数的应用if(keyNum23)hour=23;ge_shi=!ge_shi;elseif(keyNum3)四、数字时钟的设计hour=keyNum*10+hour%10;ge_shi=!ge_shi;if(set=2)/分钟数值调整if(ge_shi)min=min/10*10+keyNum;ge_shi=!ge_shi;else四、数字时钟的设计if(keyNum6)min=keyNum*10+min%10;ge_shi=!ge_shi;if(keyNum=11)

21、/按下的是设置键set=(set+1)%3;/每次加1实现1个键具备多个功能flash_m=0;/保证分钟不闪烁时是亮着的flash_h=0;/保证小时不闪烁时是亮着的ge_shi=0;/保证每次都是先调整十位再调整个位四、数字时钟的设计void init()/初始化函数TMOD=0 x01;TH0=0 x3c;TL0=0 xb0;EA=1;ET0=1;TR0=1;int main()/主函数init();四、数字时钟的设计while(1)display();button();void timer_0()interrupt 1/定时器0中断函数TH0=0 x3c;TL0=0 xb0;count

22、+;if(count=20)/1秒定时时间到count=0;sec+;四、数字时钟的设计if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=24)hour=0;四、数字时钟的设计count_f+;if(count_f=4)/控制数码管闪烁快慢 count_f=0;switch(set)case 1:flash_h=!flash_h;break;case 2:flash_m=!flash_m;break;技能应用二 定时器控制扬声器演奏音乐一、音调和节拍在项目二中我们已经学习了扬声器的接口电路,并通过延时程序完成叮咚门铃的设计制作。为了使单片机产

23、生的方波精确且易于控制,下面我们使用定时/计数器来产生所需频率的方波。在音乐中有两个非常重要的参数:音调和节拍。1音调音调声音频率的高低叫音调。音符1(DO)、2(RE)、3(MI)、4(FA)、5(SO)、6(LA)、7(SI)具有不同的音调。要让单片机发出不同的音符,只要让它发出不同频率的方波信号就可以了。一般采用单片机的定时器中断的方法来产生不同频率的方波信号。技能应用二 定时器控制扬声器演奏音乐例如,要产生中音1(DO),我们查得它的频率是523Hz。下面我们以12MHz晶振为例,来说明怎样让单片机发出中音1(DO)。DO的频率f=523Hz,其对应的周期为T=1/f=1/523=19

24、12s因此,需要单片机I/O口线输出周期为1912s的方波信号。因为每个周期包括半个周期的高电平和半个周期的低电平,这时只要定时器每隔半个周期(即19122=956s)中断一次让对应的I/O口线置反,就可以在相应的I/O口线上产生523Hz的方波,如果在该口线上接一个扬声器,该扬声器就发出中音1(DO)。技能应用二 定时器控制扬声器演奏音乐2节拍节拍节拍是衡量节奏的单位,在音乐中,有一定强弱分别的一系列拍子在每隔一定时间重复出现,如 2/4、4/4、3/4 拍等。,在一首乐曲中,每个音符演奏的时间不尽相同,比如,5为二、用定时器设计的叮咚门铃 1.技能要求技能要求用单片机内部的定时/计数器设计

25、一个叮咚门铃,当按下按键时,扬声器发出“叮咚”声。2.仿真电路图仿真电路图用定时器设计的叮咚门铃电路如图6-10所示。示波器用来观察P3.0口线的输出波形。技能应用二 定时器控制扬声器演奏音乐图6-10 用定时器设计的叮咚门铃电路技能应用二 定时器控制扬声器演奏音乐3.程序设计与调试程序设计与调试项目二中我们已经使用延时程序设计制作了叮咚门铃,叮咚门铃实际上是两个单音频声音的组合,先发出音频较高的声音,再发出音频较低的声音。本实例中先使用定时器在P3.0口线输出约714Hz的方波,然后再输出500Hz的方波,使扬声器发出“叮咚”的声音。用定时器设计的叮咚门铃参考程序如下:技能应用二 定时器控制

26、扬声器演奏音乐#include sbit k1=P17;sbit sp=P30;/扬声器unsigned int a=0;delay(unsigned int i)while(i-);int main()IE=0 x82;/开中断TMOD=0 x00;TH0=(8192-700)/32;技能应用二 定时器控制扬声器演奏音乐TL0=(8192-700)%32;while(1)k1=1;/作输入时须先写1if(k1=0)delay(1000);if(k1=0)TR0=1;while(k1=0);技能应用二 定时器控制扬声器演奏音乐void Timer0()interrupt 1 sp=!sp;a+

27、;if(a500)TH0=(8192-700)/32;/先高音,约714HzTL0=(8192-700)%32;else if(a1200)TH0=(8192-1000)/32;/后低音,500HzTL0=(8192-1000)%32;else TR0=0;a=0;技能应用二 定时器控制扬声器演奏音乐三、电子音乐盒的设计1.技能要求技能要求用单片机定时/计数器设计一个电子音乐盒,程序存储器中存放多首乐曲,当按下按键时,可以切换乐曲,同时数码管显示乐曲编号。2.仿真电路图仿真电路图电子音乐盒电路如图6-11所示。技能应用二 定时器控制扬声器演奏音乐图6-11 电子音乐盒电路技能应用二 定时器控制

28、扬声器演奏音乐3.程序设计与调试程序设计与调试通过音调和节拍的学习,我们知道,改变定时器初值及延时时间就可以演奏出不同的音符各种长度的节拍。本实例中,我们建立一个数组用于存放从低音4(FA)到高音5(SO)共16个音符所对应的定时器初值,而每个音符对应的节拍时间采用带参数的延时子函数实现,子函数的参数值对应不同的节拍时间。为了使程序具有通用性和便于修改,将每首乐谱的音符和节拍按照约定的规则进行编码,也存放在一个数组中,这样单片机就可以在程序的控制下,依次从数组中取出编码值,将音符逐个演奏出来。技能应用二 定时器控制扬声器演奏音乐程序设计时首先要解决的是乐曲以什么样的格式存入程序存储器。为了简便

29、和易于修改,采用定时器来产生不同的音调,建立一个数组(音符表)存放所有音符所对应的定时器初值,节拍时间采用带参数的延时子函数来实现。再针对每首乐曲建立一个数组,数组中的每两个数为一组代表一个音符,第1个数表示音调,相对于音符表的下标,第2个数表示节拍时间,相对于延时子函数的参数。比如对于如下乐曲:556517-祝 你生日快乐可以表示如下:1,2,1,2,2,4,1,4,4,4,3,8,其中1,2中的1表示音符表中下标为1的数组元素64260,即低音5(SO)的定时初值,2表示2个1/4拍。这时我们只需从乐曲表中依次取数演奏就可以了。每首乐曲以0 xff为结束标志。电子音乐盒程序流程图如图6-1

30、2所示。技能应用二 定时器控制扬声器演奏音乐(a)主程序流程图(b)定时器中断程序流程图技能应用二 定时器控制扬声器演奏音乐电子音乐盒的参考程序如下:#includesbit spk=P30;/接扬声器sbit key=P12;/接按键unsigned char i,index;unsigned char m_tone,m_time;unsigned char code seg=/共阳型数码管段码表0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;unsigned int code Tone=/音符表,从低音4到高音5641

31、03,64260,64400,64524,64580,64671,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217技能应用二 定时器控制扬声器演奏音乐;unsigned char code music1=/铃儿响叮当6,2,6,2,6,4,6,2,6,2,6,4,/3 3 3|3 3 3|6,2,8,2,4,3,5,1,6,8,/3 5 1.2|3-|7,2,7,2,7,3,7,1,7,2,6,2,6,2,6,1,6,1,6,2,5,2,5,2,4,2,5,4,8,4,6,2,6,2,6,4,6,2,6,2,6,4,6,2,

32、8,2,4,3,5,1,6,8,7,2,7,2,7,3,7,1,7,2,6,2,6,2,6,1,6,1,8,2,8,2,7,2,5,2,4,6,0 xff;unsigned char code music2=/祝你生日快乐技能应用二 定时器控制扬声器演奏音乐1,2,1,2,2,4,1,4,4,4,3,8,1,2,1,2,2,4,1,4,5,4,4,8,1,2,1,2,8,4,6,4,4,4,3,4,2,4,7,2,7,2,6,4,4,4,5,4,4,8,0 xff;unsigned char code music3=/两只老虎4,4,5,4,6,4,4,4,4,4,5,4,6,4,4,4,6,

33、4,7,4,8,8,6,4,7,4,8,8,8,3,9,1,8,3,7,1,6,4,4,4,8,3,9,1,8,3,7,1,6,4,4,4,4,4,1,4,4,8,4,4,1,4,4,8,0 xff;技能应用二 定时器控制扬声器演奏音乐void delayMS(unsigned int ms)unsigned char t;while(ms-)for(t=0;t120;t+);void key_press()/按键子函数if(key=0)delayMS(100);if(key=0)技能应用二 定时器控制扬声器演奏音乐i=0;index=(index+1)%4;P0=segindex;/数码管显

34、示乐谱编号while(!key);int main()/主程序TMOD=0 x01;EA=1;ET0=1;P0=segindex;/初始显示数字0技能应用二 定时器控制扬声器演奏音乐while(1)key_press();switch(index)case 0:ET0=0;break;case 1:ET0=1;m_tone=music1i;m_time=music1i+1;break;case 2:m_tone=music2i;m_time=music2i+1;break;case 3:m_tone=music3i;m_time=music3i+1;break;if(m_tone=0 xff)

35、/到达乐曲结尾i=0;delayMS(2000);/停止一段时间再继续播放continue;技能应用二 定时器控制扬声器演奏音乐TR0=1;delayMS(m_time*105);/节拍时间TR0=0;i+=2;/因为每次取两个数,所以加2delayMS(5);/延时是为了区分开连续两个相同音符void time0()interrupt 1TH0=Tonem_tone/256;/音调定时初值TL0=Tonem_tone%256;spk=!spk;项目基本知识知识链接一 MCS-51单片机的定时/计数器在工业控制与民用电子领域中,经常需要用到定时或延时控制或对某些外部事件进行计数等,如果这些控制

36、都采用软件方式,则势必影响单片机的实时控制,因此,为了适应控制领域的这一要求,单片机内部都集成了定时/计数器。一、定时/计数器的结构及工作原理MCS-51单片机内部集成了两个16位的定时/计数器,即T0和T1。从名称上就可以看出来,它们既具有计数功能又具有定时功能,通过设置与它们相关的特殊功能寄存器可以选择工作在定时功能或计数功能。定时/计数器的实质是计数器,它的功能是能对输入脉冲按照一定规律进行计数。如果输入脉冲的周期是固定的,即计数脉冲的时间间隔相等,那么计数值就代表了时间,从而可以实现定时。项目基本知识 如同往一个水瓶里滴水一样,水瓶的容量是有限的,不能无限制地往水瓶里滴水,水瓶满了以后

37、,再往水瓶里滴水就会溢出,单片机中的计数器也是如此,T0和T1都是16位的计数器,它的容量也是有限的,其计数的最大值为65535(即二进制数1111 1111 1111 1111B),此时,再输入一个计数脉冲则计满溢出,将对应的溢出标志位置1,这个标志位就是定时器中断标志位,就会向CPU发出中断申请。MCS-51单片机的定时/计数器的结构如图6-13所示。图6-13 定时/计数器的结构框图(x=0或x=1)项目基本知识图6-13 定时/计数器的结构框图(x=0或x=1)项目基本知识 由图6-13可知,定时/计数器的核心是1个加1计数器,它的输入脉冲有两个来源:一个是外部脉冲信号,通过T0(P3

38、.4)脚或T1(P3.5)输入;另一个是系统时钟脉冲(时钟振荡器经12分频以后的脉冲信号)。计数器对两个脉冲源之一进行计数,每输入1个脉冲,计数值加1,TH0(或TH1)和TL0(或TL1)是用来存放所计脉冲个数的寄存器。当计数器计满回0后,就从最高位溢出1个脉冲,使特殊功能寄存器TCON中的TF0或TF1置1,作为定时/计数器的溢出中断标志。如果定时/计数器工作在定时功能,则表示定时的时间到;若工作在计数功能,则表示计数器计满回零。项目基本知识 当定时/计数器处于定时功能,加1计数器在每个机器周期加1,因此,也可以把它看作在累计机器周期。由于每个机器周期时间恒定不变,计数值也就代表了时间,这

39、样就把定时问题转化成了计数问题。比如12MHz晶振机器周期是1s,计5000个脉冲就是5000s,16位定时/计数器的最大定时时间就是65536s。如果定时少于65536s,怎么为呢?这就好比一个空的水瓶,要滴1万滴水才会滴满溢出,我们在开始滴水之前先放入一些水,就不需要1万滴了。比如先放入2000滴,再滴8000滴就可以把瓶子滴满。在单片机中,也采用类似的方法,称为预置计数初值法。如果要定时5000s,可以让计数器从65536-5000=60536开始计数,当定时/计数器溢出时正好就是5000s,所以计数初值就是60536。项目基本知识 当定时/计数器处于计数功能时,外部脉冲信号加在T0(P

40、3.4)脚或T1(P3.5)脚。外部信号的下降沿将触发计数,若一个周期的采样值为1,下1个周期的采样值为0,则计数器加1,故识别一个脉冲需要2个机器周期,所以对外部输入信号的最高计数速率是机器周期所对应频率的1/2(晶振频率的1/24)。图6-13中有2个模拟的位开关,前者决定了定时/计数器的功能:当开关处于上方时为定时功能,处于下方时为计数功能。工作状态的选择由特殊功能寄存器TMOD的位来决定。后1个模拟开关受控制信号的控制,它决定了脉冲是否加到计数器输入端,即决定了加1计数器的运行与关闭。项目基本知识 对于定时/计数器的功能,可以形象的表示为如图6-14所示。即对内部时钟脉冲计数就是定时功

41、能,对外部输入脉冲计数就是计数功能。图6-14 定时/计数器功能示意图项目基本知识二、定时/计数器的方式和控制寄存器MCS-51单片机有2个用于定时/计数器方式和控制的寄存器,分别是TMOD和TCON:TMOD用于计数脉冲源的选择(即决定其工作于计数功能或定时功能)、设置工作方式;TCON用于控制定时/计数器的启动和停止,并包含了定时/计数器的状态。1定时器工作方式寄存器定时器工作方式寄存器TMODTMOD用于选择定时器的工作方式,它的低4位控制定时器T1,高4位控制定时器T0。单片机复位时,TMOD的全部位均被清0。TMOD中各位的定义如表6-3所示。项目基本知识TMOD位D7D6D5D4D

42、3D2D1D0位名称GATEM1M0GATEM1M0功能门控位功能选择工作方式选择门控位功能选择工作方式选择高高4位控制定位控制定时时/计计数器数器1低低4位控制定位控制定时时/计计数器数器0项目基本知识TMOD各位含义如下:M1和和M0:工作方式选择位,其具体定义方式如表6-4所示。M1 M0工作方式功能说明0 0方式013位定时/计数器0 1方式116位定时/计数器1 0方式2可自动重装入的8位定时/计数器1 1方式3T0分为2个8位定时器,T1无此方式表6-4 定时/计数器工作方式选择项目基本知识 :功能选择位。=0时,设置为定时器,对内部时钟脉冲计数;=1时,设置为计数器,对外部输入脉

43、冲计数。GATE:门控位。当GATE=0时,定时/计数器的启动和停止仅受TCON寄存器中的TR0(或TR1)控制;当GATE=1时,定时/计数器的启动和停止由TCON寄存器中的TR0(或TR1)和外部中断引脚(INT0或INT1)上的电平状态共同控制。2定时器控制寄存器定时器控制寄存器TCONTCON控制寄存器在项目五中已经介绍过,其中和定时/计数器相关的位如下:TR0:定时/计数器0(T0)的启动/停止控制位。当TR0=1时,T0启动计数;当TR0=0时,T0停止计数。TF0:定时/计数器0(T0)的溢出中断标志位。当定时/计数器0计满溢出时,由硬件自动将TF0置1,表示向CPU发出中断请求

44、,当CPU响应该中断进入中断服务程序后,由硬件自动将该位清0,不需用专门的语句将该位清0。项目基本知识TR1:定时/计数器1(T1)的启动/停止控制位。其功能及使用方法同TR0。TF1:定时/计数器1(T1)的溢出中断标志位。其功能及使用方法同TF0。三、定时/计数器的工作方式MCS-51单片机的定时/定时计数器有4种工作方式,分别由TMOD寄存器中的M1、M0两位的二进制编码所决定。1工作方式工作方式0(M1M0=00)T0和T1的工作方式0是完全相同的,都是作为13位的定时/计数器来使用的,由THx(x=0,1)的8位和TLx的低5位构成,TLx的高3位未用,定时/计数器T0的电路结构如图

45、6-15所示。TLx的低5位产生进位时,直接进到THx上。THx产生进位时,即计满溢出,置计满溢出标志位TFx为1,向CPU申请中断,若CPU响应中断,由系统硬件自动将TFx清0。在工作方式0下,两个定时/计数器的最大计数值为213=8192,最长定时时间是8192个机器周期。项目基本知识图6-15 定时/计数器T0方式0的逻辑电路结构图项目基本知识我们用这个图来说明几个问题:M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的。:定时/计数器即可作定时用也可用计数用,如果为0就是用作定时器,如果为1就是用作计数器。GATE:在图6-15中,当我们选择了定时或计数工作方式后,定时/

46、计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去。GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT0无关,在这种情况下,开关的断开、闭合只取决于TR0,只要TR0是1,开关就闭合,计数脉冲得以畅通无阻,而如果TR0等于0则开关断开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR0。项目基本知识GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR0来控制,而且还要受到INT0引脚的控制,只有TR0为1,且INT0引脚也是高电平,开关才合上,计数脉冲才得以通过。2工作方式工作方式1(M1M0=

47、01)T0和T1的工作方式1也是完全相同的,都是作为16位的定时/计数器来使用的,定时/计数器的低8位产生进位时进到高8位上。高8位产生进位时,即计满溢出,置计满溢出标志位TFx(x=0,1)为1,向CPU申请中断,若CPU响应中断,由系统硬件自动将TFx复位。在工作方式1下,两个定时/计数器的最大计数为216=65536,最长定时时间为65536个机器周期。其逻辑结构如图6-16所示。项目基本知识 图6-16 定时/计数器T0方式0的逻辑电路结构图项目基本知识3工作方式工作方式2(M1M0=10)T0和T1在工作方式2下都是作为8位的定时/计数器来使用的,定时/计数器的低8位负责计数。高8位

48、不参与计数,只作为计数初始值寄存器,存放低8位的初始值。每当低8位计满溢出时,直接将计满溢出标志位TFx(x=0,1)为1,与此同时,硬件自动将高8位中存放的计数初始值加载至低8位中,所以方式2又叫自动重装载方式。其逻辑结构图如图6-17所示。在工作方式2下,由于只有低8位参与计数,故最大计数为28=256,最长定时时间为256个机器周期。虽然定时时间缩短了,但由于能够自动加载初始值,故定时时间更为精确。项目基本知识4工作方式工作方式3(M1M0=11)只有T0有方式3,T1在方式3下停止工作。此时T0被分为两个独立的8位定时/计数器来使用。在方式3下,TL0作为不能自动重载初始值的8位定时/

49、计数器来使用,其计数初始值仍需在程序中用相应赋值语句加载;此时,TL0既可以用作定时功能,也可以用作计数功能,由原来控制T0的位来选择;TL0的启动部分仍然由原来控制T0的GATE、TR0、的逻辑组合来控制,启动与停止过程与前面三种工作方式相同;当TL0计满溢出时,直接将TF0置位从而向CPU申请中断,CPU响应中断后,由系统硬件自动将TF0复位;此时,TL0的中断服务程序入口地址即为原来T0的中断服务程序入口地址,中断序号也同样使用T0的中断序号(1)。项目基本知识 当T0工作在方式3时,T1可以工作在方式0、1、2三种工作方式下,但由于TH0占用了原来T1的启动控制位TR1和溢出标志位TF

50、1,所以T1的工作过程与前述有所变化。在这种情况下,T1仍然既可以工作在定时功能,又可以工作在计数功能,但计满溢出时不能置位溢出标志,不能申请中断,其计满溢出信号可以送给串行口,此时T1作为波特率发生器。T1的启动与停止由其原来的方式字控制,当写入“方式0/1/2”时,T1即启动,当写入“方式3”时,T1即停止工作。四、定时四、定时/计数器应用举例计数器应用举例 和定时/计数器相关的寄存器是TMOD、TCON、IE和IP,另外还有计数寄存器THx(x=0,1)和TLx。使用定时/计数器主要包括初始化和编写中断服务程序。项目基本知识初始化主要包括:确定工作模式和工作方式(对TMOD赋值);预置定

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁