- 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参考: #includereg51.h #includeintrins.h bit flag; unsigned char ledstatus; void wint1( ) interrupt 2 { flag=1; } void main(void) { P1=0xff; ledstatus=0xfe; IT1=1;EA=1;EX1=1; while(1) { if(flag) { P1=ledstatus; ledstatus=_crol_(ledstatus,1); flag=0; } } } L6-3利用中断控制灯 当主程序正常执行时,P1所连接的8个LED将闪烁。若按INT0按钮开关,则进入中断状态,P1所连接的8个LED将变成单灯左移,而左移3圈后恢复中断前的状态,程序将继续执行8个灯闪烁的功能。 ORG 0000H LJMP MAIN ;主程序 ORG 0003H LJMP WINT0 ;INT0中断服务程序 ORG 0030H MAIN: MOV SP,#60H MOV IE,#81H ;中断设置 MOV R7,#0 ;记录灯的状态 MOV P1,R7 L1: MOV R6,#250 ;延时250ms L11: LCALL DL1MS DJNZ R6,L11 MOV A,R7 ;取反 CPL A MOV R7,A MOV P1,A SJMP L1 WINT0: MOV R2,#3 ;左移3圈 KKK: LCALL LEFT DJNZ R2,KKK RETI L1MS: MOV R5,#5 ;延时1ms DL11: MOV R4,#100 DL1: DJNZ R4,DL1 DJNZ R5,DL11 RET LEFT: MOV A,#0FEH; ;灯左移 MOV R3,#8 LLL: MOV P1,A RL A MOV R6,#250 HHH: LCALL DL1MS DJNZ R6,HHH DJNZ R3,LLL RET END END C51参考: #include reg51.h #define LED P1 // 定义LED接至Port 1 data unsigned char LEDP1;//交替时状态 void delayxms(int x); // 声明延迟函数 void left(int x); // 声明单灯左移函数 void main() // 主程序开始 { IE=0x81; LEDP1=LED=0x00; //灯全亮 while(1) { delayxms(500); // 延迟500*1m=0.25s LEDP1=~LEDP1; LED=LEDP1; } } /* INT 0的中断子程序 - 单灯左移3圈 */ void my_int0(void) interrupt 0 //INT0 中断 { left(3); //单灯左移3圈 LED=LEDP1; //写回中断前LED状态 } /* 延迟函数,延迟约x 1ms */ void delayxms(int x)
文档评论(0)