单片机 P1口及外部中断 硬件实验报告

实验十一  P1口及外部中断

一、   实验目的

1.掌握利用MCS-51单片机P1口实现I/O的三种传送方式。

2.掌握MCS-51单片机外部中断源的原理和编程方法。

3.了解MCS-51单片机处理外部中断的全过程。

4.弄懂外部中断触发方式的选择。

二、   实验要求

熟练掌握结合DP-51PROC单片机综合仿真实验仪和Kiel C51 集成开发环境进行仿真调试。   

三、   实验内容及实验电路

1、P1口无条件输出实验,电路图图3-1所示。

图3-1 P1口无条件输出

      实验参考程序1:8个LED 灯同时闪亮。

                    ORG      8000H

LJMP     Main

ORG      80F0H

Main:

MOV     R7, #0

Loop:

MOV     R6, #0

DJNZ     R6, $

DJNZ     R6, $

DJNZ     R6, $

DJNZ     R6, $

DJNZ     R7, Loop

CPL       P1.0       ; P 1 .0 取反

CPL       P1.1       ; P 1 .1 取反

CPL       P1.2       ; P 1 .2 取反

CPL       P1.3       ; P 1 .3 取反

CPL       P1.4        ; P 1 .4 取反

CPL     P1.5       ; P 1 .5 取反

CPL       P1.6       ; P 1 .6 取反

CPL       P1.7       ; P 1 .7 取反

SJMP     Main

END

             

2、P1口条件输出实验,电路如图3-2所示。

图3-2 P1口条件输出

       实验参考程序2:

                     ORG      8000H    

LJMP     Main

ORG      8100H    

Main:

JB          P1.7,SETLED

CLRLED:

CLR       P1.0

CLR       P1.1

CLR       P1.2

CLR       P1.3

CLR       P1.4

CLR     P1.5

CLR       P1.6

SJMP     Main

SETLED:

SETB      P1.0

SETB      P1.1

SETB      P1.2

SETB      P1.3

SETB      P1.4

SETB      P1.5

SETB      P1.6

SJMP     Main

END

3、P1口中断输入/输出实验,电路如图3-3所示。

图3-2 P1口中断输入/输出

实验参考程序3:

                        ORG      8000H    

LJMP     Main

ORG      8003H    

LJMP     INT0SV

Main:

MOV  SP, #5FH

       SETB  EA

       SETB  IT0

    SETB  EX0

    SJMP  $

INT0SV:

MOV   P1,#0FFH

MOV   A,P1

SWAP  A

MOV   P1,A

RETI

END

四、   实验步骤

实验内容1:P1口无条件输出实验

1.       断开DP-51PROC实验仪的电源,按图3-1接线,使用排线将A2区的J61接口与D1区的J52接口相连。

2.       接通DP-51PROC实验仪的电源,将TKSMonitor51 仿真器上的工作模式选择开关拨到RUN处。

3.       建立名为P1_wtjio工程,按实验参考程序1编辑新文件,文件名为:p1_wtj.asm。然后编译,无误转换为调试方式,运行程序,观察并记录运行结果。

同时闪亮

实验内容2:P1口条件输出实验

1、  断开DP-51PROC实验仪的电源,按图3-2接线,使用排线将A2区的J61接口与D1区的J52接口相连,使用导线把A2区的P1.7与D1区J54的SW1相连。

2、  接通DP-51PROC实验仪的电源,将TKSMonitor51 仿真器上的工作模式选择开关拨到RUN处。

3、  建立名为P1_tjio工程,按实验参考程序2编辑新文件,文件名为:p1_tj.asm。然后编译,无误转换为调试方式,预先将SW1置1或置0,运行程序,观察并记录运行结果。

底色为黄色的是数据有所变更的数据,下同

实验内容3:P1口中断方式输入/输出实验

1、断开DP-51PROC实验仪的电源,按图3-3接线,使用导线将A2区的P10、P11、P12分别与D1区的SW1、SW2 、SW3相连,使用导线把A2区INT0与D1区J53的KEY1(图3-3中的K1即为D1区的K1)相连。

2、  接通DP-51PROC实验仪的电源,将TKSMonitor51 仿真器上的工作模式选择开关拨到RUN处。

3、  建立名为P1_zdio工程,按实验参考程序3编辑新文件,文件名为:p1_zd.asm。然后编译,无误转换为调试方式,预先置好开关的状态,运行程序,观察中断的执行过程,并记录运行结果。

