山科大_《单片机的C语言程序设计与运用(第2版)》期末复习题及答(5)

2019-04-14 20:00

由于定时时间较长,一个定时器/计数器不能直接实现,一个定时器/计数器最长定时时间为65ms多一点,可以用以下两种方法实现。 (1)方法一

用定时/计数器T0产生周期性为10ms的定时,然后用一个变量对10ms计数50次。系统时钟为12MHz,定时/计数器T0定时10ms,计数值N为10000,选方式1,方式控制字为00000001B(01H),则初值X为X=65 536-10 000。

AU1171615141312111028272625242322213233343536373839P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXDP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0AT89C51P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.087654321BEAALEPSEN313029VCCRST9D1XTAL218R2470RXTAL119D0R1470R #include sbit P1_1=P1^1;

unsigned char i; //定义计数变量 void main( )

21

{ i=0; //初始化 TMOD=0x01;

TH0=(65536-10000)/256; TL0=(65536-10000)%6; EA=1; ET0=1; TR0=1; while(1); }

void time0_int(void) interrupt 1 //中断服务程序 { TH0=(65536-10000)/256; //重载初始值 TL0=(65536-10000)%6; //重载初始值

i++; //每发生一次中断,计数变量加1 if (i==50) //发生50次中断,定时0.5ms { P1_1=!P1_1;

i=0; //计数变量清零 } } (2)方法二

用定时/计数器T1计数实现,对10ms计数50次。定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入。设定时/计数器T0定时时间到对P1.0取反一次,则T1(P3.5)每10ms产生一

22

个计数脉冲,那么定时500ms只需计数25次,设定时/计数器T1工作于方式2,初值X=256-25=231,TH1=TL1=231。因为定时/计数器T0工作于方式1,定时方式,则这时方式控制字为01100001B(61H)。定时/计数器T0和T1都采用中断方式工作。

U1171615141312111028272625242322213233343536373839P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXDP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0AT89C51P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.087654321VCCD1R2470REAALEPSEN313029A9B18RSTXTAL2XTAL119 #include sbit P1_1=P1^1; sbit P1_0=P1^0; void main( )

{ TMOD=0x61; //初始化 TH0=(65536-10000)/256; TL0=(65536-10000)%6; TH1=231;TL1=231; EA=1; ET0=1; ET1=1; TR0=1; TR1=1;

23

while(1); }

void time0_int(void) interrupt 1 //T0中断服务程序 { TH0=(65536-10000)/256; //重载初始值 TL0=(65536-10000)%6; //重载初始值 P1_0=!P1_0; }

void time1_int(void) interrupt 3 //T1中断服务程序 { P1_1=!P1_1; }

【例4-18】设系统时钟频率为12MHz,编程实现:P1.1引脚上输出周期为1s,占空比为20%的脉冲信号

根据输出要求,脉冲信号在一个周期内高电平占0.2s,低电平占0.8s,超出了定时器的最大定时间隔,因此利用定时器0产生一个基准定时配合软件计数来实现。取50ms作为基准定时,采用工作方式1,这样这个周期需要20个基准定时,其中高电平占4个基准定时。 #include sbit P1_1=P1^1;

unsigned char i; //定义计数变量 void main( )

{ i=0; //初始化 TMOD=0x01;

TH0=(65536-50000)/256;

24

TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; while(1); }

void time0_int(void) interrupt 1 //中断服务程序 { TH0=(65536-50000)/256; //重载初始值 TL0=(65536-50000)%6; i=i+1;

if(i==4) P1_1=0; //高电平时间到变低 else if(i==20) //周期时间到变高 { P1_1=1;

i=0; //计数变量清零 } }

25


山科大_《单片机的C语言程序设计与运用(第2版)》期末复习题及答(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:刘学军《继电保护原理 》课后答案

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

马上注册会员

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