单片机原理及应用
实验报告:实验三 中断系统实验
专业班级:2011级信息工程 姓名:高 祥 学号:1195111009
一、实验目的
1. 学习掌握51单片机中断系统结构、中断控制。
2. 学习掌握中断控制初始化和中断服务程序设计、调试。
二、实验说明
实验通过开关向单片机提出中断请求,单片机响应中断控制LED移位,从而观察中断的请求、响应的过程。通过本实验学生可以学习单片机中断系统结构以及中断控制初始化和中断服务程序设计、调试。 指导老师
三、实验内容
1)、LED循环移位控制:
要求:P0口接LED,编程实现两种以上的循环移位方式(方式自定义,显示效果必须有明显的区别)。为便于观察,移位速度控制在1位/秒,采用软件延时。
代码码一:
;************************************************************************** :该程序实现的是LED灯循环左移程序,延时时间为0.99s
:************************************************************************** MOV A, #0FEH
LJMP MAIN
ORG 0080H
MAIN: MOV P0,A
ACALL DELAY
RL A
AJMP MAIN
Delay:MOV R7, #0C2H
D1 :MOV R6, #32H
D2 :MOV R5 ,#32H
D3 :DJNZ R5,D3
DJNZ R6,D2
DJNZ R7,D1
RET
END
代码二:
:************************************************************************* :该代码实现的是连个LED向右轮流循环显示功能,延迟时间为0.99S
:************************************************************************* MOV A,#9FH
BY:2011级信息工程(微波通信方向)
单片机原理及应用
LJMP MAIN
ORG 0080H
MAIN: MOV P0,A
ACALL DELAY
RR A
AJMP MAIN
Delay:MOV R7, #0C2H
D1 :MOV R6, #32H
D2 :MOV R5 ,#32H
D3 :DJNZ R5,D3
DJNZ R6,D2
DJNZ R7,D1
RET
END
2)、外部中断:
要求:通过按键产生外部中断请求(/INT0)信号,中断服务程序中完成上述循环移位方式切换。要求分别编写电平触发方式和跳变沿触发方式的初始化程序及中断服务程序。 代码一:
;**************************************************************************** ;通过按键来实现中断请求信号,完成一中的LED左循环程序,电平触发
;************************************************************************** ORG 0000H
LJMP MAIN
ORG 0003H
LJMP Bre
MAIN: MOV SP,#60H
CLR 01H
LOOP1:MOV A,#0FEH
LOOP4:MOV P2,A
ACALL Delay
SETB EA
SETB EX0
CLR IT0
RL A
JnB 01H,LOOP4
MOV R2,A
ACALL Delay
JNB 01H,LOOP4
LOOP2:MOV A,#9FH
LOOP3:MOV P2,A
ACALL Delay
RR A
BY:2011级信息工程(微波通信方向)
单片机原理及应用
JNB 01H,LOOP5
SJMP LOOP3
LOOP5:MOV A,R2
SJMP LOOP4
Bre: PUSH PSW
PUSH Acc
CPL 01H
POP Acc
POP PSW
RETI
Delay: MOV R7,#0C2H
D1 :MOV R6,#32H
D2 :MOV R5,#32H
D3 :DJNZ R5,D3
DJNZ R6,D2
DJNZ R7,D1
RET
END
代码二:
;**************************************************************************** ;通过按键来实现中断请求信号,完成一中的LED向右循环程序,跳变沿触发
;************************************************************************** ORG 0000H
LJMP MAIN
ORG 0003H
LJMP Bre
MAIN: MOV SP,#60H
CLR 01H
LOOP1:MOV A,#0FEH
LOOP4:MOV P2,A
ACALL Delay
SETB EA
SETB EX0
SETB IT0
RL A
JnB 01H,LOOP4
MOV R2,A
ACALL Delay
JNB 01H,LOOP4
LOOP2:MOV A,#9FH
LOOP3:MOV P2,A
ACALL Delay
RR A
JNB 01H,LOOP5
SJMP LOOP3
BY:2011级信息工程(微波通信方向)
单片机原理及应用
LOOP5:MOV A,R2
SJMP LOOP4
Bre: PUSH PSW
PUSH Acc
CPL 01H
POP Acc
POP PSW
RETI
Delay: MOV R7,#0C2H
D1 :MOV R6,#32H
D2 :MOV R5,#32H
D3 :DJNZ R5,D3
DJNZ R6,D2
DJNZ R7,D1
RET
END
3)、中断优先级:
要求:通过两个按键分别产生外部中断请求(/INT0)信号和外部中断请求(/INT1)信号,/INT0设为高优先级,中断触发采用跳变沿方式。相应的中断服务程序控制移位循环方式,/INT0中断实现上述移位循环方式其中的一种,/INT1中断实现上述移位循环方式的另一种。编写相应的初始化程序及中断服务程序。
代码:
;**************************************************************************** ;通过按键来实现中断请求信号INTO,INT1,INTO为高优先级,两种中断请求均是以跳边沿 ;方式,分别控制两个不同的中断程序
;************************************************************************** ORG 0000H
LJMP MAIN
ORG 0003H
LJMP Bre1
ORG 0013H
LJMP Bre2
MAIN: MOV SP,#60H
CLR 01H
CLR 02H
START: MOV P2,#0DBH
SETB EA
SETB EX1
SETB EX0
SETB IT1
SETB IT0
SETB PX0
BY:2011级信息工程(微波通信方向)
单片机原理及应用
CLR PX1
JB 01H,resert1
SJMP SORT
resert1:ACALL LOOP
SORT: JB 02H,resert2
SJMP SORT1
resert2:ACALL LOOP1
SORT1 :LJMP START
LOOP: MOV A,#0FEH
STA0: MOV P2,A
ACALL Delay
RL A
JB 01H,STA0
RET
LOOP1:MOV A,#9FH
STA1 :MOV P2,A
ACALL Delay
RR A
JB 01H,SORT3
SJMP SORT4
SORT3:MOV R3,A
ACALL LOOP
MOV A,R3
SORT4:JB 02H,STA1
RET
Bre1: PUSH PSW PUSH Acc
CPL 01H
POP Acc
POP PSW
RETI
ORG 0200H
Bre2:PUSH PSW PUSH Acc
CPL 02H
POP Acc
POP PSW
RETI
Delay: MOV R7,#0C2H D1 :MOV R6,#32H
D2 :MOV R5,#32H
D3 :DJNZ R5,D3
DJNZ R6,D2
DJNZ R7,D1
RET
BY:2011级信息工程(微波通信方向)
单片机原理及应用
END
五、思考题
1、实现MCS-51单片机的中断功能有哪些要求?
单片机实现中断,需要设置入口,在中断请求中,我们还要注意抗抖处理
2、跳沿触发与电平触发有何区别?如何处理?
跳边沿触发:我们只要有一个跳边沿产生,就会产生触发的
电平触发:当只有我们设置的电平时候才有效。
处理方法,不断去检测I/O口的电平情况
3、总结仿真调试的方法。
设置断点,逐步调试,单步调试等方式调试!
BY:2011级信息工程(微波通信方向)
第二篇:汇编代码,单片机实验
1。软件实验一 存储器块清零Org 0000Hljmp startorg 0030hstart: mov r0,#20hmov r1,#40hmov a,#3fhloop: mov @r0,ainc r0djnz r1,loopljmp $end*******************************************************************.2。软件实验二 二进制到BCD转换mov r0,#20hmov a,#11111111bmov b,#100div abmov @r0,amov r0,#21hmov a,bmov b,#10div abmov @r0,amov r0,#22hmov @r0,bljmp $end*******************************************************************3。软件实验四 内存块移动mov r0,#20hmov a,#2mov @r0,ainc r0mov a,#0mov @r0,ainc r0mov a,#0mov @r0,ainc r0mov a,#8mov @r0,ainc r0mov a,#10mov @r0,ainc r0mov a,#1mov @r0,amov r0,#20hmov r1,#30hmov r2,#07hloop:mov a,@r0mov @r1,ainc r0inc r1djnz r2,loopljmp $end************************************************************************.4。硬件实验一 P1口输出、输入实验ORG 0000HLJMP STARTORG 0030HSTART:MOV R0, #4 CLR P1.0CLR P1.1CLR P1.2CLR P1.3MOV A,#01HLOOP: MOV P1,ARL ALCALL DELAY DJNZ R0,LOOPLJMP STARTDELAY:MOV R6,#0HMOV R7,#0HDELAYLOOP:DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRET LJMP $END"2-1-2"ORG 0000HLJMP STARTORG 0030HSTART:SETB P1.0SETB P1.1LOOP:MOV C,P1.0MOV P1.2,CMOV C,P1.1MOV P1.3,CLJMP LOOPLJMP $END********************************************************************5。硬件实验二 继电器控制实验ORG 0000HLJMP STARTORG 0030HSTART:SETB P1.0LCALL DELAYCLR P1.0LCALL DELAY LJMP STARTDELAY:MOV R6,#0HMOV R7,#0HDELAYLOOP:DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRET LJMP $END **********************************************************************.6。硬件实验五 PWM转换电压实验ORG 0000HLJMP STARTORG 0030HSTART:CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY:MOV R6,#0HMOV R7,#0HDELAYLOOP:DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRETLJMP $END****************************************************************************7。T1工作方式1 输出方波"5-1"ORG 0000HSTART:LJMP MAIN ;上电转入主程序MAIN: MOV IE,#00H ;禁止中断MOV TMOD,#01H ;设置工作方式为方式1MOV TH1,#0FCH ;预置数MOV TL1,#06HSETB TR1 ;输出高电平LOOP: JBC TF1,LOOP1 ;查询计数溢出AJMP LOOPLOOP1:MOV TH1,#FFH ;重复预置数MOV TL1,#06HCPL P1.0 ;取反AJMP LOOP**********************************************************************8。硬件实验十 计数器
实验ORG 0000HLJMP STARTORG 0003H ;外部中断入口START:SETB P3.4 ;T0的输入口上电MOV TMOD,#0101B ;设置工作方式为方式1MOV TH0,#00HMOV TL0,#00HSETB TR0 ;启动计数器LOOP:MOV A,TL0MOV P1,A ;输出记数次数LJMP LOOPLJMP $END*************************************************************************9。硬件实验十一 外部中断实验ORG 0000HLJMP MAINORG 0003HLJMP EXINT0MAIN:CLR P1.0SETB PSW.5MOV C,PSW.5MOV P1.0,C SETB IT0 ;设置下降沿触发SETB EX0SETB EA ;开启中断允许LOOP: JBC IE0,EXINT0 ;有中断时跳转LJMP LOOPEXINT0: PUSH PSW ;断点保护PUSH ACCPUSH 55 ;断电保护地址55,根据具体情况而定CPL C ;输出信号取反后输出MOV P1.0,CPOP 55POP ACCPOP PSWRETIEND********************************************************************************10。硬件实验十二 定时器实验ORG 0000HLJMP STARTORG 0030HSTART:MOV TMOD,#0010B ;设置工作方式2MOV IE,#00H ;禁止中断MOV R0,#250 ;设置溢出次数MOV A,#40MOV TH0,#206 ;预置数MOV TL0,#206SETB P1.0 ;输出高电平SETB TR0 ;启动DEL:JBC TF0,LOOPAJMP DELLOOP:DEC R0CJNE R0,#00H,DELDEC ACJNE A,#00H,LOOP1CPL P1.0 ;输出取反MOV A,#40 ;A重装LOOP1:MOV R0,#250 ;R0重装LJMP DEL ***************************************************************************************实验十六, 八段数码管的显示ORG 0000HLJMP STARTORG 0003H ;外部中断入口START:MOV R0,#79HMOV R3,#02HMOV A,R3MOV DPTR,#8002HMOVX @DPTR,AMOV R1,#255SETB P3.4 ;T0的输入口上电MOV TMOD,#0101B ;设置工作方式为方式1MOV TH0,#00HMOV TL0,#00HSETB TR0 ;启动计数器TURN:MOV A,TL0 LCALL DELAYCJNE A,#10H,OUTPUTLJMP $OUTPUT:MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#8004HMOVX @DPTR,ALCALL DELAYLJMP TURNTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDELAY: ;延时1s子程序MOV R6,#00HMOV R7,#00HTURN1:DJNZ R6,TURN1DJNZ R7,TURN1RETEND***********************************************************************************LED0 EQU 79HLED1 EQU 7AHORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#40HMOV LED0,#0FFHMOV LED1,#0FFHLOOP:LCALL DIRLCALL KSJZ LOOPLCALL KEYMOV DPTR,#DISMOVC A,@A+DPTRMOV LED0,AANL LED0,#0FHSWAP AMOV LED1,AANL LED1,#0FH
AJMP LOOPKEY:LCALL KS ;按键扫描JNZ LK1LCALL DIRAJMP KEYLK1:LCALL DIRLCALL DIRLCALL KSJNZ LK2LCALL DIRAJMP KEYLK2:MOV R2,#0FEHMOV R4,#00HLK4:MOV DPTR,#8002HMOV A,R2MOVX @DPTR,AMOV DPTR,#8001HMOVX A,@DPTRJB ACC.0,L_1 MOV A,#00HAJMP LKPL_1:JB ACC.1,L_2MOV A,#06HAJMP LKP L_2:JB ACC.2,L_3MOV A,#0CHAJMP LKPL_3:JB ACC.3,NEXTMOV A,#12HLKP:ADD A,R4PUSH ACCLK3:LCALL DIRLCALL KSJNZ LK3POP ACCRETNEXT:INC R4MOV A,R2 JNB ACC.5,KNDRL AMOV R2,ALJMP LK4KND:LJMP KEYKS:MOV DPTR,#8002H ;按键检查MOV A,#00HMOVX @DPTR,AMOV DPTR,#8001HMOVX A,@DPTRCPL AANL A,#0FHRETDL:MOV R6,#00H ;6ms延时MOV R7,#06HDLLOOP:DJNZ R6,DLLOOPDJNZ R7,DLLOOPRETDIR:MOV R0,#LED0 ;LED显示MOV R3,#01HMOV A,R3LD_1:MOV DPTR,#8002HMOVX @DPTR,AMOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#8004HMOVX @DPTR,ALCALL DLINC R0MOV A,R3JB ACC.1,LD_2RL AMOV R3,AAJMP LD_1LD_2:RETTAB: ;段码表DB 3FH, 06H, 5BH, 4FH, 66HDB 6DH, 7DH, 07H, 7FH, 6FHDB 77H, 7CH, 39H, 5EH, 79HDB 71H, 0FFHDIS: ;键码转换表DB 0F1H,0F2H,0DH,0EH,0FH,00HDB 0F3H,0F4H,0CH,03H,02H,01HDB 0F5H,0F6H,0BH,06H,05H,04HDB 0F7H,0F8H,0AH,09H,08H,07H**********************************************************************************ORG 8000HAJMP DASAW ;锯齿波ORG 8200HDASAW: MOV DPTR,#0A000HMOV R0,#00HWW:MOV A,R0MOVX @DPTR,AINC R0NOPNOPNOPAJMP WW**************************************************************************************ORG 0000H ;方波LJMP STARTSTART:MOV DPTR,#0A000HLOOP: MOV A,#00HMOVX @DPTR,ALCALL DELAYCPL AMOVX @DPTR,ALCALL DELAYLJMP LOOPDELAY:MOV R0,#128DLOOP:DJNZ R0,DLOOPRETI*************************************************************************************A/D 转换ORG 0000HLJMP STARTORG 0003HLJMP ZHDSTART: MOV R0,#0A0H ;初始化程序SETB IT0SETB EASETB EX0MOV DPTR,#8000HMOVX @DPTR,AHERE: SJMP HEREZHD: MOVX A,@DPTRMOVX @R0,AINC R0mov r1,#20hmov a,@R0mov b,#100div abmov @r1,amov r1,#21hmov a,bmov b,#10div abmov @r1,amov r1,#22hmov @r1,bMOV R2,#32MOV R1,#20HDIS: MOV DPTR,#9002HMOV A,R
2MOVX @DPTR,ARR AMOV R2,AMOV DPTR,#TABMOV A,@R1INC R1MOVC A,@A+DPTRMOV DPTR,#9004HMOVX @DPTR,AACALL DELAYCJNE R2,#4,DISMOV DPTR,#8000HMOVX @DPTR,ARETIDELAY:MOV R6,#00H ;6ms延时MOV R7,#00HDLLOOP: DJNZ R6,DLLOOPDJNZ R7,DLLOOPRETTAB: ;段码表DB 3FH, 06H, 5BH, 4FH, 66HDB 6DH, 7DH, 07H, 7FH, 6FHDB 77H, 7CH, 39H, 5EH, 79HDB 71H, 0FFHend