(完整版)单片机原理及应用——基于Proteus和Keil_C林立_张俊亮版课后习题答案一至七章 下载本文

P0=0; while(1); }

第6章 单片机的定时器/计数器 习题

1.MCS-51系列的8051单片机内有几个定时/计数器?每个定时/计数器有几种工作方式?如何选择?

答:MCS-51系列的8051单片机内有2个定时/计数器,即T0和T1,每个都可以编程为定时器或计数器,T0有四种工作方式(方式0—13位、方式1—16位、方式2-可自动装入初值的8位、方式3-两个8位),T1有三种工作方式(与T0相同的前三种),通过对TMOD的设置选择,其高四位选择T1,低四位选择T0。 2.如果采用的晶振频率为3MHz,定时/计数器TO分别工作在方式0、1和2下,其最大的定时时间各为多少?

答:如果采用的晶振频率为3MHz,机器周期为12×1/(3*106)=4us,由于定时/计数器TO工作在方式0、1和2时,其最大的计数次数为8192、65536和256所以,其最大定时时间分别是:方式0为8192×4us=32.768ms、方式1为65536×4us=262.144ms、方式2为256×4us=1024us。

3.定时/计数器TO作为计数器使用时,其计数频率不能超过晶振频率的多少? 答:由于定时/计数器TO作为计数器使用时,是对外部引脚输入的脉冲进行计数, CPU在每个机器周期采样一次引脚,当前一次采样为高电平,后一次采样为低电平,则为一次有效计数脉冲,所以如果晶振频率为fosc,则其采样频率fosc/12,两次采样才能决定一次计数有效,所以计数频率不能超过fosc/24。 4.简单说明定时/计数器在不同工作模式下的特点。

答:方式0为13位的定时/计数器,由THx的8位和TLx的低5位构成、方式1为16位的定时/计数器,由THx的8位和TLx的8位构成,方式2为8位的定时/计数器,TLx为加1计数器,THx为计数初值寄存器。方式3只能用于T0,是将T0的低8位用作一个独立的定时/计数器,而高8位的TH0用作一个独立的定时器,并借用T1的TR1和TF1作为高8位定时器的启停控制位和溢出标志位。 5.定时器工作在方式2时有何特点?适用于什么应用场合? 答:定时器工作在方式2时是一个可自动装入时间常数初值的8位定时/计数器,TLx为加1计数器,THx为计数初值寄存器。由于其恢复初值由硬件自动完成,所以当需要反复计数时,用方式2可以方便地实现精确的定时。

6.一个定时器的定时时间有限,如何采用两个定时器的串行定时来实现较长时间的定时? 答:一个定时器的定时时间有限,可采用两个定时器的串行定时来实现较长时间的定时,比如,当fosc=12MHz时,单个定时/计数器采用方式1的最大定时时间为65.536ms,此时若用另一个定时/计数器按方式1进行溢出次数计数,在定时器溢出中断时,给计数器发一个计数脉冲,且两者均为方式一,则两者串行可达到的定时时间为65536×65.536ms=4294967.296ms。

7.设MCS-51单片机的晶振频率为12MHz,请编程使P1.O端输出频率为20kHz的方波。 解:fosc = 12MHz,所以机器周期为1us。20kHz的方波周期为1/(20×1000)=50us,方波即高电平和低电平和时间相等,所以只需设一个定时器定时25us将P1.O

25

求反一次即可。由于题目没有规定,所以可以用查询方式,也可以用中断方式进行编程实现。

方法一:采用查询方式实现 #include

sbit P1_0=P1^0;//定义输出引脚变量 void main(){ P1_0=0; //输出初值为0 TMOD=0x02; //T0方式2定时

TH0=256-25; //计25次,计数初值为模256减25 TL0=TH0;

TR0=1; //启动T0 while(1) //无限循环

