单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第6章定时器计数器习题答案_第1页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第6章定时器计数器习题答案_第2页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第6章定时器计数器习题答案_第3页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第6章定时器计数器习题答案_第4页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第6章定时器计数器习题答案_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章定时器/计数器习题答案一、填空题1.T0/T1作为计数器使用时,T0对引脚的外部脉冲进行计数,T1对引脚的外部脉冲进行计数。答:P3.4P3.52.如果采用晶振的频率为12MHz,T0/T1方式1的最大定时时间为,方式2的最大定时时间为。答:65536us,256µs3.T0/T1作为定时器使用时,对进行计数。答:系统晶振的12分频信号(机器周期)4.T0/T1作为计数器模式时,外部输入脉冲的最高频率为系统晶振频率的。答:1/245.晶振频率为12MHz,T0方式1产生1ms定时,则(TH0)=,(TL0)=。答:(65536-1000)/256(65536-1000)%2566.晶振频率为12MHz,T1的方式2定时100us,则(TH1)=,(TL1)=。答:256-100=0x9C0x9C7.定时器T2有3种工作方式:、和,可通过对寄存器中的相关位进行软件设置来选择。答:捕捉,重新装载(增计数或减计数),波特率发生器,T2CON8.占空比是指在一个周期内,信号处于的时间占据整个信号周期的百分比。答:高电平9.PWM技术是技术,通过改变脉冲的宽度进行调制,也就是通过调节占空比来调节信号、能量等的变化。答:脉冲宽度调制10.T2的捕捉方式就是及时“捕捉”变化,例如信号发生的跳变。常用于精确测量输入信号的脉宽或周期等。答:输入信号在某一瞬间的二、选择题1.定时器T1有种工作方式。A.1种 B.2种C.3种 D.4种

答:C2.定时器T0/T1工作于方式1时,其计数器为位。A.8位B.16位C.14位D.13位答:B3.T0定时溢出时,位由硬件自动置1。A.TR0B.TF0C.ET0D.PT0答:B4.定时器T0的GATE=1计数器是否计数的条件。A.仅取决于TR0状态B.仅取决于GATE位状态C.是由TR0和INT0两个条件共同控制D.仅取决于INT0的状态答:C5.T1计数计满溢出时,溢出标志位(TF1)=。A.0B.1C.0xffD.0x00答:B6.采用T1方式2,计满250次溢出,则(TH1)和(TL1)的初值为。A.0x06,0x06B.0xff,0x06C.0x06,0xffD.0x00,0x06答:A7.T0方式1是计数器。A.16位加1B.16位减1C.8位加1D.8位减1答:A8.T2作为波特率发生器使用时,对进行计数。A.晶振频率的12分频信号B.晶振频率的2分频信号C.晶振频率的24分频信号D.机器周期答:B9.T2作为捕捉方式,则位是“捕捉”或“自动重新装载”选择位。A.

