单片机原理及应用(C51版)第5章课后题答案.docx

单片机原理及应用(C51版)第5章课后题答案.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

3.假设系统时钟频率为12MHz,利用定时器T0编程实现如下功能:使P1.0引脚上输出一个周期为40ms的方波。

计算初值X:

X=216-20000us/1us=65536-20000=45536=B1E0H

因此T0的初值为TH0=0B1H,TL0=0E0H。

参考程序:

#include reg51.h //51系列单片机头文件

sbit P1_0=P1^0 ; //位定义

void main() //主函数

{

TMOD=0x01; //设T0工作在方式1,定时模式

TH0=0xb1; //装入计数初值

TL0=0xe0;

EA=1; //开总中断

ET0=1; //T0开中断

TR0=1; //启动T0

while(1); //等待中断

}

void counter0()interrupt1 //T0的中断服务函数

{

P1_0=!P1_0; //P1.0位取反

TH1=0xb1; //重新装载计数初值

TL1=0xe0;

}

4.假设系统时钟频率为6MHz,编程实现用定时器T1产生定时脉冲,每隔2ms从P1.5引脚输出脉宽为3个机器周期的正脉冲。

计算初值X:

X=65536-2000us/2us=65536-1000=64536=FC18H

因此T1的初值为TH1=0FCH,TL1=18H。

参考程序(采用中断工作方式):

#include reg51.h //51系列单片机头文件

#includeintrins.h //包含_nop_函数所在的头文件

sbit P1_5=P1^5 ; //位定义

void main() //主函数

{

TMOD=0x10; //设T1工作在方式1,定时模式

TH1=0xfc; //装入计数初值

TL1=0x18;

EA=1; //开总中断

ET1=1; //T0开中断

TR1=1; //启动T0

P1_5=0; //将输出口P1的第0位清0(输出脉冲的起始值)

while(1); //等待中断

}

void timer1()interrupt3 //T1的中断服务函数

{

P1_5=1; //产生脉冲信号高电平

_nop_();

_nop_();

P1_5=0; //产生脉冲信号低电平

TH1=0xfc; //重新装载计数初值

TL0=0x18;

}

5.假设系统时钟频率为12MHz,利用定时器T1编程实现如下功能:要求从P2.1引脚输出一个脉冲波形,高电平持续3ms,低电平持续10ms。

分析:(1)选择工作方式:因为Tcy=12/fosc=1us,由定时器各种工作方式的特性,可计算出方式1最长可定时65.536ms,方式2、3最长可定时256us。

本题中定时时间t1=3ms、t2=10ms选择T0的工作方式1来完成此任务。假设此时T1不工作,则方式控制字为TMOD=01H。

(2)计算初值X:

高电平初值:

X1=65536-3000us/1us=65536-3000=62536=F448H

因此T0的初值为TH0=0F4H,TL0=48H。

低电平初值:

X2=65536-10000us/1us=65536-10000=55536=D8F0H

因此T0的初值为TH0=0D8H,TL0=0F0H。

参考程序(采用中断工作方式):

#include reg51.h //51系列单片机头文件

sbit P2_1=P2^1 ; //位定义

bitflag=0;//定义一个位变量,实现高低电平切换

void main() //主函数

{

TMOD=0x01; //设T0工作在方式1,定时模式

EA=1; //开总中断

ET0=1; //T0开中断

TH0=0xd8; //装入低电平计数初值

TL0=0xf0;

P2_1=0; //将输出口P2的第1位清0

TR0=1; //启动T0,(输出低电平开始)

while(1); //等待中断

}

void timer0()interrupt1 //T0的中断服务函数

{

flag=!flag;

if(flag==0)

{

P2_1=0;

TH0=0xd8; //装入低电平计数初值

TL0=0xf0;

}

else

{

P2_1=1;

TH0=0xf4; //装入高电平计数初值

TL0=0x48;

您可能关注的文档

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档