51单片机实验报告

实验一  数据传送实验

实验内容:

将8031内部RAM 40­H—4FH单元置初值A0­H—AFH,然后将片内RAM 40­H—4FH单元中的数据传送到片内RAM 50­H—5FH单元。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。

源程序清单:

                                ORG 0000H

         RESET:AJMP MAIN

                            ORG 003FH

         MAIN:   MOV         R0,#40H

                           MOV         R2,#10H

                            MOV         A,#0A0H

         A1:         MOV         @R0,A

                            INC            R0

                            INC            A

                            DJNZ         R2,  A1                    

                            MOV    R1,#40H                 

                            MOV         R0, #50H

                            MOV         R2,  #10H

         A3:            MOV         A,  @R1

                            MOV         @R0,  A

                            INC      R0                       

                            INC      R1                    

                            DJNZ         R2,  A3

                            LJMP         0000H

思考题:

1. 按照实验内容补全程序。

2. CPU 对8031内部RAM存储器有哪些寻址方式?

  直接寻址,立即寻址,寄存器寻址,寄存器间接寻址。

3. 执行程序后下列各单元的内容是什么?

   内部RAM 40H~4FH ___0A0H~0AFH______________________

   内部RAM 50H~5FH___0A0H~0AFH_______________________

实验二  多字节十进制加法实验

实验内容:

多字节十进制加法。加数首地址由 R0 指出,被加数和结果的存储单元首地址由R1指出,字节数由R2 指出。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。

源程序清单:         ORG 0000H

         RESET:      AJMP        MAIN

                            ORG 0100H

         MAIN:  MOV SP,  #60H

                            MOV         R0,  #31H

                            MOV         @R0,  #22H

                            DEC R0

                            MOV         @R0,  #33H

                            MOV         R1,  #21H

                            MOV         @R1,  #44H

                            DEC R1

                            MOV         @R1,  #55H

                            MOV         R2,  #02H

                            ACALL       DACN

         HERE:       AJMP        HERE

         DACN:      CLR           C

         DAL: MOV         A,  @R0

                            ADDC       A,  @R1

                            DA     A

                            MOV         @R1,  A

                            INC            R0

                            INC            R1

                            DJNZ    R2,DAL                  

                            CLR           A

                            MOV         ACC.0 ,  C

                            RET

思考题:

1. 按照实验内容补全程序。

2. 加数单元、被加数单元和结果单元的地址和内容为?

  3130H,2120H,6688H

3. 如何检查双字节相加的最高位溢出?

   看psw.3 的溢出标志位 ov=1 则溢出

4. 改变加数和被加数,测试程序的执行结果。

实验三  数据排序实验

实验内容:

将内部RAM 50H—59H中的数据按从小到大的次序排列。

将程序经模拟调试通过后,运行程序,检查相应的存储单元的数据是否为排序状态。

源程序清单:

                       ORG 0000H

         RESET:      AJMP        MAIN

                            ORG 0100H

         MAIN:      MOV         SP,  #60H

                            MOV         R0,  #50H

                            MOV         @R0, #6FH

                            INC            R0

                            MOV         @R0, #6EH

                            INC            R0

                            MOV         @R0, #6AH

                            INC            R0

                            MOV         @R0, #6CH

                            INC            R0

                            MOV         @R0, #6DH

                            INC            R0

                            MOV         @R0,  #5BH

                            INC            R0

                            MOV         @R0, #67H

                            INC            R0

                            MOV         @R0, #69H

                            INC            R0

                            MOV         @R0, #68H

                            INC            R0

                            MOV         @R0,  #64H

                            ACALL       QUE

         HERE:       AJMP        HERE

         QUE:         CLR           00H

                            MOV         R7,  #09H      

                            MOV         R0,  #50H

                            MOV         A ,  @R0

         L2:             INC            R0

                            MOV         R2,  A

                            SUBB        A, @R0

                            MOV         A,  R2

                            JC              L1

                            SETB             00H

                            XCH A, @R0

                            DEC R0

                            XCH A, @R0

                            INC            R0

         L1:             MOV         A,  @R0

                            DJNZ         R7, L2

                            JB              00H, QUE

                            RET

思考题:

1. 按照实验内容补全程序。

2. 检查程序执行结果。

   5BH,64H,67H,68H,69H,6AH,6CH,6DH,6EH,6FH

3. 修改程序,按从大到小次序排序。

ORG 0000H

         RESET:      AJMP        MAIN

                            ORG 0100H

         MAIN:      MOV         SP,  #60H

                            MOV         R0,  #50H

                            MOV         @R0, #6FH

                            INC            R0

                            MOV         @R0, #6EH

                            INC            R0

                            MOV         @R0, #6AH

                            INC            R0

                            MOV         @R0, #6CH

                            INC            R0

                            MOV         @R0, #6DH

                            INC            R0

                            MOV         @R0,  #5BH

                            INC            R0

                            MOV         @R0, #67H

                            INC            R0

                            MOV         @R0, #69H

                            INC            R0

                            MOV         @R0, #68H

                            INC            R0

                            MOV         @R0,  #64H

                            ACALL       QUE

         HERE:       AJMP        HERE

         QUE:         CLR           00H

                            MOV         R7,  #09H      

                            MOV         R0,  #50H

                            MOV         A ,  @R0

         L2:             INC            R0

                            MOV         R2,  A

                            SUBB        A, @R0

                            MOV         A,  R2

                            JNC           L1

                            SETB             00H

                            XCH A, @R0

                            DEC R0

                            XCH A, @R0

                            INC            R0

         L1:             MOV         A,  @R0

                            DJNZ         R7, L2

                            JB              00H, QUE

                            RET