五、   思考题

1如何将P1口无条件输出的实验,修改为将8个LED发光二极管向左或向右循环点亮?

   ORG 0000H

     LJMP MAIN

     ORG 000BH

MAIN:CLR P0.0

     ACALL DEL

     SETB P0.0

   CLR P0.1

     ACALL  DEL

     SETB P0.1

     CLR P0.2

     ACALL DEL

     SETB P0.2

     CLR P0.3

     ACALL DEL

     SETB P0.3

     CLR P0.4

     ACALL DEL

     SETB P0.4

     CLR P0.5

     ACALL DEL

     SETB P0.5

     CLR P0.6

     ACALL DEL

     SETB P0.6

     CLR P0.7

     ACALL DEL

     SETB P0.7

     SJMP MAIN

DEL:  MOV R7,#0FFH

DEL1: MOV R6,#0FFH

     DJNZ R6,$

     DJNZ R6,$

     DJNZ R6,$

     DJNZ R6,$

     DJNZ R7,DEL1

     RET

     END

2如何利用INT0中断使P1口控制8个LED发光二极管向左或向右循环点亮?电路如何修改?程序如何修改?

    ORG 0000H

    LJMP MAIN

    ORG  0003H

    LJMP INT0SV

MAIN: MOV SP,#5FH

      SETB EA

      SETB IT0

      SETB EX0

      SJMP $

INT0SV:  MOV SP,#5FH

        CLR EA

        PUSH ACC

        PUSH 01H

        SETB EA

        MOV P1,#0FFH

     MOV R1,#0AH  

LN:  CLR P0.0

     ACALL DEL

     SETB P0.0

   CLR P0.1

     ACALL DEL

     SETB P0.1

     CLR P0.2

     ACALL DEL

     SETB P0.2

     CLR P0.3

     ACALL DEL

     SETB P0.3

     CLR P0.4

     ACALL DEL

     SETB P0.4

     CLR P0.5

     ACALL DEL

     SETB P0.5

     CLR P0.6

     ACALL DEL

     SETB P0.6

     CLR P0.7

     ACALL DEL

     SETB P0.7

     DJNZ R1,LN

     CLR EA

     POP 01H

     POP ACC

     SETB EA

     RETI

DEL:  MOV R7,#0FFH

DEL1: MOV R6,#0FFH

     DJNZ R6,$

     DJNZ R6,$

     DJNZ R6,$

     DJNZ R6,$

     DJNZ R7,DEL1

     RET

     END

 

第二篇:单片机硬件实验报告

实验十一 P1口及外部中断

思考题

1、如何将P1口无条件输出的实验,修改为将8个LED发光二极管向左或向右循环点亮? 我们设计的效果为8个LED灯,两盏同时亮起并自左向右循环至末尾,然后反向自右向左点亮至开始位置,而后奇数灯与偶数灯交替闪亮4次,结束。

程序清单:

ORG 8000H

MAIN: MOV R0, #7 ;设左移7次

MOV A,#0FCH

LOOP: MOV P1, A

ACALL DELAY ;调延时子程序

RL A ;左移

DJNZ R0, LOOP

MOV R1, #7 ;设右移7次

LOOP1: RR A ;右移

MOV P1, A ACALL DELAY DJNZ R1, LOOP1 ;判断移动次数 MOV R2, #4 ;设置闪烁次数

MOV A, #55H ;设初始值

LOOP2: MOV P1, A ;2、4、6、8LED灯亮

ACALL DELAY

CPL A ;按位取反

DJNZ R2, LOOP2

SJMP MAIN

DELAY: MOV R7, #0

DELAY1:MOV R6 ,#0

DJNZ R6,$

DJNZ R6,$ DJNZ R6,$ DJNZ R6,$ DJNZ R7,DELAY1 RET ;子程序返回

END

2、如何利用INT0中断使P1口控制8个LED发光二极管向左或向右循环点亮?电路如何修改?程序如何修改?

我们设计的效果为:程序运行后两盏灯循环向左点亮,直到外部中断触发,反向循环一遍后奇数灯与偶数灯交替闪亮4次。此时外部中断程序运行结束,返回主程序。

ORG 8000H

LJMP MAIN

ORG 8003H

LJMP INT0SV

