外部中断实验.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PIC实验报告 电平变化按键中断 任课教师:周燕 班级:11级电科 一、实验目的 进行外部中断INT实验,掌握外部引脚INT/RB0沿跳变中断。 二、实验功能内容 利用外部中断,单键触发8位二进制累加计数器 功能:用外部中断输入引脚RB0/INT接收连接在该引脚上的按键信息。每次检测到一次按键就对8位计数器COUNT加一; 将COUNT的值直接送给8个发光二极管显示。 三、实现功能用到的硬件电路设计和电路板的链接方法 该实验需要利用按键的电平变化触发INTF,进而通过中断来控制count,显示八个LED灯。所以,电路需把一个按键与PORTB0连接,显示电路为把PORTD与八个LED连接。 四、软件设计 1.流程图设计 如下图 中断服务程序 中断服务程序 中断入口程序保护中断现场 中断入口程序保护中断现场 通过INTE 通过INTE和INTF判断是否为外部中断 调用20ms延时子程序,消除按键抖动NY 调用20ms延时子程序,消除按键抖动 N Y 主程序 COUNT加 COUNT加1,并将其送入PORTD显示 设定PORTD全部为输出引脚并输出00H N判断按键是否松开将端口 N 判断按键是否松开 将端口B设置为输入并使能其弱上拉功能 Y使能外部中断并将其设置为下降沿触发 Y 使能外部中断并将其设置为下降沿触发 COUNT清零并令PORTD=COUNT调用 COUNT清零并令PORTD=COUNT 调用20ms延时子程序,消除断开抖动的影响 使能全局中断和外部中断清RBIF标志 使能全局中断和外部中断 清RBIF标志 无条件循环中断出口程序恢复中断现场 无条件循环 中断出口程序恢复中断现场 中断返回 中断返回 2.程序设计和注释 #includep16f877a.inc COUNTEQU20H;定义COUNT作为按键次数累加寄存器 SAVEWEQU21H;定义SAVEW寄存器,用于现场保护 SAVESEQU22H;定义SAVES寄存器,用于现场保护 COUNT1EQU23H;定义COUNT1寄存器,用于延时 COUNT2EQU24H;定义COUNT2寄存器,用于延时 ;**************************************************************** ORG00H NOP;空指令 GOTOMAIN ORG0x004 ;中断入口 MOVWFSAVEW SWAPFSTATUS,W CLRFSTATUS MOVWFSAVES;保护现场 GOTORB0INT MAIN BCFSTATUS,RP1 ;对用到的功能初始化 BSFSTATUS,RP0 ;转到体1 CLRFOPTION_REG;开启内部弱上拉;RB0/INT下降沿触发有效 CLRFTRISD ;将PORTD设置为输出端口 MOVLWMOVWFTRISB ;将RB0-RB5设置为输入端口 BSFINTCON,INTE ;由INT引脚输入外部请求中断被允许 BCFSTATUS,RP0 ;转到体0 CLRFCOUNT ;按键次数累加器COUNT清零 MOVFCOUNT,W MOVWFPORTD;初始化显示,将COUNT送给PORTD BSFINTCON,GIE;打开全局中断 BSFINTCON,PEIE;打开外设中断 GOTO$;无条件等待 RB0INT BTFSSINTCON,INTE;判断是否允许由INT引脚输入的外部中断 GOTOJMP;否结束中断 BTFSSINTCON,INTF;是,判断是否为INT中断 GOTOJMP;否结束中断 CALLDELAY_20ms;是,调用延时子程序 BTFSCPORTB,0;再次测试按键是否确实按下?是, ;跳过下条指令 GOTOJMP;否,恢复现场,中断返回 INCFCOUNT,1;COUNT自加1 MOVFCOUNT,0;COUNT送到W寄存器 MOVWFPORTD;送到RD端口显示 BTFSSPORTB,0;判断按键是否松开 GOTO$-1;否;继续检测 CALLDELAY_20ms;是,调用延时,跳过抖动 BCFINTCON,INTF;是,清标志位 JMP SWAPFSAVES,W MOVWFSTATUS SWAPFSAVEW,F SWAPFSAVEW,W;恢复现场 RETFIE ;返回主程序 DELAY_20ms MOVLWD28;设置外部循环次数 MOVWFCOUNT1; LOOP3 MOVLWD237;设置内部循环次数 MOVWFCOUNT2; DECFSZCOUNT2,1;内部循环变量自减1,为0则跳转 GOTO$-1; DECFSZCOUNT1,1;外部循环变量自减1,为0则跳转 GOTOLOOP3; RE

文档评论(0)

linyin1994 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档