单片机系统开发之利用中断控制8盏灯的循环点亮.doc

单片机系统开发之利用中断控制8盏灯的循环点亮.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
. . 单片机应用系统开发作业 利用中断控制8盏灯花样闪烁 学校:沈阳理工大学 专业:信息对抗技术 学号:1411050121 姓名: 吴志飞 系统设计要求: 设晶振频率为12MHZ,利用中断系统使主程序P0口进行花样显示。显示规律为: P0口连接8个LED,依次左移闪亮; 当按下INT1时,8个LED灯依次右移闪亮; 当按下INT0时,8个灯闪亮5次。 系统设计分析: 单片机的最小系统+8盏LED灯+排电阻。 本系统涉及到两个外中断,中断优先级,左移右移等问题。在设计时可能要设计中断优先级。左移右移需要用到两个移位指令RL和RR。 3.系统原理图设计: 系统所需原件为单片机AT89C51,瓷片电容CAP30pf,晶振CRYSTAL12MHZ,电解电容CAP-ELEC,电阻RES,发光二极管LED8只,排电阻RESPACK-8以及开关SWITCH。利用中断控制8盏LED灯花样闪烁的原理图如1.1所示。 图1.1 利用中断制8盏LED灯花样闪烁原理图 4.系统流程图设计: 开 始 开 始 N中断0结 束中断1调用中断子程序1调用中断子程序0中断0?中断1?LED左移闪亮Y是否发生中断图1.2 利用中断控制8盏灯花样闪烁流程图 N 中断0 结 束 中断1 调用中断子程序1 调用中断子程序0 中断0?中断1? LED左移闪亮 Y 是否发生中断 图1.2 利用中断控制8盏灯花样闪烁流程图 开中断 中断设置 中断子程序0 中断子程序0 中断子程序1 保护现场 保护现场 保护现场 保护现场 LED右移 LED右移闪亮 LED闪亮5次 恢复现场恢复现场 恢复现场 恢复现场 中断返回 中断返回 中断返回 5.系统源程序设计: 汇编源程序: ORG 0000H AJMP START ORG 0003H AJMP INTR0 ORG 0013H AJMP INTR1 START:MOV IE,#85H MOV IP,#01H MOV TCON,#00H MOV SP,#60H MOV P0,#0FFH MOV P3,#0FFH MOV A,#0FEH LP1: MOV P0,A RL A LCALL DELAY SJMP LP1 INTR0:PUSH ACC PUSH PSW MOV R1,#10 MOV A,#00H XH: MOV P0,A LCALL DELAY CPL A DJNZ R1, XH POP PSW POP ACC RETI INTR1:PUSH ACC PUSH PSW MOV A,#7FH MOV R2,#16 XH1: MOV P0,A LCALL DELAY RR A DJNZ R2, XH1 POP PSW POP ACC RETI DELAY: MOV R7,#20 DELAY1: MOV R6,#20 DELAY2: MOV R5,#248 DJNZ R5,$ DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END C语言源程序: #include<reg51.h> #include<intrins.h> void delay(); #define uint unsigned int #define uchar unsigned char uchar temp; uint i; void main(void) { IE=0X85; IP=0X01; TCON=0X00; temp=0xfe; while(1) { P0=temp; delay(); temp=_crol_(temp,1); } } void int0() interrupt 0 { uchar s; s=0x00; for(i=0;i<10;i++) { P0=s; delay(); s=~s; } } void int1() interrupt 2 { uchar temp1; temp1=0x7f; while(1) { P0=temp1; delay(); temp1=_cror_(temp1,1); } } void delay() { uint i,j; for(i=0;i<256;i++) for(j=0;j<256;j++) {;} 6.在kei

文档评论(0)

hmwn621 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档