MAIN:

MOV IE,#81H ;开中断允许总控位和外部中断0 SETB EX0 ;开外部中断0中断允许控制位 MOV R0, #7 ;设左移7次

MOV A,#0FCH ;赋初值

LOOP: MOV P1, A ;1、2LED灯亮 ACALL DELAY

RL A

DJNZ R0, LOOP

SJMP MAIN

INT0SV: MOV A,#3FH

MOV R1, #7

LOOP1: RR A

MOV P1, A

ACALL DELAY

DJNZ R1, LOOP1

MOV R2, #4

MOV A, #55H

LOOP2: MOV P1, A

ACALL DELAY

CPL A

DJNZ R2, LOOP2

SJMP MAIN

DELAY: MOV R7, #0

DELAY1:MOV R6 ,#0

DJNZ R6,$

DJNZ R6,$

DJNZ R6,$

DJNZ R6,$

DJNZ R7,DELAY1

RET

END

;设置闪烁4次 ;2、4、6、8LED灯亮 ;按位取反

实验十二 定时器及中断

思考题

3、将实验十一思考题2的软件延时修改为采用T/C0的硬件延时。采用T/C0中断与/INT0中断方式实现8个LED 循环点亮(左或右)。

外部中断触发后奇数灯闪亮一次,然后继续中断前的程序。

程序清单:

ORG 8000H

LJMP MAIN

ORG 8003H

LJMP INT0SV

ORG 800BH

LJMP TOS

MAIN:MOV SP,#5FH

MOV TMOD,#01H

MOV TH0,#4CH

MOV TL0,#00H

MOV IE,#83H

MOV A,#0FCH

MOV R2,#00H

SETB ET0

SETB TR0

MOV P1,#0FCH

SJMP $

TOS: MOV TH0,#4CH

MOV TL0,#00H

INC R2

CJNE R2,#20,NEXT

RL A

MOV P1,A

MOV R2,#00H

NEXT: RETI

INT0SV:MOV P1,#55H

RETI ;延时1s ; ;启动T/C0 ;设置堆栈栈底 ;计时器方式0 ;设置定时时间50ms ;开中断允许总控位同时开外部中断0和T/C0中断 ;中断返回指令

END

答辩收获:两个中断,T/C0中断与/INT0中断。且/INT0中断优先级较高。

4、将实验1中T/C0定时改为25MS,软件计数应该为多少?修改程序产生1S。 初值=65536-(25000*11.0592)/12=42496=0A600H

ORG 8000H

AJMP MAIN ORG 800BH AJMP T0S

MAIN: MOV SP,#5FH

MOV TMOD,#01H MOV TH0,#A6H MOV TL0,#00H MOV R2,#00H MOV IE,#82H SETB TR0 CLR P1.0 SJMP $

T0S: INC R2

CJNE R2,#40,NEXT CPL P1.0

MOV R2,#00H NEXT: MOV TH0,#A6H MOV TL0,#00H

RETI

END

5、

ORG 8000H

LJMP MAIN ORG 8100H MAIN: MOV SP,#70H

MAIN1:MOV R1,#30H MOV DPTR,#7FF8H ;P2.0=0 LOOP: MOVX @DPTR,A CALL DELAY MOVX A,@DPTR

MOV @R1,A LCALL P1ZH CPL A MOV P1,A MOV A,30H CJNE A,#33H,NEXT NEXT:JC BUZ CLR A CLR C MOV A,30H CJNE A,#0CCH,NEXT1 NEXT1:JNC BUZ LJMP MAIN1 P1ZH: MOV C,ACC.0

MOV 07H,C MOV C,ACC.1 MOV 06H,C

MOV C,ACC.2 MOV 05H,C MOV C,ACC.3 MOV 04H,C MOV C,ACC.4 MOV 03H,C MOV C,ACC.5 MOV 02H,C MOV C,ACC.6 MOV 01H,C MOV C,ACC.7 MOV 00H,C

MOV A,20H RET

DELAY: MOV R6,#0H DELAY1: MOV R5,#0FFH

DJNZ R5,$ DJNZ R6,DELAY1 RET

BUZ:CPL P3.1

ACALL TIME

RET

TIME:MOV R7,#2

TIME1:mov R6,#32

NOP

TIME2:DJNZ R6,$

DJNZ R7,TIME1

SJMP BUZ

END

相关推荐