51单片机外部中断的C51编程.doc_第1页
51单片机外部中断的C51编程.doc_第2页
51单片机外部中断的C51编程.doc_第3页
51单片机外部中断的C51编程.doc_第4页
51单片机外部中断的C51编程.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51单片机外部中断的C51编程相关知识:1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0;3、中断源的优先级:按以上顺序排列,串行口中断最低、外部中断0最高;4、使用外部中断0和1,必须TCON寄存器设置其触发方式是低电平触发(0)还是下降沿触发(1);5、使用前必须通过IE寄存器打开总中断和自己的中断;/外部中断基本例程-1(未使用中断,键盘扫描为一般端口扫描)/这是特意安排的一个例程,以便和使用外部中断的例程2进行对比/用一个按键控制一个灯的亮灭,开始不亮,按一下则点亮,再按一下灭掉,再按又亮.#include sbit k1=P32;sbit led=P27;void delay_ms(unsigned int xms); /ms级延时子程序void key_scan(); /声明键盘扫描子函数/=void main()led=1; /上电初始化,led灯不亮while(1)key_scan();delay_ms(3000);/=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y;for(x=xms;x0;x-)for(y=130;y0;y-);/-void key_scan() /键盘扫描子函数 if(k1=0) /有键按下吗?(k1=0 ?) delay_ms(10); /延时消抖if(k1=0) /确实是有键按下,则:led=!led; /翻转灯的状态while(!k1); /等待按键放开/-/外部中断基本例程-2 (单个键盘的外部中断0扫描处理)/用一个按键控制一个灯的亮灭/开始不亮,按一下则点亮,再按一下灭掉,再按又亮.#include sbit k1=P32;sbit led=P27;void delay_ms(unsigned int xms); /ms级延时子程序void key_scan() interrupt 0 /使用了外部中断0的键盘扫描子函数。也可放在主函数而不需要预先声明 if(k1=0) /有键按下吗?(k1=0 ?) delay_ms(10); /延时消抖if(k1=0) /确实是有键按下,则:led=!led; /翻转灯的状态while(!k1); /等待按键放开/=void main()led=1; /上电初始化,led灯不亮TCON=0x01; /打开外部中断0,并设置为下降沿触发IE=0x81; /开总中断while(1)delay_ms(3000); /注意主函数这里没有键盘扫描程序了/=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y;for(x=xms;x0;x-)for(y=130;y0;y-);/-/外部中断基本例程-3 (单个键盘的外部中断1扫描处理)/功能跟上例一样,都是用一个按键控制一个灯的亮灭,但是使用的是外部中断1/注意与前例写法上的不同之处#include sbit k2=P33; /sbit led=P27;void delay_ms(unsigned int xms); /ms级延时子程序/=void main()led=1; /上电初始化,led灯不亮TCON=0x04; /打开外部中断1,并设置为下降沿触发IE=0x84; /开总中断和外部中断1while(1)delay_ms(3000);/=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y;for(x=xms;x0;x-)for(y=130;y0;y-);/-void key_scan() interrupt 2 /使用了外部中断1的键盘扫描子函数 if(k2=0) /有键按下吗?(k1=0 ?) delay_ms(10); /延时消抖if(k2=0) /确实是有键按下,则:led=!led; /翻转灯的状态while(!k2); /等待按键放开/外部中断基本例程-4 (同时使用外部中断0和外部中断1)/用一个键控制接在P0口的八个灯的亮灭,另外一个按键控制一个灯的亮灭#include sbit k1=P32;sbit k2=P33; /sbit led=P27;void delay_ms(unsigned int xms); /ms级延时子程序/=void main()P0=0xff; /上电初始化,P0全灭led=1; /上电初始化,led灯不亮TCON=0x05; /打开外部中断1,并设置为下降沿触发IE=0x85; /开总中断和外部中断1while(1)delay_ms(3000);/=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y;for(x=xms;x0;x-)for(y=130;y0;y-);/-void key_scan_1() interrupt 0 /使用了外部中断0的键盘扫描子函数 if(k1=0) /有键按下吗?(k1=0 ?) delay_ms(10); /延时消抖if(k1=0) /确实是有键按下,则:P0=P0; /翻转8个灯的状态while(!k1); /等待按键放开void key_scan_2() interrupt 2 /使用了外部中断1的键盘扫描子函数 if(k2=0) /有键按下吗?(k1=0 ?) delay_ms(10); /延时消抖if(k2=0) /确实是有键按下,则:led=!led; /翻转单个灯的状态while(!k2); /等待按键放开/外部中断扩展应用例程-5(8个按钮分别去控制8个灯的亮灭)/八个按钮通过8个二极管接到外部中断0脚进行中断扩展,/从而解决外部中断口不够用的问题#include sbit k0=P20; /八个按键分别接到P2口各个脚上,sbit k1=P21; /同时还通过二极管连接到外部中断0脚(P3.2)sbit k2=P22;sbit k3=P23;sbit k4=P24;sbit k5=P25;sbit k6=P26;sbit k7=P27;sbit led0=P00; /接在P0脚上的8个LED灯,分别受控于上述8个按键sbit led1=P01;sbit led2=P02;sbit led3=P03;sbit led4=P04;sbit led5=P05;sbit led6=P06;sbit led7=P07;void delay_ms(unsigned int xms); /ms级延时子程序/=void main()/上电初始化,led灯不亮TCON=0x01; /打开外部中断0,并设置为下降沿触发IE=0x81; /开总中断while(1)delay_ms(3000);/=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y;for(x=xms;x0;x-)for(y=130;y0;y-);/-void key_scan() interrupt 0 /使用了外部中断0的键盘扫描子函数 if(k0=0) /有键按下吗?(k0=0 ?) delay_ms(10); /延时消抖if(k0=0) /确实是有键按下,则:led0=!led0; /翻转灯的状态while(!k0); /等待按键放开if(k1=0) /有键按下吗?(k1=0 ?) delay_ms(10); /延时消抖if(k1=0) /确实是有键按下,则:led1=!led1; /翻转灯的状态while(!k1); /等待按键放开if(k2=0) /有键按下吗?(k2=0 ?) delay_ms(10); /延时消抖if(k2=0) /确实是有键按下,则:led2=!led2; /翻转灯的状态while(!k2); /等待按键放开if(k3=0) /有键按下吗?(k3=0 ?) delay_ms(10); /延时消抖if(k3=0) /确实是有键按下,则:led3=!led3; /翻转灯的状态while(!k3); /等待按键放开if(k4=0) /有键按下吗?(k4=0 ?) delay_ms(10); /延时消抖if(k4=0) /确实是有键按下,则:led4=!led4; /翻转灯的状态while(!k4); /等待按键放开if(k5=0) /有键按下吗?(k5=0 ?) delay_ms(10); /延时消抖if(k5=0) /确实是有键按下,则:led5=!led5; /翻转灯的状态while(!k5); /等待按键放开if(k6=0) /有键

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论