实验四  双字节乘法实验

实验内容:

[(R3)(R2)*(R5)(R4)]→R0指出的四个单元。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。

源程序清单:

                            ORG       0000H

         RESET:      AJMP        MAIN

                            ORG 0100H

         MAIN;      MOV         SP, #60H

                            MOV         R2, #0FFH

                            MOV         R3, #0FH

                            MOV         R4, #0FFH

                            MOV         R5, #0FH

                            MOV         R0, #33H

                            MOV         R7, #04H

         ML0:         MOV         @R0, #00H

                            DJNZ         R7, ML1

                            ACALL       M2

         HERE:       AJMP        HERE

         ML1:         DEC R0

                            AJMP        ML0

         M2:           MOV         A, R2

                            MOV         B, R4

                            MUL AB

                            ACALL       ADDM

                            MOV         A, R2

                            MOV         B, R5

                            MUL AB

                            DEC R0

                            ACALL       ADDM

                            MOV         A, R4

                            MOV         B, R3

                            MUL AB

                            DEC R0

                            DEC R0

                            ACALL       ADDM

                            MOV         A, R5

                            MOV         B, R3

                            MUL AB

                            DEC R0

                            ACALL       ADDM

                            RET

         ADDM:     ADD A, @R0

                            MOV         @R0, A

                            MOV         A, B

                            INC            R0

                            ADDC       A, @R0

                            MOV         @R0, A

                            INC            R0

                            MOV         A, @R0

                            ADDC       A, #00H

                            MOV         @R0, A

                            RET

思考题:

1. 程序结果存放在哪几个单元中?

  33H~30H

2. 乘积为多少?

0FFE001H

实验五  电子钟实验

实验内容:

    熟悉单片机在线仿真调试方法。将仿真头插入实验板的CPU插座中,再打开电源,输入程序进行调试。程序运行时,按下S0键,蜂鸣器发出响声,两个数码管开始从零显示时间,定时器定时时间为一分钟,定时时间到,蜂鸣器再次发出响声,重新按下S0键,重复上述过程。

源程序清单:

           ORG 0000H

  START:

           AJMP MAIN

           ORG            000BH

           AJMP PIT0

           ORG            0100H

    MAIN: 

           MOV           SP,#60H

           MOV           50H,#00H

           MOV           51H,#00H

           ACALL         DISPLAY

           MOV           TMOD,#01H

           MOV           TL0,#0B0H

           MOV           TL1,#3CH

           ACALL         KEY         

           CLR              P2.7

           ACALL         LONGDELAY

           SETB            P2.7

           SETB            00H

           SETB            TR0

           SETB            EA

           SETB            ET0

           MOV           30H,#20

    ML0:

           ACALL         DISPLAY

           MOV           C,00H

           JC                 ML0

           CLR              P2.7

           ACALL         LONGDELAY

           SETB            P2.7

           AJMP          MAIN

    PIT0:

           PUSH PSW

           PUSH ACC

           SETB            PSW.3

           MOV           TL0,#0B0H

           MOV           TH0,#3CH

           MOV           A,30H

           DEC             A

           MOV           30H,A

           JNZ              RET0

           MOV           30H,#20

           MOV           R0,#51H

           ACALL         DAAD1

           MOV           A,R2

           XRL              A,#60H

           JNZ              RET0

           ACALL         CLR0

           CLR              00H

      RET0:

           POP             ACC

           POP             PSW

           RETI

     DAAD1:

           MOV           A,@R0

           DEC             R0

           SWAP A

           ORL             A,@R0

           ADD            A,#01H

           DA               A

           MOV           R2,A

           ANL             A,#0FH

           MOV           @R0,A

           MOV           A,R2

           INC              R0

           ANL             A,#0F0H

           SWAP A

           MOV           @R0,A

           RET

     CLR0:

           CLR              A

           MOV           @R0,A

           DEC             R0

           MOV           @R0,A

           RET

     DISPLAY:

           MOV           A,50H

           MOV           DPTR,#TABLE

           MOVC         A,@A+DPTR

           MOV           P2,A

           MOV           A,51H

           MOV           DPTR,#TABLE

           MOVC         A,@A+DPTR

           MOV           P0,A

           CLR              P0.7

           LCALL DELAY

           RET

     KEY:

           MOV           C,P3.0

           JC                 KEY

           ACALL         DELAY

      KEY1:

           MOV           C,P3.0

           JNC              KEY1

           ACALL         DELAY

           RET    

      DELAY:

           MOV           R1,#250

       LOOP:

           DJNZ           R1,LOOP

           RET

  LONGDELAY:

           MOV           A,R0

           PUSH ACC

           MOV           A,R1

           PUSH ACC

           MOV           R1,#250

     LOOP1:

           MOV           R0,#250

     LOOP2:

           NOP

           NOP

           NOP

           NOP

           NOP

           DJNZ           R0,LOOP2

           DJNZ           R1,LOOP1    

           POP             ACC

           MOV           R1,A

           POP             ACC

           MOV           R0,A

           RET

     TABLE:

           DB      0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H  

     END                                                                                     

