当前位置:文档之家› 单片机实验――利用中断控制LED灯(精)

单片机实验――利用中断控制LED灯(精)

单片机实验——利用中断控制LED灯
1.实验目的
(1掌握单片机中断的基本原理。

(2掌握单片机中断程序的编制方法。

2.预习要点
(1单片机中断基本原理
(2中断程序编制方法
3.实验设备
计算机、单片机实验箱、信号发生器。

4.实验内容
基本要求:
将信号发生器输出的脉冲信号连接到CPU的INT0上,将CPU的P1.0到P1.7和八个LED连接,脉冲信号为5V、100Hz,每输入一百个脉冲LED灯亮一次,并且LED灯顺序循环移位一次,形成跑马灯。

扩展要求:
提高输入脉冲频率,但跑马灯的显示频率不变。

实验4
ORG 0000H
AJMP MAIN
;******************************************
;中断子程序入口地址
ORG 0003H
LJMP EXINT0
;******************************************
;主程序
ORG 0030H
MAIN:MOV SP,#70H
SETB IT0 ;设置为下降沿触发
SETB EX0 ;开INT0的中断开关
SETB EA ;开总中断开关
MOV R0,#01H ;只让一盏灯亮,R0赋给P1口
MOV R3,#00H ;R3用来记中断次数
MOV A,R0
MOV P1,A
HERE:SJMP HERE ;死循环,还有另外一种形式是SJMP $ ;******************************************
;外中断0服务程序
EXINT0:INC R3 ;每来一次中断R3自加1
CJNE R3,#100,NEXT ;当来了100次中断之后,R3清零,然后P1口的MOV R3,#00H ;数左移一位,也就是让下一个LED亮
MOV A,R0
RL A
MOV P1,A
MOV R0,A ;保存左移之后的结果
NEXT:RETI
;******************************************
END
实验4扩展
ORG 0000H
AJMP MAIN
;******************************************
;中断入口地址
ORG 0003H
LJMP EXINT0
;******************************************
;主程序
ORG 0030H
MAIN:MOV SP,#70H
;初始化外中断0
SETB IT0
SETB EX0
SETB EA
;初始化8155
MOV DPTR,#0100H
MOV A,#03H
MOVX @DPTR,A
;显示缓存区
MOV 30H,#1
MOV 31H,#2
MOV 32H,#3
MOV 33H,#4
MOV 34H,#5
MOV 35H,#6
MOV 36H,#7
MOV 37H,#8
MOV 38H,#9 ;这一句后面的CJNE会用到,用来判断1-8是否已经显示完了
MOV R2,#00H ;用R2来记中断来的次数
MOV 40H,#01H ;用40H存放LED的状态
MOV A,40H
MOV P1,A
MOV R0,#30H ;显示缓存区首地址给R0
MOV R4,#0FEH ;字位送R4,因为只需要亮一个数码管,所以选择静态显示,没必要用动态显示
LOOP:LCALL DISPLAY ;循环调用显示程序
SJMP LOOP
;******************************************
;中断子程序
EXINT0:INC R2
CJNE R2,#100,NEXT ;来100次中断之后才进行操作
MOV R2,#00H
MOV A,40H ;移动LED
RL A
MOV P1,A
MOV 40H,A
INC R0 ;让显示的数+1
CJNE @R0,#9,NEXT ;如果到了9就回到1,因为我们只显示1-8 MOV R0,#30H
NEXT:RETI
;******************************************
;显示子程序
DISPLAY:
MOV DPTR,#0102H ;送字位
MOV A,R4
MOVX @DPTR,A
MOV DPTR,#DTAB ;查表,送字形
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#0101H
MOVX @DPTR,A
LCALL DELAY
LD1:RET
;****************************************** ;字形表DTAB:
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH ;0-F
DB 77H,7CH,39H,5EH,79H
DB 71H
;****************************************** ;延时1ms子程序DELAY:
MOV R7,#02H
DEL1:MOV R6,#0FFH
DEL2:DJNZ R6,DEL2
DJNZ R7,DEL1
RET
;****************************************** END
ORG 0000H
AJMP MAIN
;中断入口地址
ORG 0003H
LJMP EXINT0
;******************主程序
ORG 0030H
MAIN:MOV SP,#70H
;初始化外中断0
SETB IT0
SETB EX0
SETB EA
;初始化8155
MOV DPTR,#0100H
MOV A,#03H
MOVX @DPTR,A
;显示缓存区
MOV 30H,#1
MOV 31H,#2
MOV 32H,#3
MOV 33H,#4
MOV 34H,#5
MOV 35H,#6
MOV 36H,#7
MOV 37H,#8
MOV 38H,#9
MOV 40H,#01H ;用40H存发光二极管的状态
MOV R2,#00H
MOV A,40H
MOV P1,A
MOV R0,#30H
MOV R4,#0FEH
LOOP:LCALL DISPLAY SJMP LOOP
;************************* ;中断子程序
EXINT0:INC R2
CJNE R2,#100,NEXT
MOV R2,#00H
MOV A,40H
RL A
MOV P1,A
MOV 40H,A
INC R0
CJNE @R0,#9,NEXT1
MOV R0,#30H
NEXT1:MOV A,R4
RL A
MOV R4,A
NEXT:RETI
;显示子程序
DISPLAY:MOV A,R4
MOV DPTR,#0102H
MOVX @DPTR,A
MOV DPTR,#DTAB
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#0101H
MOVX @DPTR,A
LCALL DELAY LD1:RET ;字形表 DTAB: DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH ;延时 1ms 子程序 DELAY: MOV
R7,#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 SJMP
MAIN ;****************************************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 ;******************************************************。

相关主题