- 1、本文档共44页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
void INT0_ISP() interrupt 0 //外中断0服务函数 { P1=0x0f; //P1口高4位置0,点亮4个LED } void INT1_ISR() interrupt 2 //外中断1服务函数 { if(P1_0==0) {P1=P10xef;} //点亮VD1 ... if(P1_3==0) {P1=P10x7f;} //点亮VD4 } 【例5-6】利用优先编码器扩展外部中断。 从例5-5可以看出,利用与门、或门扩展外中断所占端口引脚较多,在实际应用中,还可以采用优先级解码芯片如74LS148,把多个中断源信号作为一个中断。如图5-12所示,在有8个中断源的情况下,经74LS148优先译码后,只占3个I/O引脚,即用3根引脚可分辨8个中断源,从而节省了I/O口资源。 8051 S0 R X 8 +5V D0 A0 A1 A2 G 74LS148 P0.0 P0.1 P0.2 INT0 S1 S2 S3 S4 S5 S6 S7 D1 D2 D3 D4 D5 D6 D7 图5-12 利用优先编码器扩展外部中断的电路 程序代码如下: #includereg51.h unsigned char status; //定义一变量,用来读取P0口状态 void main( ) { EA=1; //开总中断 EX0=1; //开外中断0 PX0=1; //外中断0高优先级 for( ; ; ) //延时等待中断发生 { ; } } void INT0_ISR( ) interrupt 0 //外中断0中断服务函数 { status=P00x07; //读取P0口低三位状态,不同的值 switch(status) //对应不同的中断源 { case0: { … //处理中断源0 break; } … case 7: { … //处理中断源7 break; } } } 【例5-7】中断嵌套。 外部中断/INT1触发后,启动计数器0。计数达到10次后停止计数,启动定时器1。由定时器1控制定时,由P1.7输出周期为200ms的方波信号,接收两次中断后关闭方波发生器,P1.7置低。 程序如下: #includereg51.h #define uchar unsigned char uchar date a,b,c; void interrupt0( ) interrupt 2 using 1 //定义外部中断1 { a++; } void timer0( ) interrupt 1 using 2 //定义计数器0(T0) { TL0=0xff; b++; } void time1( ) interrupt 3 using 3 //定义定时器1(T1) { TH1=0x06; c--; } sbit P1_7=P1^7; void mian(void) { P1_7=1; //初始化 TCON=0x01; //外部中断为低电平触发方式 TMOD=0x27; //启动定时器1和计数器0,工作方式2 IE=0x8b; //开中断 a=0; do{ } while(a!=1); //等待外部中断 P1_7=!P1_7; //取反 TL0=0xff; //初值 TH0=0x06; //初值 b=0; TR0=0; //停止计数器0工作 TR1=1; //启动定时器1 do { c=0xc8; do{} while(c!=0); //定时输出方波 P1_7=!P1_7; } while(a!=3); //等待两次外部中断 TR1=0; //关定时器1 P1_7=0; EA=0; //关总中断 EX0=0; //禁止外部中断 } 【例5-8】利用外部中断实现发光二极管的简单控制。 本例将介绍一个中断使
文档评论(0)