文档详情

单片机IO口控制实验实验报告.doc

发布:2017-03-25约2.36千字共5页下载文档
文本预览下载声明
单片机IO口实验实验报告 实验内容 编写程序,用P1.0~P1.2口连LED,查询拨盘开关SW1的状态来控制LED的亮和灭(P1.7口接SW1)。 编写程序,用P1.0~P1.2口连LED ,用按键开关KEY1作为外部中断输入INT0控制LED的亮和灭。(每按一次按键LED状态取反一次) 二、硬件点原理图 1、实验1电原理图:此次试验连线很简单,把P1.0-P1.2与LED相连,SW1与P1.7相连即可。 2、实验2电原理图:将P1.0-P1.2与LED连接,KEY1与P3.2连接 三、程序流程图 1、实验1程序流程图: 实验2程序流程图 程序清单 1、实验1程序代码 ORG 0000H LJMP MAIN ORG 0100H MAIN: CLR P1.0 CLR P1.1 CLR P1.2 ;初始化,将三盏灯熄灭 LOOP1: SETB P1.7 ;设置P1.7的寄存器为1,进入读的状态 JNB P1.7,LOOP2;通过P1.7口输入判断开关状态 SETB P1.0 ;开关开,即为高电平,所以点亮三盏灯 SETB P1.1 SETB P1.2 SJMP LOOP1 ;重新进行判断 LOOP2: CLR P1.0 CLR P1.1 CLR P1.2 ;开关为关,熄灭三盏灯 SJMP LOOP1 ;跳转,回到判断 END 2、实验2程序代码 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0003H ;采用INT0中断,因此中断入口地址为0003H LJMP LOOP ;跳转到中断程序 ORG 0100H MAIN: CLR P1.0 CLR P1.1 CLR P1.2 ;初始化,将三盏灯熄灭 SETB IT0 ;设置为下降沿触发 SETB EX0 ;使用INT0中断 SETB EA ;开启中断控制 SJMP $ ;自循环,等待中断 ORG 0200H LOOP:CPL P1.0 CPL P1.1 CPL P1.2 ;进入中断,将三盏灯状态取反 RETI ;退出中断 实验结果记录和分析 实验1结果记录: 将开关往上拨,此时P1.7口输入为高电平,三盏灯被点亮。将开关往下拨,此时P1.7口输入为低电平,三盏灯熄灭。表明程序符合要求。 实验2结果记录: 按下按键开关,按键开关由高电平变为低电平,因此出现下降沿,中断程序被处罚,此时三盏灯的状态改变,被点亮。再按下按键开关,三盏灯熄灭,如此循环。 在实验中,之所以采用下降沿触发而不是低电平触发,是因为机器周期很短,因此按下按键的时间内可能经过了多个机器周期,导致中断程序被触发多次。如果经过的机器周期为偶数个,那么最终灯的状态不会改变。 而在试验中,偶尔也会出现按下按键后灯的状态不改变的情况,我认为这是因为按键开关的抖动引起的,如图: 因此,可能会出现多个上升沿,导致中断程序被多次触发,影响结果。 要消除按键抖动,有两种办法:一是通过改变硬件 如图,RC构成了积分电路,使得电平不会发生突变,从而消除抖动,但是实验箱内的电路已经固定,因此无法实现。另一种实在程序中加入延时。 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0003H ;采用INT0中断,因此中断入口地址为0003H LJMP LOOP ;跳转到中断程序 ORG 0100H MAIN: CLR P1.0 CLR P1.1 CLR P1.2 ;初始化,将三盏灯熄灭 SETB IT0 ;设置为下降沿触发 SETB EX0 ;使用INT0中断 SETB EA ;开启中断控制 SJMP $ ;自循环,等待中断 ORG 0200H LOOP:CPL P1.0 CPL P1.1 CPL P1.2 ;进入中断,将三盏灯状态取反 CALL DELAY RETI ;退出中断 ORG 0300H DELAY:MOV R3,#250 LP3:MOV R2,#250 LP2:MOV R1,#2 LP1:DJNZ R1,LP1 DJNZ R2,LP2 DJ
显示全部
相似文档