- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 C51单片机程序设计 信息工程学院 2008年5月 C51编译器提供了丰富的库函数,使用这些库函数大大提高了编程效率,用户可以根据需要随时调用。每个库函数都在相应的头文件中给出了函数的原型,使用时只需在源程序的开头用编译预处理命令#include将相关的头文件包含进来即可。 例如,要进行绝对地址访问,只需要在程序开头使用#include “absacc.h”文件包含就可以了。要访问SFR和SFR的位,则只需要在程序开头使用#include “reg51.h” 或#include “reg52.h”文件包含。 二、C51的库函数 6.5 使用C51编写中断服务程序 C51编译器支持在C语言源程序中直接编写51单片机的中断服务程序。同时,C51编译器对函数的定义有所扩展,增加了一个扩展关键字interrupt。关键字interrupt是函数定义时的一个选项,加上这个选项即可以将函数定义成中断服务函数。 interrupt后面的n是中断号,n的取值范围为0~31。具体的中断号n和中断向量取决于不同的51系列单片机芯片。 形式参数表 定义中断服务函数的一般形式是: 函数类型 函数名() [interrupt n][using n] 51单片机的常用中断源和中断向量如表1 中断编号 中断源 入口地址 0 外部中断0 0003H 1 定时器/计数器0溢出中断 000BH 2 外部中断1 0013H 3 定时器/计数器1溢出中断 001BH 4 串行口中断 0023H 中断实例:外部中断 在本实例中,首先通过P1.7 口点亮发光二极管,然后外部输入一脉冲串,则发光二极管亮、暗交替。 #include reg51.h sbit P1_7=P1^7; void interrupt0() interrupt 0 using 2 //定义定时器0 { P1_7=!P1_7; } void main() { EA=1; //开中断 IT0=1; //外部中断0低电平触发 EX0=1; P1_7=0; //外部中断0 do { }while(1); } 6.6 使用C51编写定时器/计数器程序 定时器计数器综合应用举例 例: 设单片机系统的时钟频率为12MHz,编程使P1.0和P1.1分别输出周期为1ms和500us的方波。 分析:当系统时钟为12MHz、工作模式为2时,最大的定时时间为256us,满足500us的要求。TH0初值为:250us=(28-TH0初值)×12×振荡周期,得到TH0=0x06。 #include reg51.h sbit P1_0=P1^0; sbit P1_1=P1^1; void main() { char i; TMOD=0x02; //定时器T0,工作模式2 TH0=0x06;TL0=0x06;//装入初值 TR0=1; while(1) { for(i=0;i2;i++) { do{}while(!TF0); //等待定时中断 P1_0=!P1_0; } P1_1=!P1_1; } } 例:独立键盘,用C语言实现。 6.7 键盘及显示电路C51编程实例 #include “reg51.h” #include “absacc.h” void delay(void) /*延时1ms*/ { TH0=-500/256; TL0=-500%256; TR0=1; while(!TF0); TF0=0; TR0=0; } main() { char x,i; loop: x=P1; x=x0x0f; if(x==0x0f)goto loop; for(i=0;i10;i++) /*延时10ms去抖动*/ {delay();} x=P1; x=x0x0f; if(x==0x0f)goto loop; switch(x) { case 0x01:PBYTE[0x20]= PBYTE[0x20]+1;break; /*20单元加1*/ case 0x02:PBYTE[0x20]= PBYTE
您可能关注的文档
最近下载
- 行政编制事业编制参公管理企业编制.doc VIP
- 参公、行政编制与事业编制的区别(修正版).docx VIP
- 22D701-3电缆桥架安装(26.9MB)(26.85MB)5ce2e72e69780631(1).pdf VIP
- 学堂在线 日语与日本文化 章节测试答案.docx VIP
- 危险化学品企业工艺平稳性关键SOP、一般SOP示例.pdf VIP
- 精密与特种加工技术(第3版):热作用特种加工技术PPT教学课件.pptx
- 公、行政编制与事业5编制的区别(修正版).doc VIP
- 港珠澳大桥主体工程桥梁工程钢箱梁制造新工艺及关键技术.ppt VIP
- 社区矫正心理测试.docx VIP
- 西双版纳傣自治州“十三五”规划研究报告.doc VIP
文档评论(0)