if(TF0){ //查询T0溢出标志 TF0=0; //溢出标志复位 P1_0=!P1_0; //输出求反 } }

方法二:采用中断方式实现 #include

sbit P1_0=P1^0; //定义输出引脚变量 void main(){ P1_0=0; //输出初值为0 TMOD=0x02; //T0方式2定时

TH0=256-25; //计25次,计数初值为模256减25 TL0=TH0; IE=0x82; //允许CPU响应中断,允许T0发中断请求 TR0=1; //启动T0

for(;;){} //无限循环等待中断 }

timer0()interrupt 1 using 1{ P1_0=!P1_0; //输出求反 }

8.采用定时/计数器TO对外部脉冲进行计数,每计数10O个脉冲,TO切换为定时工作方式。定时1ms后,又转为计数方式,如此循环不止。假定MCS-5l单片机的晶体振荡器的频率为6MHz,要求T0工作在方式1状态,请编写出相应程序。 解:晶体振荡器的频率为6MHz,则机器周期为12×1/(6*106)= 2us, 要定时1ms,需计数次数为1000/2=500次 #include sbit P1_0=P1^0; void main(){ while(1){

TMOD=0x05;//T0计数,方式一

TH0=(65536-100)/256;//计数100次 TL0=(65536-100)%6;

26

TR0=1;

while(!TF0);//等待计数100次的溢出 TF0=0; //溢出标志复位 TMOD=0x01;//T0定时,方式一

TH0=(65536-500)/256;//计数100次 TL0=(65536-500)%6;

TR0=1; //启动T0

while(!TF0); //等待定时时间到1ms的溢出 TF0=0; //溢出标志复位 } }

9.设单片机的fosc = 12MHz,使P1.O和P1.1分别输出周期为1ms和lOms的方波,请用定时器TO方式2编程实现。 解:fosc = 12MHz,所以机器周期为1us。 要使P1.0输出周期为1000us的方波,可以通过定时中断方式实现,定时时间为250us,定时计数2次来实现,对P1.0求反即可。 要使P1.1输出周期为10ms的方波,也可以通过定时中断方式实现,定时时间为5ms,当时间到时,对P1.1求反即可。由于5ms/250us=20,所以也可以通过对250us的定时计数20次来实现。程序如下: #include

sbit P1_0=P1^0;//输出周期为400us的方波的引脚 sbit P1_1=P1^1; //输出周期为10ms的方波的引脚

unsigned char num1=0,num2=0;//中断次数计数器,初值为0 void main(){

P1_0=0; //输出初值为0 P1_1=0; //输出初值为0 TMOD=0x02; //T0方式2定时

TH0=256-250;//计200次,计数初值为模256减200 TL0=TH0; IE=0x82; //允许CPU响应中断,允许T0发中断请求 TR0=1; //启动T0

for(;;){} //无限循环等待中断 }

void timer0()interrupt 1 using 1{ num1++;num2++; //中断次数加1 if(num1==2) // 中断次数达到2次 { P1_0=!P1_0; //输出P1_0求反

num1=0; //中断次数复位为0 }

if(num2==20){ // 中断次数达到20次 num2=0; //中断次数复位为0 P1_1=!P1_1; //输出P1_1求反 } }

27

10.编写程序,要求使用TO,采用方式2定时,在P1.0输出周期为400us占空比为10:1的矩形脉冲。

解:设fosc = 12MHz,则机器周期为1us。设P1.0初值为0。

周期为400us,可定义方式2定时,计数初值为256-40,一个周期中断10次为400us,在中断计数为1和2(或任意两次计数之间)时,对P1.0求反即可。 #include

sbit P1_0=P1^0; //输出周期引脚

unsigned char cnt=0; //中断次数计数器,初值为0 void main(){ P1_0=0; //输出初值为0 TMOD=0x02; //T0方式2定时

TH0=256-40; //计40次,计数初值为模256减40 TL0=TH0;

IE=0x82; //允许CPU响应中断,允许T0发中断请求 TR0=1; //启动T0

for(;;){} //无限循环等待中断 }

void timer0()interrupt 1 using 1{ cnt++;//中断次数加1

if(cnt==1||cnt==2) P1_0=!P1_0; //中断次数为1或2时对输出引脚求反 if(cnt==10)cnt=0; //中断次数达到10时复位为0 }

第七章

7.1. 什么事串行异步通信?在串行异步通信中,数据帧的传输格式是什么?含义如何? 答:串行异步通信是指在串行通信中发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。

数据帧的传输格式:起始位,数据位,奇偶校验位和停止位 含义:起始位用于实现发送和接收双方设备之间的同步;数据位包含所要传输的信息;奇偶校验位用于判断接收数据的正确性;停止位表示一帧数据发送结束,开始下一帧数据的传输。

7.3. 89C51单片机串行通信接口控制寄存器有几个?每个寄存器的含义是什么?

答: 有电源控制寄存器PCON和串行口控制寄存器SCON PCON中SMOD与串口通信有关。

SMOD=0; 串口方式1,2,3时,波特率正常。 SMOD=1; 串口方式1,2,3时,波特率加倍 其余与串行通信无关 SCON中

SM0、SM1:串行口工作方式控制位

28