思考题:

1程序中哪部分为显示程序?

  DISPLAY:

           MOV           A,50H

           MOV           DPTR,#TABLE

           MOVC         A,@A+DPTR

           MOV           P2,A

           MOV           A,51H

           MOV           DPTR,#TABLE

           MOVC         A,@A+DPTR

           MOV           P0,A

           CLR              P0.7

           LCALL DELAY

           RET

2程序中如何实现一秒钟的定时?

用T/C0定时50ms。共20次。

3写出各段子程序的作用。

MAIN:主程序,

PIT0:中断服务子程序

LONGDELAY和DELAY:延时的子程序

ADDA1是非压缩的BCD码和压缩的BCD码的转化程序

4根据实验要求画出电路图。

 

第二篇:51单片机外部中断实验报告

51单片机外部中断实验

实验报告要求:

1)整理本实验涉及的程序,将它们按正确的格式详细书写在实验报告纸上。

1.无中断时发光让发光二极管从左到右依次点亮,有外部中断请求时,4位数码管从0000开始加1显示(加到9999后复位为0000),同时蜂鸣器报警。

#include<reg51.h>

#include<intrins.h>

int n1,n2;

sbit beep=P3^5;

char

table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void delay(int x)

{

int i,j;

for(i=0;i<x;i++)

for(j=0;j<200;j++);

}

void main()

{

EA=1;

EX0=1;

IT0=0;

EX1=1;

IT1=1;

PX1=1;

while(1);

}

void int0() interrupt 0 {

beep=0;

P2=0xfe;

delay(200);

for(n1=8;n1>0;n1--) {

P2=_crol_(P2,1); delay(200); }

}

void int1() interrupt 2 {

P0=0x00;

for(n2=0;n2<16;n2++) {

P1=table[n2];

delay(200);

}

}

2.设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。

C语言程序

#include<reg51.h>

#include<intrins.h>

int n1,n2;

chartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e};

void delay(int x)

{

int i,j;

for(i=0;i<x;i++)

for(j=0;j<200;j++);

}

void main()

{

EA=1;

EX0=1;

IT0=1;

P2=0xfe;

delay(200);

for(n1=8;n1>0;n1--) {

P2=_crol_(P2,1); delay(200); }

}

void int0() interrupt 0 {

EX0=1;

P0=0x00;

for(n2=0;n2<16;n2++) {

P1=table[n2]; delay(200); }

EX0=0;

}

汇编程序:

ORG 0000H AJMP MAIN

ORG 0003H LJMP EXT0_INT ORG 0013H LJMP EXT1_INT ORG 0100H

SETB EA

SETB EX0

SETB EX1

SETB PX1

CLR IT0

CLR IT1

AJMP $ MAIN:

EXT0_INT: MOV P2,#0FEH

MOV R4,#08H ACALL DELAY MOV A,P2 RL A MOV P2,A DJNZ R4,L1 RETI L1:

EXT1_INT: MOV P1,#0F0H MOV R5,#00H

MOV DPTR ,#TAB MOV A,R5 MOVC A,@A+DPTR MOV P0,A ACALL DELAY INC R5 CJNE R5,#0AH,L4 RETI L4:

TAB: DB 0C0H ,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DELAY: MOV R6,#0FFH

L5:

L6:

(2)写出实验结果、实验收获与对本实验改进的意见。

1)无中断时发光二极管从左到右依次点亮,有外部中断请求时,4位数码管从0000开始加1显示(加到9999后复位为0000),同时蜂鸣器报警。

2)当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序被中断去执行外部中断1的中断程序(数码管加1显示程序)。 MOV R7,#0FFH NOP NOP DJNZ R7,L6 DJNZ R6,L5 RET END

(3)写出思考题的答案。

1)外部中断的边沿触发方式与电平触发方式有何不同之处?

设定方法:通过外部中断中的IT0可以设置触发方式。

IT0 = 1,边沿触发,IT0 = 0,电平触发。

电平触发,就是只有高电平的时候才做指定的事

边沿触发,就是有高电平向低电平转换,或者翻过来转换,这个转换过程触发一个动作。

2)什么是中断嵌套?实现中断嵌套需要设置什么寄存器? 当一个中断(暂且称它为中断A)发生后,处理器正在执行中断A服务程序时,又有一个中断B申请中断(前提是 中断B的优先级比中断A的优先级高),此时处理器不得不停止执行中断A服务程序,转而去执行中断B服务程序,执行完B后,返回到中断A继续执行,执行完A后,返回主程序。

以上中断A里面嵌套了中断B,这就叫做中断嵌套。

相关推荐