
单片机实验三-中断与定时器实验.doc
6页实验三 中断、定时器实验、一、实验目的1. 学习外部中断和定时器的工作原理及使用方法2. 学习外部中断和定时器的初始化程序、应用程序的编写和调试二、实验仪器和设备PC机、WAVE软件、仿真器+仿真头、实验板、电源等三、实验说明本实验1通过开关向单片机提出中断请求,单片机响应中断进行计数,并通过LED数码管指示出计数值,从而观察中断的请求、响应的过程实验2通过单片机的定时器产生延时,模拟交通灯控制的方法通过本实验学生可以掌握单片机中断和定时器的工作原理及使用方法以及中断和定时器的初始化程序、应用程序的编写和调试四、实验内容1、开关S0—S1连接P3口做输入,P0输出接LED数码管,通过S2产生外部中断请求(/INT0)信号,在中断服务程序中完成十进制递增计数,并将计数值显示在LED数码管上,要求分别采用电平触发和边沿触发按上述要求完成S3产生外部中断请求编写初始化程序和中断服务程序注意开关抖动处理)2、P1.0--P1.7作输入口接拨动开关S0--S7;P0.0--P0.7作输出口,接发光二极管L1—L8,编写程序读取开关状态,将此状态在对应的发光二极管上显示出来,要求发光二极管(LED)按亮0.5秒、暗0.5秒闪烁,LED亮的同时,从P2.0送出1kHz的音频信号到音频驱动电路发声(持续0.5秒),将开关编号(0—7)显示在LED数码管上。
要求延时采用内部定时器T0,音频的产生采用内部定时器T1编写初始化程序和中断服务程序五、实验电路连线P0.0 ---- LED0 P3.2(/INT0)----- S2 P0.1 ---- LED1 P3.3(/INT1)----- S3 P0.2 ---- LED2 P0.3 ---- LED3 P0.4 ---- LED4 P0.5 ---- LED5 P0.6 ---- LED6 P0.7 ---- LED7 LED连接 外部中断请求输入abcdefgh(dp) a b c d e f g h(dp) P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 LED数码管各段与I/O的连接六、程序框图 1、中断实验中断实验程序ORG 0000H; SJMP START; ORG 0003H; //外部中断0程序入口地址 SJMP IN0;START : SETB EA ; //开总中断 SETB EX0; //外部中断0允许 SETB IT0; //下降沿触发 MOV IP,#01H; //最高优先 MOV DPTR,#TABLE; //表格地址 MOV P2,#0FFH; //清零LL1 : MOV A,#00H; MOVC A,@A+DPTR; //输入表格第一个数 CJNE A,#1BH,LL2; //是否结束字符,不是则到LL2 MOV DPTR,#TABLE; //是,则重新输入 LJMP LL1; //跳转到LL1LL2 : MOV P2,A; //输出数据 LJMP LL1; IN0 : CLR EX0; //关中断 LCALL DELAY; //延时 MOV A,P3; CJNE A,#0FBH,LL3; //对比是否低电平.真的有中断 PUSH PSW; //入栈 PUSH ACC; INC DPTR; //表格地址加一 POP ACC; POP PSW; // 出栈 SETB EX0; //开中断 RETI; //返回LL3 :SETB EX0; RETI;DELAY : MOV R7,#01H; //延时程序DE1 : MOV R6,#50;DE2 : MOV R5,#123; DJNZ R5,$; DJNZ R6,DE2; DJNZ R7,DE1; RETTABLE : DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 1BH END2、定时器实验框图定时器实验程序ORG 0000H; AJMP START; ORG 000BH; //定时器0入口 AJMP ITT0; ORG 001BH; //定时器1入口 LJMP ITT1; START : SETB EA; //开总中断 MOV IP,#08H; //设置优先级 MOV TMOD,#11H; //设置方式1 MOV TH0,#3CH; //置定时器0初值 MOV TL0,#0B0H; SETB ET0; //允许T0中断 MOV TH1,#0FEH; //定时器1初值 MOV TL1,#0CH; SETB ET1; //开启定时器1 SETB TR1; BEEP BIT P3.7; //蜂鸣器设置 SETB BEEP; MOV R0,#00H; //初始化 MOV R1,#00H; MOV P2,#0FFH; MOV P0,#0FFH; MOV P1,#0FFH; //p1口初始化给ffh值 L2 : MOV DPTR,#TABLE; //表地址存入DPTR MOV 50H,#0FEH; //比较初值载入地址50hL0 : MOV A,P1; //按键消抖 CJNE A,#0FFH,L1; AJMP L0;L1 : LCALL DELAY ; //延时再判断 MOV A,P1; CJNE A,#0FFH,LL1; AJMP L0;LL1 : CJNE A,50H,LL2; //是否与地址50h中数据相等 MOV R0,A; //按键值载入R0,R3 MOV R3,A; SETB TR0; //开定时器0 MOV A,#00H; MOVC A,@A+DPTR; MOV P2,A; //输出表格数据到数码管 LJMP L2; //返回程序开头LL2 : XCH A,50H; //交换数据 RL A; //左移 XCH A,50H; //再次交换,此时地址50h中数据左移一位 INC DPTR; //表格数据地址加一 LJMP LL1; //返回 继续比较ITT0 : MOV TH0,#3CH; //定时器0中断程序 重装计数值 MOV TL0,#0B0H; CLR TR0; //关中断 INC R1; //加一 CJNE R1,#0AH,LL3; //是否为10,即中断了500ms 不是跳转到LL3 MOV R1,#00H; //是,清零计数值 MOV A,R0; MOV P0,A; //输出led控制值 XRL A,R3; //异或 求反 让灯下次输出相反 CPL A; MOV R0,A;LL3 : SETB TR0; //开定时中段0 RETI; //返回ITT1 : CLR TR1; //定时中断1程序 关中断 MOV TH1,#0FEH; MOV TL1,#0CH; CJNE R0,#0FFH,LL4; //判断R0是否为0ffh 即灯是否为灭 是则转移到LL4 :CPL BEEP; //蜂鸣器求反 响LL4 : SETB TR1; //开定时器中断1 RETI; //放回DELAY : MOV R7,#01; //延时程序DE1 : MOV R6,#40;DE2 : MOV R5,#123; DJNZ R5,$; DJNZ R6,DE2; DJNZ R7,DE1; RET TABLE : DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H; ;。
