外部INT0 中断控制LED
用汇编实现利用中断控制LED灯定时的亮和灭
用汇编实现利用中断控制LED灯定时的亮和灭;********************************************************;AVR汇编程序实例;使用INT0、INT1控制LED数码管显示;Mega16 4MHz;********************************************************.include "m16def.inc".def temp = r23 ;临时变量.def counter = r24 ;计数变量.def flag=r25;中断向量区配置,FLASH空间$000~$028.org $000jmp RESET ; 复位处理jmp EXT_INT0 ; IRQ0 中断向量nopreti ; Timer2 比较中断向量nopreti ; Timer2 溢出中断向量nopreti ; Timer1 捕捉中断向量nopreti ; Timer1 比较A 中断向量nopreti ; Timer1 比较B 中断向量nopreti ; Timer1 溢出中断向量nopreti ; Timer0 溢出中断向量nopreti ; SPI 传输结束中断向量nopreti ; USART RX 结束中断向量nopreti ; UDR 空中断向量nopreti ; USART TX 结束中断向量nopreti ; ADC 转换结束中断向量nopreti ; EEPROM 就绪中断向量nopreti ; 模拟比较器中断向量nopreti ; 两线串行接口中断向量nopreti ; IRQ2 中断向量nopreti ; 定时器0 比较中断向量nopreti ; SPM 就绪中断向量nop.org $02ARESET: ; 上电初始化程序ldi r16, high(RAMEND)out SPH, r16ldi r16, low(RAMEND)out SPL, r16 ; 设置堆栈指针为RAM 的顶部ldi r16, 156ser tempout ddra, temp ; 设置PORTA为输出,段码输出out porta,temp ; 设置PORTA输出全1;设置中断方式ldi temp, 0x0aout mcucr, temp ; INT0、INT1下降沿触发ldi temp, 0xc0out gicr, temp ; 允许INT0、INT1中断out gifr, temp ; 清除INT0、INT1中断标志位clr counterclr flagsei ; 使能中断state: ldi zl, low(led_7 * 2)ldi zh, high(led_7 * 2) ; Z寄存器取得7段码组的首指针clr counterloop:cpi flag,1brbs 1,stopcpi counter,0x10brbs 1,statelpminc counterinc zlout porta, r0call delayrjmp loopstop: cpi flag,0brbs 1,looprjmp stopEXT_INT0: in temp, sregpush temp;mov temp,counter;push tempcpi flag,1brbs 1,abcinc flag;pop temp;mov counter, temppop tempout sreg, temp ; 中断现场恢复retiabc: dec flagpop temp;mov counter,temp;pop tempout sreg, temp ; 中断现场恢复retiled_7: ;7段码表.db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07.db 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71。
外部中断:实现LED灯的亮和灭
外部中断:实现LED灯的亮和灭实验:按⼀下独⽴按键,灯亮,再按⼀次,灯灭之前做过的独⽴按键实验也能实现这个功能,但是会占⽤很多CPU资源,不是好的⽅法,这⾥使⽤外部中断来实现⽐较合适效果和独⽴按键实验⼀样1. 下降沿⽅式触发:外部中断01234 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42#include <reg52.h>#define u16 unsigned int#define u8 unsigned charsbit LED1 = P2^0; // 要点亮的LED灯sbit k3 = P3^2; // 控制LED灯的独⽴按键// 延迟函数,延迟10usvoid delay(u16 time){while(time--);}// 中断条件void int0Init(){EA = 1; // 中断总允许位EX0 = 1; // 外部中断0允许位// 中断标志:边沿触发⽅式(下降沿有效),因为独⽴按键常态下是断开的,处于⾼电平,按下按键后为低电平 IT0 = 1;}// 主函数void main(){// 中断初始化int0Init();// 中断函数while(1);}// 中断函数void int0() interrupt 0{// 消抖,延迟10msdelay(1000);if(k3 == 0) // 按下k3按键{LED1 = ~LED1; // LED灯切换状态}}1. 下降沿⽅式触发:外部中断1 1234 5 6 7 8 9 10 11 12 13#include <reg52.h>#define u16 unsigned int#define u8 unsigned charsbit LED1 = P2^0; // 要点亮的LED灯sbit k4 = P3^3; // 控制LED灯的独⽴按键// 延迟函数,延迟10usvoid delay(u16 time){13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42{while(time--);}// 中断条件void int1Init(){EA = 1; // 中断总允许位EX1 = 1; // 外部中断1允许位// 中断标志:边沿触发⽅式(下降沿有效),因为独⽴按键常态下是断开的,处于⾼电平,按下按键后为低电平 IT1 = 1;}// 主函数void main(){// 中断初始化int1Init();// 中断函数while(1);}// 中断函数void int1() interrupt 2{// 消抖,延迟10msdelay(1000);if(k4 == 0) // 按下k3按键{LED1 = ~LED1; // LED灯切换状态}}以上是外部中断0和外部中断1的实验,可以⽤外部中断0和外部中断1控制同⼀盏灯,模拟两个开关控制同⼀盏灯,按下⼀个开关,灯亮,去按下另外⼀个开关,灯灭。
单片机实验――利用中断控制LED灯(精)
单片机实验——利用中断控制LED灯1.实验目的(1掌握单片机中断的基本原理。
(2掌握单片机中断程序的编制方法。
2.预习要点(1单片机中断基本原理(2中断程序编制方法3.实验设备计算机、单片机实验箱、信号发生器。
4.实验内容基本要求:将信号发生器输出的脉冲信号连接到CPU的INT0上,将CPU的P1.0到P1.7和八个LED连接,脉冲信号为5V、100Hz,每输入一百个脉冲LED灯亮一次,并且LED灯顺序循环移位一次,形成跑马灯。
扩展要求:提高输入脉冲频率,但跑马灯的显示频率不变。
实验4ORG 0000HAJMP MAIN;******************************************;中断子程序入口地址ORG 0003HLJMP EXINT0;******************************************;主程序ORG 0030HMAIN:MOV SP,#70HSETB IT0 ;设置为下降沿触发SETB EX0 ;开INT0的中断开关SETB EA ;开总中断开关MOV R0,#01H ;只让一盏灯亮,R0赋给P1口MOV R3,#00H ;R3用来记中断次数MOV A,R0MOV P1,AHERE:SJMP HERE ;死循环,还有另外一种形式是SJMP $ ;******************************************;外中断0服务程序EXINT0:INC R3 ;每来一次中断R3自加1CJNE R3,#100,NEXT ;当来了100次中断之后,R3清零,然后P1口的MOV R3,#00H ;数左移一位,也就是让下一个LED亮MOV A,R0RL AMOV P1,AMOV R0,A ;保存左移之后的结果NEXT:RETI;******************************************END实验4扩展ORG 0000HAJMP MAIN;******************************************;中断入口地址ORG 0003HLJMP EXINT0;******************************************;主程序ORG 0030HMAIN:MOV SP,#70H;初始化外中断0SETB IT0SETB EX0SETB EA;初始化8155MOV DPTR,#0100HMOV A,#03HMOVX @DPTR,A;显示缓存区MOV 30H,#1MOV 31H,#2MOV 32H,#3MOV 33H,#4MOV 34H,#5MOV 35H,#6MOV 36H,#7MOV 37H,#8MOV 38H,#9 ;这一句后面的CJNE会用到,用来判断1-8是否已经显示完了MOV R2,#00H ;用R2来记中断来的次数MOV 40H,#01H ;用40H存放LED的状态MOV A,40HMOV P1,AMOV R0,#30H ;显示缓存区首地址给R0MOV R4,#0FEH ;字位送R4,因为只需要亮一个数码管,所以选择静态显示,没必要用动态显示LOOP:LCALL DISPLAY ;循环调用显示程序SJMP LOOP;******************************************;中断子程序EXINT0:INC R2CJNE R2,#100,NEXT ;来100次中断之后才进行操作MOV R2,#00HMOV A,40H ;移动LEDRL AMOV P1,AMOV 40H,AINC R0 ;让显示的数+1CJNE @R0,#9,NEXT ;如果到了9就回到1,因为我们只显示1-8 MOV R0,#30HNEXT:RETI;******************************************;显示子程序DISPLAY:MOV DPTR,#0102H ;送字位MOV A,R4MOVX @DPTR,AMOV DPTR,#DTAB ;查表,送字形MOV A,@R0MOVC A,@A+DPTRMOV DPTR,#0101HMOVX @DPTR,ALCALL DELAYLD1:RET;****************************************** ;字形表DTAB:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FH ;0-FDB 77H,7CH,39H,5EH,79HDB 71H;****************************************** ;延时1ms子程序DELAY:MOV R7,#02HDEL1:MOV R6,#0FFHDEL2:DJNZ R6,DEL2DJNZ R7,DEL1RET;****************************************** ENDORG 0000HAJMP MAIN;中断入口地址ORG 0003HLJMP EXINT0;******************主程序ORG 0030HMAIN:MOV SP,#70H;初始化外中断0SETB IT0SETB EX0SETB EA;初始化8155MOV DPTR,#0100HMOV A,#03HMOVX @DPTR,A;显示缓存区MOV 30H,#1MOV 31H,#2MOV 32H,#3MOV 33H,#4MOV 34H,#5MOV 35H,#6MOV 36H,#7MOV 37H,#8MOV 38H,#9MOV 40H,#01H ;用40H存发光二极管的状态MOV R2,#00HMOV A,40HMOV P1,AMOV R0,#30HMOV R4,#0FEHLOOP:LCALL DISPLAY SJMP LOOP;************************* ;中断子程序EXINT0:INC R2CJNE R2,#100,NEXTMOV R2,#00HMOV A,40HRL AMOV P1,AMOV 40H,AINC R0CJNE @R0,#9,NEXT1MOV R0,#30HNEXT1:MOV A,R4RL AMOV R4,ANEXT:RETI;显示子程序DISPLAY:MOV A,R4MOV DPTR,#0102HMOVX @DPTR,AMOV DPTR,#DTABMOV A,@R0MOVC A,@A+DPTRMOV DPTR,#0101HMOVX @DPTR,ALCALL DELAY LD1:RET ;字形表 DTAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH ;延时 1ms 子程序 DELAY: MOVR7,#02H DEL1:MOV R6,#0FFH DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET END ;说明: ;R4 是保存数码管字位 ;R3 ;R2 是保存中断次数满 100 清 0 ;R1 ;R0 是保存数码管的字型实验 5(1 ORG 0000H SJMPMAIN ;****************************************8*********** ;中断入口地址ORG 000BH LJMP T0INT ;************************************************ ;主程序 ORG 0030H MAIN:MOV SP,#70H MOV TMOD,#01H ;T0 选择方式 1,16 位定时器 MOV TH0,#0F6H ;#9EH ;因为用示波器观察 20HZ 的方波不易观察,频率太低了,所以我换成了 MOV TL0,#3CH ;#58H ;200HZ 的,原理都是一样的,这样只是为了让波形更容易观察,后者是 20HZ 的初值 SETB EA ;开总中断 SETB ET0 ;开定时器 0 中断 SETB TR0 ;启动定时器 0 SJMP$ ;死循环 ;********************************************************;定时器 0 中断子程序 (25ms 2.5ms 来一次中断 T0INT:MOV TH0,#0F6H ;#9EH ;重新赋初值 MOV TL0,#3CH ;#58H CPL P1.1 ;改变电平RETI ;******************************************************。
用按键(采用外部中断0或1的方式)控制彩灯的运行
实验一标志寄存器实验目的:用按键(采用外部中断0或1的方式)控制彩灯的运行。
实验方法:1、通过在在中断过程中,设置标志变量flag(取值为0表示左移,1表示右移,2自定义)来判断按键被按下,每次按下切换一种显示方式。
2、当flag>2,则被清零,主程序按照flag的取值,分别执行不同的显示方式。
3、为了确保外部中断信号可靠,可对按键采取软件消抖处理。
实验程序编写:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuint flag=0;uchar a[]={0xe7,0xdb,0xbd,0x7e};uchar LED=0xfe;uint i;void delay(unsigned int x) //定义延时函数{uchar i;while(x--){for(i=0;i<125;i++) //通过循环实现延迟功能{;}}}void intersvr0(void) interrupt 0 using 1 //INTO中断服务程序{flag=flag+1;if (flag>=3)flag=0;}void main(void){P0=0x00; //初始化p0口保持LED全亮EA=1; //开启中断总控制位IT0=1; //开启外部中断0控制位,采用边沿触发EX0=1; //允许中断0中断while(1){if (flag==0){P0=0x01;{LED=_crol_(LED,1);P0=LED;delay(500);}}if (flag==1){P0=0x80;{LED=_cror_(LED,1); P0=LED;delay(500);}}if (flag==2){{for (i=0;i<3;i++){LED=a[i];P0=LED;delay(500);P0=0xff;}}}}; //判断是否有按键按下,若有按键按下执行中断服务程序}实验结果:当运行后,通过按动一个键,彩灯在左移,右移和自定义花样(查表法)三种闪亮方式之间顺序切换。
采用外部中断方式控制广告灯
一.【设计题目】:采用外部中断方式控制广告灯1.设计要求:采用外部中断方式控制广告灯,首先用8个彩灯显示作先左移8次,再往右移8次,然后按以上规律往返执行,但是每来一个外部触发,上述规律就要暂停运行,将目前彩灯的状态闪烁5次,之后再继续按上述规律运行。
二.【设计步骤】1.引言单片机在我们日常生活中有着重要的做用,这次课程设计我就选了一个在生活中随处可见的广告灯来进行程序的编写及设计。
在这次设计中我主要用到1片80C51的芯片,8个发光二极管,8个电阻,2个电容,1个按键sw等80C51的四个端口都可以作为通用的输入/输出(I/O)口,P0口作为输出口能驱动8个LSTTL输入,P1、P2、P3口输出缓冲器能驱动4个LSTTL。
2.设计内容(1)中断系统原理:①与中断有关的几个特殊功能寄存器●中断允许寄存器IE。
中断允许寄存器IE是一个SFR寄存器,用户通过对其中一个或某些位进行设置来控制中断的开放或禁止,控制CPU中断的开放或禁止,控制某个或某些中断的开放和禁止。
●中断优先级控制寄存器IP。
中断优先级控制寄存器IP是用于控制中断响应优先级别的SFR,用户可以根据需要对它的某些位进行控制,从而设置某个或某些中断源响应优先级别的高低。
●定时控制寄存器TCON。
对TCON中的位IT0和IT1进行设置,可以设置外部中断的触发方式,将IT0(或IT1)设置为1表示外部中断0(或外部中断1)为负跳变触发,设置为0表示外部中断0(或外部中断1)为低电平触发。
②初始化编程。
初始化编程的目的是为了设置中断系统的工作情况,通过以下指令实现:MOV IE,#data ;设置中断允许MOV IP,#data ;设置中断优先级别③.外部中断方式控制广告灯的实验线路连接图如下图(1)所示:(2)硬件电路硬件电路如下图(2)所示,P1口接8个发光二极管,按键sw为触发开关,按键sw每按下就从80C51的INT0引脚输入一个低电平。
单片机实验――利用中断控制LED灯(精)
单片机实验——利用中断控制LED灯1.实验目的(1掌握单片机中断的基本原理。
(2掌握单片机中断程序的编制方法。
2.预习要点(1单片机中断基本原理(2中断程序编制方法3.实验设备计算机、单片机实验箱、信号发生器。
4.实验内容基本要求:将信号发生器输出的脉冲信号连接到CPU的INT0上,将CPU的P1.0到P1.7和八个LED连接,脉冲信号为5V、100Hz,每输入一百个脉冲LED灯亮一次,并且LED灯顺序循环移位一次,形成跑马灯。
扩展要求:提高输入脉冲频率,但跑马灯的显示频率不变。
实验4ORG 0000HAJMP MAIN;******************************************;中断子程序入口地址ORG 0003HLJMP EXINT0;******************************************;主程序ORG 0030HMAIN:MOV SP,#70HSETB IT0 ;设置为下降沿触发SETB EX0 ;开INT0的中断开关SETB EA ;开总中断开关MOV R0,#01H ;只让一盏灯亮,R0赋给P1口MOV R3,#00H ;R3用来记中断次数MOV A,R0MOV P1,AHERE:SJMP HERE ;死循环,还有另外一种形式是SJMP $ ;******************************************;外中断0服务程序EXINT0:INC R3 ;每来一次中断R3自加1CJNE R3,#100,NEXT ;当来了100次中断之后,R3清零,然后P1口的MOV R3,#00H ;数左移一位,也就是让下一个LED亮MOV A,R0RL AMOV P1,AMOV R0,A ;保存左移之后的结果NEXT:RETI;******************************************END实验4扩展ORG 0000HAJMP MAIN;******************************************;中断入口地址ORG 0003HLJMP EXINT0;******************************************;主程序ORG 0030HMAIN:MOV SP,#70H;初始化外中断0SETB IT0SETB EX0SETB EA;初始化8155MOV DPTR,#0100HMOV A,#03HMOVX @DPTR,A;显示缓存区MOV 30H,#1MOV 31H,#2MOV 32H,#3MOV 33H,#4MOV 34H,#5MOV 35H,#6MOV 36H,#7MOV 37H,#8MOV 38H,#9 ;这一句后面的CJNE会用到,用来判断1-8是否已经显示完了MOV R2,#00H ;用R2来记中断来的次数MOV 40H,#01H ;用40H存放LED的状态MOV A,40HMOV P1,AMOV R0,#30H ;显示缓存区首地址给R0MOV R4,#0FEH ;字位送R4,因为只需要亮一个数码管,所以选择静态显示,没必要用动态显示LOOP:LCALL DISPLAY ;循环调用显示程序SJMP LOOP;******************************************;中断子程序EXINT0:INC R2CJNE R2,#100,NEXT ;来100次中断之后才进行操作MOV R2,#00HMOV A,40H ;移动LEDRL AMOV P1,AMOV 40H,AINC R0 ;让显示的数+1CJNE @R0,#9,NEXT ;如果到了9就回到1,因为我们只显示1-8 MOV R0,#30HNEXT:RETI;******************************************;显示子程序DISPLAY:MOV DPTR,#0102H ;送字位MOV A,R4MOVX @DPTR,AMOV DPTR,#DTAB ;查表,送字形MOV A,@R0MOVC A,@A+DPTRMOV DPTR,#0101HMOVX @DPTR,ALCALL DELAYLD1:RET;****************************************** ;字形表DTAB:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FH ;0-FDB 77H,7CH,39H,5EH,79HDB 71H;****************************************** ;延时1ms子程序DELAY:MOV R7,#02HDEL1:MOV R6,#0FFHDEL2:DJNZ R6,DEL2DJNZ R7,DEL1RET;****************************************** ENDORG 0000HAJMP MAIN;中断入口地址ORG 0003HLJMP EXINT0;******************主程序ORG 0030HMAIN:MOV SP,#70H;初始化外中断0SETB IT0SETB EX0SETB EA;初始化8155MOV DPTR,#0100HMOV A,#03HMOVX @DPTR,A;显示缓存区MOV 30H,#1MOV 31H,#2MOV 32H,#3MOV 33H,#4MOV 34H,#5MOV 35H,#6MOV 36H,#7MOV 37H,#8MOV 38H,#9MOV 40H,#01H ;用40H存发光二极管的状态MOV R2,#00HMOV A,40HMOV P1,AMOV R0,#30HMOV R4,#0FEHLOOP:LCALL DISPLAY SJMP LOOP;************************* ;中断子程序EXINT0:INC R2CJNE R2,#100,NEXTMOV R2,#00HMOV A,40HRL AMOV P1,AMOV 40H,AINC R0CJNE @R0,#9,NEXT1MOV R0,#30HNEXT1:MOV A,R4RL AMOV R4,ANEXT:RETI;显示子程序DISPLAY:MOV A,R4MOV DPTR,#0102HMOVX @DPTR,AMOV DPTR,#DTABMOV A,@R0MOVC A,@A+DPTRMOV DPTR,#0101HMOVX @DPTR,ALCALL DELAY LD1:RET ;字形表 DTAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH ;延时 1ms 子程序 DELAY: MOVR7,#02H DEL1:MOV R6,#0FFH DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET END ;说明: ;R4 是保存数码管字位 ;R3 ;R2 是保存中断次数满 100 清 0 ;R1 ;R0 是保存数码管的字型实验 5(1 ORG 0000H SJMPMAIN ;****************************************8*********** ;中断入口地址ORG 000BH LJMP T0INT ;************************************************ ;主程序 ORG 0030H MAIN:MOV SP,#70H MOV TMOD,#01H ;T0 选择方式 1,16 位定时器 MOV TH0,#0F6H ;#9EH ;因为用示波器观察 20HZ 的方波不易观察,频率太低了,所以我换成了 MOV TL0,#3CH ;#58H ;200HZ 的,原理都是一样的,这样只是为了让波形更容易观察,后者是 20HZ 的初值 SETB EA ;开总中断 SETB ET0 ;开定时器 0 中断 SETB TR0 ;启动定时器 0 SJMP$ ;死循环 ;********************************************************;定时器 0 中断子程序 (25ms 2.5ms 来一次中断 T0INT:MOV TH0,#0F6H ;#9EH ;重新赋初值 MOV TL0,#3CH ;#58H CPL P1.1 ;改变电平RETI ;******************************************************。
实验四led灯和数码显示器的中断控制
实验四LED灯和数码显示器的中断控制一、实验目的:掌握外部中断的工作原理,熟悉中断编程及Keil平台软件调试方法。
二、实验原理:实验电路如图A.53所示。
K1和K2分别接于端口P3.2和P3.3,按压后的电平负跳变可分别产生INT0中断请求和INT1中断请求。
INT0中断响应后取端口P0.4电平,使指示灯D1的状态反转,INT1中断响应后使计数值增1并送给数码管LED显示。
电路原理图及中断原理分析:按键K1接外部中断0,K2接外部中断1。
P0.4接指示灯D1,P2口接数码管,每按一次K1键电平产生负跳变,INT0中断响应后取端口P0.4电平,D1的状态反转;每按一次K2键产生负跳变,INT1中断响应使计数值增1并使数码管显示该数值,变化范围为0~F。
三、实验步骤:(1)、按照表A.5所示将元件添加到Proteus ISIS对象选择列表中,并仿照图A.53完成电路原理图绘制。
(2)、在Keil中编写C51程序,并使之编译通过。
(3)、在Keil中加载编译后的可执行文件,并控制Proteus中的程序仿真运行。
Category Reference Value Microprocessor ICs U1 80C51Optoelectromics D1 LED-GREENSwitches&Relays K1~K2 BUTTONResistors R1~R2/100 RES Optoelectronics LED 7SEG-COM-CAT-GRN四、实验要求:(1)、主函数在程序初始化完成后进入原地循环状态,等待中断请求。
(2)、两路外部中断均设为下降沿触发方式,且为自然优先级。
(3)、计数变量初值为0,变化范围为0~F。
(4)、实验报告内容包括:电路原理图及分析、中断原理分析,C51源程序(含注释语句),仿真运行截屏图,实验小结。
五、C51源程序如下:#include< reg51.h>char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};char flag;sbit p0_4= P0^4;void delay(unsigned int time){unsigned int j =0;for(;time>0;time--)for(j=0;j<125;j++);}int0_key () interrupt 0{p0_4=!p0_4;}int1_key () interrupt 2{delay(200);P2=led_mod[flag%16];delay(200);flag++;}void main(void) {flag=0;IT0= 1;EX0= 1;EX1= 1;EA= 1;while(1);}六、试验结果:(1)开始运行时如下图:(2)、按键后运行图如下:实验结果分析:由运行结果可以看出,按键K1产生外部中断0控制D1的状态,使指示灯D1由亮到暗一次变化;按键K2产生外部中断1使LED显示0~F不同数值。
用按键(采用外部中断0或1的方式)控制彩灯的运行
实验一标志寄存器实验目的:用按键(采用外部中断0或1的方式)控制彩灯的运行。
实验方法:一、通过在在中断过程中,设置标志变量flag(取值为0表示左移,1表示右移,2自定义)来判断按键被按下,每次按下切换一种显示方式。
二、当flag>2,则被清零,主程序按照flag的取值,分别执行不同的显示方式。
三、为了确保外部中断信号可靠,可对按键采取软件消抖处理。
实验程序编写:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuint flag=0;uchar a[]={0xe7,0xdb,0xbd,0x7e};uchar LED=0xfe;void delay(unsigned int x) //定义延时函数{uchar i;while(x--){for(i=0;i<125;i++) //通过循环实现延迟功能{;}}}void intersvr0(void) interrupt 0 using 1 //INTO中断服务程序{flag=flag+1;if (flag>=3)flag=0;void main(void){P0=0x00; //初始化p0口保持LED全亮EA=1; //开启中断总控制位IT0=1; //开启外部中断0控制位,采用边沿触发EX0=1; //允许中断0中断while(1){if (flag==0){P0=0x01;{LED=_crol_(LED,1);P0=LED;delay(500);}}if (flag==1){P0=0x80;{LED=_cror_(LED,1); P0=LED;delay(500);}}if (flag==2){{for (i=0;i<3;i++) {LED=a[i];P0=LED;delay(500);P0=0xff;}}}}; //判断是否有按键按下,若有按键按下执行中断服务程序}实验结果:当运行后,通过按动一个键,彩灯在左移,右移和自定义花样(查表法)三种闪亮方式之间顺序切换。
实验二 外部中断实验
实验二外部中断实验一、实验目的1.学会使用Keil μVision3和Proteus软件进行单片机汇编语言和C语言程序设计与开发。
了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式, 掌握中断功能的编程方法。
二、实验内容1.单片机的P1.0引脚连接LED指示灯D0。
单片机的P3.2引脚(INT0)连接按键开关K, 作为中断源, 每次按键都会触发INT0中断。
在INT0中断服务程序中将P1.0端口的信号取反, 使LED指示灯D0在点亮和熄灭两种状态间切换, 产生LED指示灯由按键开关K控制的效果。
三、实验程序ORG 0000H ;MCS-51复位入口AJMP MAIN ;转入主程序ORG 0003H ;INTO中断入口AJMP EX_INTO ;转入中断服务程序ORG 0100H ;主程序入口MAIN: MOV SP,#40H ;中断初始化设置堆栈SETB IT0 ;中断请求信号设置为边沿触发方式 SETB EA ;开放总中断SETB EX0 ;允许INTO中断HERE: SJMP HERE ;原地踏步(处理其他事务)等待中断到来ORG 0200H ;中断服务程序EX_INTO:CPL P1.0 ;改变指示灯状态RETI ;中断返回END四、实验原理图五、实验仿真及结果当开关断开时,LED指示灯D1熄灭,如图1所示:图1当按键开关接通时, LED指示灯D1点亮, 如图2所示:图2六、实验总结通过本次实验, 进一步熟悉了对Keil μVision3软件的操作, 另外还接触到了Proteus软件。
掌握了中断功能的编程方法, 加上两个上述软件, 使得单片机汇编语言得以仿真。
进一步深化了解和掌握MCS-51单片机的中断的相关知识, 包括中断的组成、工作原理、处理过程以及外部中断的中断触发方式。
外部 INT0 中断控制 LED
实验报告单
实验名称:外部 INT0 中断控制 LED
实验项目:外部 INT0 中断控制 LED
一、实验目的:
了解中断功能及实现以中断跳转和返回来控制LED灯的亮灭。
二、实验器材:
三、实验原理:
预备课程知识:
①IE –中断允许控制寄存器
②TCON –控制寄存器
③EA 全局中断允许位,当此位是1时中断可用。
(重要)
④ET2 定时器/计数器2中断允许位
⑤ES 串口中断允许位
⑥ET1 定时器/计数器1中断允许位
⑦EX1 外部中断1允许位
⑧ET0 定时器/计数器0中断允许位
⑨EX0 外部中断0允许位(重要)
⑩和定时器中断类似,使用外部中断需要开启全局中断允许位EA,以及开启外部中断0允许位EX0
原理写在代码中
四、实验步骤:
①搭载电路
②查询预备知识,利用课本和网络
③写出外部中断控制的汇编代码
④调试代码
⑤将汇编代码搭载进CPU查看结果
⑥根据汇编编写C语言代码
⑦调试代码
⑧将C语言代码搭载进CPU
⑨检查实验结果
⑩实验心得
11 实验结束
五、程序代码及实验结果:
C语言:
汇编:
实验结果:。
用外中断方式读按键,控制灯的亮灭
13这一颗,我们学习外中断的用法。
也就是外部IO的中断INT0,和INT1。
对应的引脚是P32和P33。
在我们的电路图中,P32也就是接在K1的引脚。
所以当我们按下P32接到地的时候,可以触发一个INT0中断,当然,必须预先初始化才会启动。
这种中断方式的按键,可以实现按键的立即响应。
对于需要快速响应的场合是很有用的。
外部IO中断还常用在用IO模拟通讯的场合,可以对数据的到来立即响应。
下面请看代码:―――――――――――――――――#define uchar unsigned char //定义一下方便使用#define uint unsigned int#define ulong unsigned long#include <reg52.h> //包括一个52标准内核的头文件sbit P10 = P1^0; //头文件中没有定义的IO就要自己来定义了sbit P11 = P1^1;sbit P12 = P1^2;sbit P13 = P1^3;sbit K1= P3^2;bit ldelay=0; //长定时溢出标记,预置是0uchar speed=10; //设置一个变量保存默认的跑马灯的移动速度uchar speedlever=0; //保存当前的速度档次char code dx516[3] _at_ 0x003b;//这是为了仿真设置的//用外中断方式读按键K1,点亮一个LEDvoid main(void) // 主程序{IT0=1; //外中断跳变产生中断EX0=1;EA=1; //打开总中断while(1) //主程序循环{}}//外中断0int0() interrupt 0{P10=0; //在中断里点亮LED} ――――――――――――――――――――――――――――――――――/quty88/.com/quty88/。
实验六 外部中断方式控制参考答案LED
实验六外部中断方式控制L E D姓名:学号:班级:实验时间:实验地点:指导教师:一、实验目的1、掌握DVCC仿真系统的使用方法2、I/O口的使用方法3、掌握外部中断的方法4、掌握定时器的使用方法二、实验设备DVCC仿真系统一套、计算机一台三、实验内容1、用K0~K3控制LED0~LED32、当中断没发生时,8个LED按间隔发光。
当P3.3 (INT1)为低电平(合上K0)时,8个LED整体闪烁16次。
3. 在P3.3 (INT1)发生中断后,8个LED整体闪烁16次;P3.2(INT0)中断,4个LED循环发光16次。
设P3.3(INT1)优先中断,观察两个中断顺序不同的结果有什么不同。
四、实验线路五、程序清单(含注释)和操作步骤1、实验1ORG 0000H LOOP: MOV P1, #0FHMOV A, P1ANL A, #0FHS W A P AMOV P1, ASJMP LOOPEND拨动K0~K3观察LED0~LED3在MOV P1, #0FH 前面加“;”化 ,这条指令的功能 定义P1的低四位为输入口 ,若使某I/O 端口为输入口,必须将该端口先 写1 ,所以称P1为 准双向I/O 口。
2. 实验2将P1.0~P1.3改接LED4~LED7。
P3.2接开关K0. O R G 0000H A J M P M A I N O R G 0003H S J M P Z D 0 O R G 0020H M A I N :C L R I T 0 S E T B E A S E T B P X 0 S E T B E X 0 M O V A , #0A A H H A 1S 1:M O V P 1, A A J M P H A 1S 1 D E L A Y :M O V R 5, #0F F H D E L A Y 1:M O V R 4, #0F F H D J N Z R 4, $ D J N Z R 5, D E L A Y 1 R E T1) 开关置0不动观察到的现象是 八个LED 不停地整体亮灭 ;开关置0立即置1,观察到的现象是八个LED 整体亮灭16次后返回亮灭相间 。
51单片机外部中断INT0实例(汇编程序)
51单⽚机外部中断INT0实例(汇编程序);普中51开发板;单⽚机的P3.2(INT0)引脚与按键K3脚连接;⽤汇编语⾔实现:按⼀次K1外部中断INT0响应⼀次,LED显⽰值加1(⼗进制),;前提是共阴数码LED第⼀位,需要设定,由P0⼝控制。
ORG 0000HLJMP STARTORG 0003HLJMP INTT0ORG 0600HSTART: SETB EASETB EX0 ; 打开外部中断0SETB IT0 ; 跳变沿出发⽅式(下降沿)这个⽅法⽐较稳定;CLR IT0 ; 令中断0为电平触发,这个⽅式需要有延时程序,;否则,单⽚机处理速度快,按⼀下按键,;已经处理了很多个低电平中断了。
CLR P2.2 ;段位选择第⼀位CLR P2.3CLR P2.4CLR1: MOV R0,#00HDISPLAY: MOV DPTR,#TAB ;给字形表的初地址MOV A,R0 ;将要显⽰的数给A;/////////////////////////MOV B, A ;save a valueCLR CSUBB A, #10H ;如果已计数到15,说明⼀次循环结束MOV A, B ;load a valueJNC CLR1 ;C=1,重新开始,R0=00H,若等于0,回displayMOVC A,@A+DPTR ;在字形表中取数放到AMOV P0,A ;假设是P0⼝输出要显⽰的数据把A放到P0中SJMP DISPLAY ;循环显⽰等待中断INTT0: INC R0 ;中断中有按键着加1RETITAB: DB 3FH,06H,5BH,4FH,66H ;字形表0-15DB 6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79H,71HEND。
用按键采用外部停止0或1的方式控制彩灯的运行
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
中断控制LED流水灯
硬件消抖用RS触发器 软件消抖
如果按键较多,常用软件方法去抖,即检 测出键闭合后执行一个延时程序,5ms~ 10ms的延时,让前沿抖动消失后再一次检 测键的状态,如果仍保持闭合状态电平, 则确认为真正有键按下。当检测到按键释 放后,也要给5ms~10ms的延时,待后沿抖 动消失后才能转入该键的处理程序。
IT0 = 1; EX0 = 1; EA = 1;
//外部中断输入下降沿有效 //允许X0中断 //开放总中断
temp = 0xfe; P1 = temp; while(1);
} void T0_int(void) interrupt 1 //每隔10ms执行一次 { TH0 = (65536 - 10000) / 256; //定时10ms@12MHz TL0 = (65536 - 10000) % 256; i++;
D1
D2
D3
D4
D5
D6
D7
D8
18
XTAL2
LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW 9 RST
29 30 31
PSEN ALE EA
R1
PULLUP
RN1
1 2 3 4 5 6 7 8 300 16 15 14 13 12 11 10 9 1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
//设定T0定时方式1 //定时10ms@12MHz
08 项目二 任务1:外部中断控制LED
QQ: 43965356
机电教研室 实训四号楼 208
提问:
1、MCS-51单片机中断系统有几个中断源?分别是什么? 事先约定的优先顺序是怎样的? 2、如何进行中断允许控制?如何进行中断优先级控制? 3、中断优先的规则是什么?
实验6 开关控制灯闪烁—用中断思想
ORG 0000H
SJMP MAIN ORG 0003H
TCON
TF1 TR1 TF0 TR0 IE1 IT1
IE0 IT0
IT1 —— 外部中断1(/INT1)触发类型控制位。 IT1 = 0 ,低电平触发。IT1 = 1 , 下降沿触发。 IT0 —— 外中断0(/INT0)触发类型控制位,用法同IT1。
开始 P3.1=1? Y 设为低电平触发 打开中断INT0 等待中断 结束 主程序流程图 N 设为下降沿触发
中断模式效果验证
编写主程序,读取K0状态,当其与地端闭合时(P1.3 为低电平)初始化为下降沿中断,反之,初始化为低电平 中断,且发光二极管灭;编写中断服务程序,使图中的发 光管闪烁5次,间隔250ms,即中断服务程序的执行时间为 2.5秒,退出中断程序时,使发光管灭。
信号发生器
实验8 中断模式效果验证
;P1.0取反
;中断返回
十六进制加一闪灯 中断方法
开始 初始化中断设置 初始化P1- 灯全灭 初始化 累加器A清零 等待中断 (死循环) 结束 主程序流程图 关中断 P1=A+1 开中断 中断子程序流程图
无防抖
开始 初始化中断设置 初始化P1- 灯全灭 初始化 累加器A清零 等待中断 (死循环) 结束 主程序流程图
关中断 点亮L0 中 断 熄灭L0 子 程 延时 序 流 … … 程 重复5次亮灭 图 开中断 延时
实验四—— LED灯和数码显示器的中断控制
实验课程:单片机原理及应用实验名称: 实验四—— LED灯和数码显示器的中断控制实验日期: 2013 年 4 月 11 日一、实验目的掌握外部中断的工作原理,学会中断程序设计。
二、实验内容1、按图绘制实验四电路原理图:2、采用外部中断原理编程,按键K1、K2均设置为下降沿触发方式,且为自然优先级:3、编写实验四C51程序,实现如下功能:K1对应于D1状态反转: K2对应于0 F间的数码管加一计数显示:3、观察仿真结果,完成实验报告。
三、实验要求提交的实验报告中应包括:电路原理图,外部中断工作原理阐述,源程序, 运行效果图,实验小结。
提交实验报告的电子邮件主题及存盘1、电路原理图(含电路分析)图1 实验原理图电路分析:图1为实验原理图。
电路由80C51芯片,两个开关K1、K2,电阻,LED灯,LED显示器组成。
其中LED显示器接在P2.0~P2.6上并采用共阴极接法,上拉电阻及LED灯接在P0.2,因为P0口内部没有上拉电阻,为使漏极开路有效,必须通过外接上拉电阻与电源连通。
K1、K2分别接INT0:P3.2)和INT1:P3.3)引脚,公共端接地,单击后可产生下降沿脉冲:D1接P0.4引脚,高电平驱动 ,通过上拉电阻接电源:共阴极数码管LED1接P2口,静态显示。
2、外部中断工作原理阐述:以K1为例)当K1按下后,外部中断信号由INT0引脚传送进来。
外部中断电源可以分为两种控制方式,即电位触发式和下降沿触发式,试验中使用的是脉冲触发,即下降沿出发。
下降沿中断方式是INT0引脚由1变化到0的瞬间产生中断,而此时IE0置1,工作标志设定,此工作标志会一直保留着,知道执行完中断服务程序后才会清除。
K1接于端口P3.2,按压后的电平负跳变可分别产生INT0中断请求。
INT0中断响应后取端口P0.4电平,使指示灯D1的状态反转。
3、C51程序:含流程图与注释语句)程序流程图如图2图2 程序流程图C51程序:#include<reg51.h>charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5 e, 0x79,0x71}; //定义字符型数组变量led_mode,并初始化为字符0~F的共阴极显示码sbit P0_4=P0^4; //定义P0.4口为可位寻址型变量P04int count=0; //定义字符型计数器变量count:并初始化为0int0_key() interrupt 0{ //定义K1的中断函数int0_keyP0_4=!P0_4; //取反P04}int1_key() interrupt 2 { //定义K2的中断函数int1_keycount++; //计数变量count增1if(count>0x0f) //如果count值超过0x0f:则count恢复0值count=0;P2=led_mod[count]; //P2口输出count值的显示码}void main() //定义主函数{IT0=1;EX0=1;EA=1; //设置脉冲触发方式:外部中断允许:总终端允许 IT1=1;EX1=1;P0_4=0; //P0.4灭灯P2=0x3f; //P2口显示字符“0”while(1); //程序原地循环}4、仿真运行效果图3为仿真运行效果图。
实验04:外部中断INT0、INT1控制流水灯左移、右移
实验四:外部中断系统实验一、实验目的1.结合理论教学,进一步熟悉外部中断INT0和INT1的基本概念和原理;2.理解掌握定时器控制寄存器TCON、中断允许控制寄存器IE、中断优先级别控制寄存器IP的功能和设置方法;3.了解并熟悉MCS-51单片机外部中断INT0和INT1的电路设计特点和应用特点;4.能够针对MCS-51单片机,进行外部中断INT0和INT1的初始化设置,能够完成简单中断服务程序的功能应用设计。
5.进一步熟悉、掌握MCS-51单片机指令系统和应用软件的编程方法和技巧。
二、实验设备、材料1.微型计算机(PⅣ以上);2.编程、汇编与模拟平台软件Keil uVision4;3.电子技术专业仿真软件protues运行平台;4.单片机实训开发电路板。
三、实验内容和实验步骤1.系统仿真电路参考原理图12.系统参考源程序1(用INT0控制流水灯左移1位,用INT1控制流水灯右移1位)已在实验板上演示ORG 0000HAJMP MAINORG 0003H ;INT0中断入口地址LJMP IN0ORG 0013H ;INT1中断入口地址LJMP IN1ORG 0020HMAIN:MOV TCON,#05HMOV IE,#85HMOV P2,#0FEHMOV A,#0FEHSJMP $IN0:CLR EARL A //左移MOV P2,ASETB EARETIIN1:CLR EARR A //右移MOV P2,ASETB EARETIEND3.系统参考源程序1(用8位发光二极管代表8位二进制数,用INT0控制加1递增,用INT1控制减1递减)已在实验板上演示ORG 0000HAJMP MAINORG 0003H ;INT0中断入口地址LJMP IN0ORG 0013H ;INT1中断入口地址LJMP IN1ORG 0020HMAIN:MOV TCON,#05HMOV IE,#85HMOV R0,#00HMOV A,#00HMOV P2,ASJMP $ IN0:INC R0MOV A,R0CPL AMOV P2,ARETIIN1:INC R0MOV A,R0CPL AMOV P2,ARETIEND4.系统参考源程序2(用INT0控制流水灯左移1位,用INT1控制流水灯右移1位)已在实验板上演示ORG 0000HAJMP MAINORG 0003H ;INT0中断入口地址CLR F0RETIORG 0013H ;INT1中断入口地址SETB F0RETIORG 0030HMAIN:MOV P2,#0FFHMOV TCON,#05HMOV IE,#85HMOV A,#7FHRRR:JNB F0,LLLRR A //右移MOV P2,AACALL DELAYSJMP RRRLLL:JB F0,RRRRL A //左移MOV P2,AACALL DELAYSJMP LLLDELAY:MOV R7,#8FH ;延时程序DELAY1:MOV R6,#0FFHDELAY2:MOV R5,#02HDELAY3:DJNZ R5,DELAY3DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND。