《单片机原理及应用》课后习题(3)

2019-04-22 16:46

解:

#include %unsigned char i=0x01; void main() {

EX1=1; EA=1; for(;;) {

P1=i; } }

void int1() interrupt 2 {

if(i<0x80) i=i*2; else i=0x01; }

习题6

2.MCS-51定时/计数器的定时功能和计数功能有什么不同?分别应用在什么场合下? 答:

定时器主要完成系统运行过程中的定时功能,而计数器主要用于对外部事件的计数。此外,定时器/计数器还可作为串行通信中波特率发生器。

3.简述MCS-51单片机定时/计数器四种工作方式的特点、如何选择和设定? 答:四种工作方式的选择是通过设定工作方式寄存器TMOD中的M1M0两位来完成的。 1) 当MlM0=00时,定时/计数器工作于方式0,构成一个13位定时器/计数器。 2) 当M1M0=01时,定时/计数器工作于方式1,构成一个16位定时器/计数器。方

式1与方式0的区别在于方式0是13位计数器

3) 当M1M0=10时,定时/计数器工作于方式2,在方式2情况下,定时/计数器为

8位,能自动恢复定时/计数器初值。在方式0、方式1时,定时/计数器的初值不能自动恢复,计满后若要恢复原来的初值.须在程序指令中重新给TH0、TL0赋值,这不仅导致编程麻烦,而且影响定时时间精度。但方式2时与方式0、方式1不同,方式2具有初值自动装入功能。

4) 当M1M2=11时,定时/计数器处于工作方式3,但方式3 仅适用于T0,T1无方式

3。方式3时,定时器T0被分解成两个独立的8位计数器TL0和TH0。

11

5.定时/计数器初始化包括哪些步骤? 答:初始化步骤如下:

(1) 根据设计要求先给工作方式寄存器TMOD送一个方式控制字,以设定定时/计数器相应的工作方式。

(2) 根据实际需要给定时/计数器选送定时器初值或计数器初值,以确定需要定时的时间和需要计数的初值。

(3) 根据需要给中断允许寄存器IE选送中断控制字,并给中断优先级寄存器IP选送中断优先级字,以开放相应中断并设定中断优先级。

(4) 给控制寄存器TCON送命令字,以便启动或禁止定时器/计数器的运行。

6.已知单片机时钟频率fosc=12MHz,当要求定时时间为2ms或5ms,定时器分别工作在方式0、方式1和方式2时,定时器计数初值各是多少?

解:因为单片机时钟频率fosc=12MHz,所以机器周期Tcy=12/fosc=1us,根据初值公式

Count=2n-Td/Tcy 得

1)Td=2ms=2000us时:

方式0时 Count=213-2000us/1us=8192-2000=6192

方式1时 Count=216-2000us/1us=65536-2000=63536=F830H,即TH0=F8H,TL0=30H TH0=-2000/256;TL0=-2000%6; 方式2时 ,单次溢出最长只能延时256us,因此可设定每次溢出延时200us,累计10次溢出即可得2ms,因此设定初值可设置为

Count=28-200us/1us=256-200=56=38H,即TH0=38H,TL0=38H 2)Td=5ms=5000us时:

方式0时 Count=213-5000us/1us=8192-5000=3192

方式1时 Count=216-5000us/1us=65536-5000=60536=EC78H,即TH0=ECH,TL0=78H TH0=-5000/256;TL0=-5000%6; 方式2时 ,单次溢出最长只能延时256us,因此可设定每次溢出延时200us,累计25次溢出即可得5ms,因此设定初值可设置为

Count=28-200us/1us=256-200=56=38H,即TH0=38H,TL0=38H

7.已知MCS-51单片机的fosc=6MHz,请利用中断技术和T0,从P1.0端输出高电平宽度为50?s、低电平宽度为200?s的矩形波。

解:

设定时长度为Td=50us,高电平延时1个Td,低电平延时4个Td 延时时间较短,可采用方式2,则初值计算为

Count=28-50us/2us=256-25=231=E7H T0工作于方式2,有TOMD.3=0 ,TMOD.2=0,TMOD.1=1,TOMD.0=0;

T1未使用,因此(TMOD)=02H #include sbit rect_wave=P1^0;

unsigned char Td1=1, Td4=4; void main(void){

12

TMOD=0x02; TL0=0xe7; TH0=0xe7; ET0=1; EA=1; TR0=1 ;

rect_wave=1;

for(;;) ; }

void int0 () interrupt 1 { Td1--;

Td4--; if(Td1==0) {

rect_wave=0; Td4=4; }

if(Td4==0) {

rect_wave=1; Td1=1;

} }

8.已知MCS-51单片机的fosc=6MHz,用Tl定时。试编程由P1.0和P1.1引脚分别输出周期为2ms和500?s的方波。

解:

周期为2ms的方波延时时间长度为1ms即1000us 周期为500us的方波延时时间长度为250us

设定时长度为Td=250us,延时时间较短,可采用方式2,则初值计算为 Count=28-250us/2us=256-125=131=83H P1.0需4个延时长度即4*250us=1000us才切换电平

P1.1只需要1个延时长度就要切换电平 T1工作于方式2,有TOMD.7=0 ,TMOD.6=0,TMOD.5=1,TOMD.4=0; T1未使用,因此(TMOD)=20H

#include sbit P10=P1^0; sbit P11=P1^1;

unsigned char Td4=4; void main(void){ TMOD=0x20; TL0=0x83; TH0=0x83; ET1=1; EA=1; TR1=1 ;

13

for(;;) ; }

void int0 () interrupt 3 { Td4--;

P11=!P11; if(Td4==0) {

P10=!P10; Td4=4; } }

11.设计一个8灯闪烁的控制电路,系统晶振为12MHz,编程实现8灯轮流闪烁其个每盏灯点亮时间为2s。

/************************************** 采用定时计数器T0 工作于方式1

1、因此:TMOD Gate C/T M1 M0 Gate C/T M1 M0 0 0 0 0 0 0 0 1 TMOD=0x01; 2、初值计算

周期为4s,则延时时间长度需2s 因为工作在方式1下,且机器周期为1us,最长延时时间长度为65536us,即65.536ms 因此我们可以让定时计数器每次延时50ms,并且让其溢出40次,则延时时间长度Td=50ms*40=2000ms=2s

因此初值为Count=2^16-50ms/1us=65536-50000us/1us=15536=0x3cb0 ***************************************/ #include #include unsigned char i=40,j=0; void main(void) {

TMOD=0x01; TH0=0x3c;

TL0=0xb0; //TH1=-50000/256; //TL1=-50000%6; TR0=1; EA=1;

ET0=1; // 1000 1000 0x88 for(;;); }

void timer0() interrupt 1 {

TH0=0x3c;

TL0=0xb0; //TH1=-50000/256; //TL1=-50000%6;

14

i--; if(i==0) { i=40;

P1=_crol_(0x01,j)

j++;

if(j==8) j=0; } }

15


《单片机原理及应用》课后习题(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:文件备份--《模拟电子技术》试卷C卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: