PIC实验报告--电平变化按键中断任课教师:周燕学院:信息学院班级:11级电科一、实验目的为了方便连接键盘,PIC中档单片机的I/O端口RB4~RB7具有一个特别的功能-----电平变化中断功能。单片机在使能此中断后(对RBIE置位),能够在PORTD4~PORTD7这四个引脚的电平发生变化时产生中断,从而使软件可以通过中断的方式管理连接在这4个引脚上的键盘。本实验通过连接到RB4和RB5的两个按键来演示按键中断功能。二、实验功能内容使用RB4和RB5的按键中断功能,实现按键识别功能.即在每次按下和RB4相连的KEY4后仅点亮LED4,每次按下和RB5相连的KEY5后仅点亮LED5,三、实现功能用到的硬件电路设计和电路板的链接方法将跳线将JR_RB和KEY4、KEY5短接,跳线器JP_RD和LED4、LED5短接。四、软件设计1.流程图设计2.程序设计和注释#includep16f877a.incCOUNTEQU20H;定义COUNT寄存器SAVEWEQU21H;定义SAVEW寄存器SAVESEQU22H;定义SAVES寄存器COUNT1EQU23H;定义COUNT1寄存器COUNT2EQU24H;定义COUNT2寄存器ORG00HNOP;空指令GOTOMAINORG0x004MOVWFSAVEWSWAPFSTATUS,WCLRFSTATUSMOVWFSAVES;保护现场GOTORBINT主程序设定PORTD全部为输出引脚并输出00H将端口B设置为输入并使能其弱上拉功能使PORTB的电平变化中断无条件循环中断服务程序中断入口程序保护中断现场通过RBIE和RBIF判断是否为外部中断调用20ms延时子程序,消除按键抖动读入RB4和RB5的电平取反后送入RD4和RD5通过检测RB4和RB5是否全部恢复为1来判断按键是否松开调用20ms延时子程序,消除断开抖动的影响清RBIF标志中断出口程序恢复中断现场中断返回YNNY使能全局中断和PORTB电平变化中断位;函数名称:main;**函数功能:使能由端口RB产生的中断;**使用说明:;**************************************************************MAINBCFSTATUS,RP1BSFSTATUS,RP0;转到体1CLRFTRISD;将PORTD设置为输出端口CLRFOPTION_REG;开启内部弱上拉MOVLWB'00111111'MOVWFTRISB;将RB0-RB5设置为输入端口BSFINTCON,RBIE;允许端口RB产生的中断BCFSTATUS,RP0;转到体0CLRFCOUNT;COUNT清零CLRFPORTD;将PORTD清零BSFINTCON,GIE;打开全局中断BSFINTCON,PEIE;打开外设中断GOTO$;函数名称:RBINT;函数功能:RB端口产生中断RBINT服务函数,判断是哪个按键被按击,并点亮对应的LED。RBINTBTFSSINTCON,RBIE;判断是否允许端口RB产生的中断GOTOJMP;否结束中断BTFSSINTCON,RBIF;判断是否为端口RB中断GOTOJMP;否结束中断CALLDELAY_20ms;是,调用延时子程序MOVFPORTB,0;RB的值送到W寄存器MOVWFCOUNT;存到COUNT寄存器MOVLWB'11001111';0xCF送到W寄存器,屏蔽不显示位IORWFCOUNT,1;和COUNT做或后存到COUNTCOMFCOUNT,0;反逻辑,COUNT取反后送到W寄存器MOVWFPORTD;送到RD端口显示BTFSSPORTB,4;判断按键4是否松开GOTO$-1;否;继续检测BTFSSPORTB,5;判断按键5是否松开GOTO$-1;否;继续检测CALLDELAY_20ms;是,调用延时子程序BCFINTCON,RBIF;是,清标志位JMPSWAPFSAVES,WMOVWFSTATUSSWAPFSAVEW,FSWAPFSAVEW,W;恢复现场RETFIE;**函数名称:DELAY_20ms;**函数功能:延时20msDELAY_20msMOVLWD'28';设置外部循环次数MOVWFCOUNT1;LOOP3MOVLWD'237';设置内部循环次数MOVWFCOUNT2;DECFSZCOUNT2,1;内部循环变量自减1,为0则跳转GOTO$-1;DECFSZCOUNT1,1;外部循环变量自减1,为0则跳转GOTOLOOP3;RETURN;返回主程序END五、实验结果与分析实验结果:将程序烧入目标板后,按下按键key4后led4亮,按下key5后,led4灭,led5亮。结果分析:在debug下烧入程序,打开watch窗口,添加SFR,运行程序观察。figure1figure2初始化figure3按下key4通过figure3可以看出,在终端入口设置断点,按下key4时,PORTB,4输出高电平,led4亮,进入中断后,终端总是能关闭。figure3按下key5按下key5时,PORTB,5输出高电平,led5亮。六、实验小结(碰到的问题及解决方法)经过这次的实验,我终于理解了老师上课时候说的中断的各个步骤。这次的实验使我对中断有了更深的了解和认识。