第12章 C51应用础基础.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【例12-1】将Pl.0输入的位直接由Pl.1口输出。 此例程序说明如何对I/O口位进行读写操作,在实际应用中可对输入信号处理后再由Pl.1输出。程序清单如下: #includeREGX51.H void main(void) { P1_0=1; while(1) /*循环读Pl.0并送至Pl.1*/ { Pl_1=Pl_0; } } 【例12-2】 发光二极管流水灯程序 设计发光二极管流水灯,硬件电路如图12-9所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出逻辑“0”时,发光二极管亮,输出逻辑“1”时,发光二极管灭。发光二极管从L1到L8循环点亮,并不断重复循环。 本例程目的是练习写单片机的I/O口。通过练习,理解如何编程发出逻辑信息,并控制外围电路。 编程方法:当控制信号为低电平时,发光二极管亮,为高电平时,发光二极熄灭。 参考程序清单: #includeREGX51.H /*1ms延时子程序-----*/ void Delay_xMs(unsigned int x) { unsigned int i,j; for( i =0;i x;i++ ) { for( j =0;j500;j++ ); } } ? /*主程序,实现LED灯闪烁,亮1秒灭1秒*/ void main() { unsigned char a; while(1) { P1=0xfe; for(i=0;i8;i++) { Delay_xMs (1000); //延时1秒钟 a= (a1)+1; //设置二极管第几个亮 P1=a; //LED 发光二极管亮 } } } ?12.3.2 中断系统C语言编程的应用 C51编译器支持在C语言源程序中直接编写51单片机的中断服务函数程序,从而减轻了采用汇编语言编写中断服务程序的繁琐程度。为了能在C语言源程序中直接编写中断服务函数,C51编译器对函数的定义有所扩展,增加了一个扩展关键字interrupt。关键字interrupt是函数定义时的一个选项,加上这个选项即可以将函数定义成中断服务函数。 定义中断服务函数的一般形式为: 函数类型 函数名(形式参数表) interrupt n [using m] { /* ISR */ } ●interrupt后面的n是中断编号,n的取值范围为0~31。编译器从8n+3处产生中断向量,具体的中断号n和中断向量取决于不同的51系列单片机芯片。51单片机的常用中断源和中断向量如表12-5所示。 ●m用来选择5l单片机中不同的工作寄存器组。单片机RAM中使用4个不同的工作寄存器组,m分别选中4个不同的工作寄存器组。如果不用该选项,则由编译器选第一个寄存器组作绝对寄存器组访问。 ●使用C51编写中断程序,需要在主程序中初始化中断系统,再单独编写中断服务函数,其基本步骤如下: ①设置IE寄存器,置位相应中断源的中断允许标志及EA,使能相关中断,此项必须有; ②设置IP寄存器,设定所用中断源的中断优先级。此项可选,可以不设置; ③对外部中断应设定中断请求信号形式,设置寄存器TCON的IT0、IT1项,确定低电平触发或脉冲下降沿触发。 ④如果是定时器/计数器中断或串口中断,对于定时/计数中断应设置工作方式(定时/计数)。 ⑤单独编写中断服务函数,此项必须有。 【例12-3】电路如图12-10所示,首先通过P1.7口点亮发光二极管,然后通过外部按键输入一脉冲串。编程要求对P1.7引脚上的脉冲进行计数,发光二极管交替亮、暗发光。 参考程序如下: #include REGX51.H //包括一个51标准内核的头文件 unsigned char counter=0;//计数 void int0() interrupt 0 using 3//外中断0 { P1_7=!P1_7; //在中断里控制LED交替亮、暗 counter++;//脉冲进行计数 } ?void main(void) // 主程序 { IE=Ox81; //使能外中断0 IT0=1; //脉冲下降沿触发外中断 P1_7=0; //开始点亮发光二极管 while(1); //主程序循环 } ?12.3.3 定时器/计数器C语言编程的应用 C51对定时器/计数器的编程过程可分为查询法和中断法。编程需要考虑下面问题: 其一,是否需要中断。定时器/计数器在计数溢出时可以产生中断,如果需要中断,则设置IE寄存器,使能对应的定时器

文档评论(0)

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

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

1亿VIP精品文档

相关文档