单片机第四简介.ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.5.5 中断程序的编写 使用汇编语言编写中断程序时,首先使用ORG伪指令在指定的地址处写上跳转指令,转到真正的中断程序入口;然后在主程序中设定中断优先级,开启相应的中断允许位;最后开启总中断允许位,这样,一旦中断发生,就可以转到相应的中断服务程序中去。应用C51语言编写中断程序与此类似,在main函数中直接对各位进行操作,以确定中断优先级、开启中断允许和总中断允许,而中断子程序采用以下的格式: 返回值 函数名 interrupt n 其中,n对应中断源的编号,其值从0开始。以8051单片机为例,n的编号为0~4,分别对应外部中断0、定时/计数器0中断、外部中断1、定时/计数器1中断、串行口中断。 【例4.16】 如图4-6所示,8051单片机的P3.2口引脚接有按钮, 按下此按钮后,P1.0引脚所接的LED点亮,再次按下后熄灭, 如此反复。 图4-6 INT0中断实验 程序如下。 #include reg51.h sbit P1_0=P1^0 void main( ) { IT0=1; //设置为下降沿触发 EA=1; //开中断总允许 EX0=1; //开外部中断0 for(; ;) {;} } void int0(void) interrupt 0 { P1_0=~P1_0; //P1_0取反 } 4.5.6 寄存器组的切换 工作寄存器组分配的方法是使用using n指定,其中n的值为0~3,对应4组工作寄存器。如void timer0( ) interrupt 0 using 0 表示在该中断子程序中使用0组工作寄存器。 学习了using的用法后可以给出中断服务的完整语法,其内容如下: 返回值类型 函数名(参数) interrupt n [using n] 【任务实施】 1)、设计方案 用两个八段LED显示器显示00~99的数字,只需用单片机的两组I/O口产生对应的十位和个位的段码驱动电平即可。另外为了让人眼能分辨出实时显示的数字,还需用软件实现一定的延时。 2)、硬件电路实现 图4-7 数码管显示电路 3)、系统程序实现 #include reg51.h unsigned char code display[10]={0xc0, 0xf3, 0xa4, 0xb0,0x99, 0x92, 0x82, 0xf8, 0x80,0x90}; // 定义数组,有10个元素,分别按顺序存储 // 数字0~9显示对应信号输入 // 数组分配的存储空间在程序存储器中 void Delay( unsigned int delaytime) // 延时子程序 { unsigned char i; for( ; delaytime0;delaytime--) for( i=0; i=124; i++); } void main( ) { unsigned char x, y; P0= display[0]; P1= display[0]; // 初始,个位和十位都显示0 for( ;;) { for (x=0; x=9; x++) { P0= display[x]; for (y=0; y=9; y++) { P0= display[y]; Delay(1000); } } } } 本题采用双重循环的结构来显示00~99的变换,十位从0到9变化为外循环,而十位显示每一个数字时,个位也要从0到9变化为内循环。 【拓展训练:基于C51语言的简单液位指示系统的实现】 1)、功能要求 任务要求同第3章拓展训练的功能要求。 2)、硬件电路实现 硬件实现电路同第3章图3-7。 3)、系统程序实现 本题相当于在P1口上接了8个开关,P0口上接8个LED灯,根据开关的闭合情况,来控制LED灯。但是开关的闭合有一定的规律,如液位刚好漫过4点位置时,4号开关闭合,同时1、2、3号开关也肯定闭合,因此可以分成8种情况处理,即漫过8个位置,这用switch语句非常方便。 #include reg51.h void main(void) { unsigned char key; P1=0xff; // P1作为输入口,必须置1 P0

文档评论(0)

宝贝计划 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档