网站大量收购闲置独家精品文档,联系QQ:2885784924

《单片机原理与应用技术》课件第11章.pptVIP

《单片机原理与应用技术》课件第11章.ppt

  1. 1、本文档共127页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

定义完后,要引用该模块时,只要再加入

#include4LED.h

就可以在程序中调用Disp_4LED(uchar*ledbuf)和delayms(uintz)的自定义函数。实际上,如果仅仅是为了应用,只要根据头文件中对函数的相关注释和对引脚的定义,就可以正确地调用这些函数,而不必详细了解这些函数是如何编写的(这一点对初学者快速掌握单片机还是非常有益的)。因此,在头文件中对函数正确地注释显得非常重要。

在头文件中除了声明自定义函数外,也可以把所声明函数的程序一起写入,这样就不需要再另写一个同名的驱动程序文件了。 11.951单片机内部资源的C51编程

11.9.1中断的C51编程

C51编译器支持在C源程序中直接开发中断程序。中断服务程序是通过按规定语法格式定义的一个函数。

中断服务程序的函数定义的语法格式如下:

返回值函数名([参数])interruptm[usingn]

{

}

interruptm为中断源的编号,m的编号如表11.9所示。usingn选项用于实现工作寄存器组的切换,n是选用的工作寄存器区号(0~3),便于响应中断时保护有关现场信息,以便中断返回后,能使中断前的源程序从断点处继续正确地执行下去。C51对中断的编程示例见11.9.2节。11.9.2定时/计数器的C51编程

C51中对定时/计数器的编程与用ASM汇编几乎一样,只是把相关的语句改成C语言而已。下面给出一个两位LED数码管显示00~99的示例(每秒加1),C51采用定时中断的方法编程,采用的电路原理图如第5章图5.8所示,Proteus仿真结果如图5.10所示。

编程的主要思路是用T0作一个10ms的中断,并记录中断的次数,每次中断时显示一位LED数码管,100次中断后将LED数码管的显示内容加1。详细注释的程序清单如下:#includereg51.h

#defineucharunsignedchar

#defineuintunsignedint

sbitLED1=P3^6; //51单片机控制的数码管公共端

sbitLED2=P3^7;

ucharcodeLedCode[]= //数码管共阳极段码表

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

ucharDispNum=0; //LED显示数据

ucharTimeCounter=100; //T0定时中断次数计数器

bitLedFlag=0; //LED数码管显示标记

voidmain(void) //主程序

{ TMOD=0x01; //T0为定时器,方式1

TL0=0xf0; //10ms定时的初值

TH0=0xd8;

EA=1; //总允许中断

ET0=1; //允许T0中断

TR0=1; //定时开始

while(1); //无限循环等定时中断

}

voidtimer0(void)interrupt1 //T0中断服务程序

{

TL0=0xf0; //恢复定时初值

TH0=0xd8; P2=0xff;

if(LedFlag==0) //LedFlag==0,显示十位

{

P2=LedCode[DispNum/10];//查十位的段码

LED1=1; //显示十位

LED2=0; //关断个位

LedFlag=1; //为显示个位做准备

}

Else //?LedFlag!=0,显示个位

{

P2=LedCode[DispNum%10];//查个位的段码,送显示

LED1=0;

文档评论(0)

酱酱 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档