C/T2B.CP/RL2C.答:B10.T2工作在16位自动重载方式时,T2既可以增1计数,也可实现减1计数,取决于。A.T2引脚的负跳变B.T2引脚的正跳变C.T2EX引脚的负跳变D.T2EX引脚的正跳变答:C三、问答题1.一个定时器的定时时间有限,如何用两个定时器的串行定时来实现较长时间的定时?答:方法1,在第一个定时器的中断程序里关闭本定时器的中断程序,设置和打开另一个定时器;在另一个定时器的中断程序中关闭本定时中断,设置和打开另一个定时器。这种方式的定时时间为两个定时器定时时间的和。方法2,一个作为定时器,在定时中断后产生一个外部计数脉冲(比如由P1.0接产生),另一个定时器工作在计数方式。这样两个定时器的定时时间为一个定时器的定时时间乘以另一个定时器的计数值。2.说明T0/T1溢出中断标志位TF0/TF1的撤销方法。答:采用中断方式,则有硬件自动撤销;采用查询方式,则由软件撤销。3.对T0/T1溢出断标志位TF0/TF1的检测方法有哪些?各有什么优缺点?答:可以采用中断方式,也可采用查询方式。中断方式快速实时性好,CPU执行效率高,但编程复杂。查询方式编程简单,但需要采用软件的方式不断查询标志位,CPU执行效率低。四、仿真练习1.基本要求:利用T1方式1控制发出1kHz的音频信号,采用虚拟示波器查看波形。答:1.硬件电路设计2.软件设计#include<reg52.h> //头文件reg52.hsbitP20=P2^0; //定义特殊功能寄存器P2的位变量P2.0voidT1_init();//定时器T1初始化/*************主函数************/voidmain(void) //主程序{ T1_init(); while(1) { while(TF1==0);TH1=(65536-500)/256;//重赋初值TL1=(65536-500)%256;//重赋初值 P20=!P20; //P2.0状态求反 TF1=0; //TF0标志清零 }}/**********定时器T1初始化*********/voidT1_init(){TMOD=0x10; //设置T0为方式1TH1=(65536-500)/256;//置T0高8位初值TL1=(65536-500)%256;//置T0低8位初值 TR1=1; //启动T0TF1=0;}仿真运行2.基本要求:利用T0采用方式2在P2.0引脚输出周期为1ms,占空比为80%的矩形脉冲。答:1.硬件电路设计2.软件设计#include<reg52.h> //头文件reg52.h#defineucharunsignedchar#defineuintunsignedintsbitPWM=P2^0; //定义特殊功能寄存器P2的位变量P2.0uintflag;voidT0_init();//定时器T0初始化/*************主函数************/voidmain(void) //主程序{ T0_init(); while(1) { }}/**********定时器T0初始化*********/voidT0_init(){TMOD=0x02; //设置T0为方式2TH0=156; //置T0高8位初值TL0=156; //置T0低8位初值 TR0=1; //启动T0ET0=1; //开T0中断EA=1; //开总中断}voidpwm()interrupt1{ TH0=156; TL0=156; //定时100us flag++; if(flag==10) flag=0; if(flag<8) PWM=1; else PWM=0; }3.仿真运行3.扩展要求:测量脉冲信号的频率,并在LCD1602上显示。答:1.硬件电路设计2.软件设计#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitlcdrs=P1^0;//LCD1602液晶显示器数据/命令选择端口sbitlcdrw=P1^1;//LCD1602液晶显示器读/写选择端口sbitlcden=P1^2;//LCD1602液晶显示器使能端口 sbitP3_3=P3^3; //INT1测量脉冲输入引脚定义voiddelay(uintdat);//延时程序voidlcd_init();//lcd初始化voidwrite_cmd(charcmd);//写指令函数voidwrite_data(uchardat);//写数据函数voidwrite_str(uchar*str);//写字符串函数voiddisplay(uintdate);//显示uintWidth_num,Freq;//脉冲的宽度,T1的计数值/*****主函数******/voidmain(){ lcd_init();//LCD初始化 write_cmd(0x82);//在LCD1602第一行第2个位置显示write_str("Frequency:"); //显示Frequency: write_cmd(0xcb);//在LCD1602第二行第11个位置显示write_str("Hz"); //显示Hz while(1) { TMOD=0x90; //T1方式1、定时、GATE=1TH1=0; //向定时器T1写入计数初值0TL1=0;while(P3_3==1);//等待INT1引脚输入变低TR1=1; //如果INT1为低,TR1=1,等待INT1变高启动T1while(P3_3==0);//等待INT1变高,INT1变高,硬启动条件满足,T1计数开始while(P3_3==1);//等待INT1变低,变低后T1停止计数TR1=0; //复位TR1 Width_num=TH1*256+TL1;//计算T1计数值,即脉冲宽度 Freq=1000000/(2*Width_num); //跟据公式算出脉冲宽度与频率关系 display(Freq); //显示频率}}/*****延时程序******/voiddelay(uintdat){uinti,j;for(j=dat;j>0;j--) for(i=110;i>0;i--);}/********************1602初始化***************/voidlcd_init(){lcdrw=0; lcden=0; write_cmd(0x38); //显示模式设置 write_cmd(0x0c); //显示开关,光标关闭 write_cmd(0x06); //显示光标移动设置 write_cmd(0x01); //清除屏幕}/***************写指令函数*****************/voidwrite_cmd(ucharcmd){ lcdrs=0; //RS拉低 P2=cmd; //P0口写入指令 delay(1); lcden=1; delay(1); lcden=0;}/***************写数据函数*****************/voidwrite_data(uchardat){ lcdrs=1; //RS拉高 P2=dat; //P0口写入数据 delay(1); lcden=1; delay(1); lcden=0;}/***************写字符串函数*****************/voidwrite_str(uchar*str)//{ while(*str!='\0')//字符串写完之前,一直进行写入操作 { write_data(*str++); delay(1); }}/***************显示函数*****************/voiddisplay(uintdate){ucharwidth[7]; width[0]=date/10000+0x30;//分离十万位,转换为ASCII width[1]=date%100000/10000+0x30;//分离万位,转换为ASCII width[2]=date%10000/1000+0x30;//分离千位,转换为ASCII width[3]=date%1000/100+0x30;//分离百位,转换为ASCII width[4]=date%100/10+0x30;//分离十位,转换为ASCII width[5]=date%10+0x30; //分离个万位,转换为ASCII width[6]='\0'; //数组末尾填加字符串结束的标志 write_cmd(0xc5);//在LCD第2行第5个位置写入 write_str(width);//将脉冲宽度转换为字符数组写入LCD}3.仿真运行4.扩展要求:采用T2实现秒表,按下按键1启动秒表计时并在数码管(共阳)显示,按下按键2停止秒表计时,显示当前值。再按下按键1则从0开始计时,重复上述过程。计时范围00~59s,如果计时到59s,将重新开始从0计时。系统晶振为12MHz。答:1.硬件电路设计2.软件设计#include<reg52.h> //头文件reg52.h#defineucharunsignedchar#defineuintunsignedintsfrT2MOD=0xc9;//reg52.h中没有定义T2MODvoidT2_init();//定时器T2初始化unsignedintcount,shi,ge,aa,temp=0,x,y,z,flag=0;sbitkey1=P1^6;sbitkey2=P1^7; ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳0-9段码voiddelay(uintz) //延时1ms{ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddisplay0()//数码管显示函数{ P0=0x02;//根据接口片选十位 P2=table[shi];//十位显示 delay(1); P2=0xff;//全部熄灭数码管,防止重影 P0=0x01;//根据接口片选个位 P2=table[ge];//个位显示 delay(1); P2=0xff;//全部熄灭数码管,防止重影}/*************主函数************/voidmain(void) {T2_init();//T2初始化while(1)//死循环 { display0(); if(key1==0&&flag==0)//key1按下中断开,开始计时,启动秒表 { delay(2); if(key1==0&&flag==0) { TR2=1; } } if(key2==0)//key2按下中断关,停止计时,停止秒表 { delay(2); if(key2==0) { TR2=0; flag=1; } } if(key1==0&&flag==1)//key1再次按下,秒表归零,从新计时 { delay(2); if(key1==0&&flag==1) { temp=0; shi=0; ge=0; flag=0; } } if(shi==6&&ge==0)//计时到60秒,清零 { temp=0; shi=0; ge=0; }}}/**********定时器T2初始化*********/voidT2_init(){RCLK=0;//T2不用作波特率发生器接收时钟使用TCLK=0;//T2不用作波特率发生器发送时钟使用CP_RL2=0;//T2捕捉/自动重装载选择位=0(自动重装载)=1(捕捉)EXEN2=0;//=0(T2计满溢出触发自动重装)//=1(T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论