单片机原理及应用1

  • 格式:doc
  • 大小:44.50 KB
  • 文档页数:7

一、C语言源程序 #include #include char data *p40 ,*p50 ; char xdata *p4800; char i, j, k; void main( ) { p40=0x40; //指针P40所指向的首地址 p50=0x50; //指针P50所指向的首地址 p4800=0x4800; //指针P4800所指向的首地址 for(i=0;i<16;i++) //循环16次,每次循环P40所指向的首地址加1 { *p40=i; p40=p40+1; } //B1 p40=0x40; for(j=0;j<16;j++) //循环16次,每次循环P4800所指向的首地址等于P40,都要加1 { *p4800=*p40; p40=p40+1; p4800=p4800+1; }

// B2 p4800=0x4800; for(k=0;k<16;k++) //循环16次,每次循环P4800、 P50都要加1 { *p50=*p4800; p50=p50+1; p4800=p4800+1; } } //B3 二、汇编语言指令 C:0x0000 02008C LJMP STARTUP1(C:008C) 6: void main( ) 7: { 8: p40=0x40; C:0x0003 750A40 MOV p40(0x0A),#0x40 9: p50=0x50; C:0x0006 750B00 MOV p50(0x0B),#0x00 C:0x0009 750C00 MOV 0x0C,#0x00 C:0x000C 750D50 MOV 0x0D,#0x50 10: p4800=0x4800; C:0x000F 750848 MOV p4800(0x08),#0x48 C:0x0012 750900 MOV 0x09,#0x00 11: for(i=0;i<16;i++) C:0x0015 E4 CLR A C:0x0016 F50E MOV i(0x0E),A 12: { 13: *p40=i; C:0x0018 A80A MOV R0,p40(0x0A) C:0x001A A60E MOV @R0,i(0x0E) 14: p40=p40+1; C:0x001C 050A INC p40(0x0A) 15: } 16: //B1 C:0x001E 050E INC i(0x0E) C:0x0020 E50E MOV A,i(0x0E) C:0x0022 B410F3 CJNE A,#k(0x10),C:0018 17: p40=0x40; C:0x0025 750A40 MOV p40(0x0A),#0x40 18: for(j=0;j<16;j++) C:0x0028 E4 CLR A C:0x0029 F50F MOV j(0x0F),A 19: { 20: *p4800=*p40; C:0x002B A80A MOV R0,p40(0x0A) C:0x002D E6 MOV A,@R0 C:0x002E 850982 MOV DPL(0x82),0x09 C:0x0031 850883 MOV DPH(0x83),p4800(0x08) C:0x0034 F0 MOVX @DPTR,A 21: p40=p40+1; C:0x0035 050A INC p40(0x0A) 22: p4800=p4800+1; C:0x0037 0509 INC 0x09 C:0x0039 E509 MOV A,0x09 C:0x003B 7002 JNZ C:003F C:0x003D 0508 INC p4800(0x08) 23: } 24: 25: // B2 C:0x003F 050F INC j(0x0F) C:0x0041 E50F MOV A,j(0x0F) C:0x0043 B410E5 CJNE A,#k(0x10),C:002B 26: p4800=0x4800; C:0x0046 750848 MOV p4800(0x08),#0x48 C:0x0049 750900 MOV 0x09,#0x00 27: for(k=0;k<16;k++) C:0x004C E4 CLR A C:0x004D F510 MOV k(0x10),A 28: { 29: *p50=*p4800; C:0x004F 850982 MOV DPL(0x82),0x09 C:0x0052 850883 MOV DPH(0x83),p4800(0x08) C:0x0055 E0 MOVX A,@DPTR C:0x0056 AB0B MOV R3,p50(0x0B) C:0x0058 AA0C MOV R2,0x0C C:0x005A A90D MOV R1,0x0D C:0x005C 12007A LCALL C?CSTPTR(C:007A) 30: p50=p50+1; C:0x005F 7401 MOV A,#0x01 C:0x0061 250D ADD A,0x0D C:0x0063 F50D MOV 0x0D,A C:0x0065 E4 CLR A C:0x0066 350C ADDC A,0x0C C:0x0068 F50C MOV 0x0C,A 31: p4800=p4800+1; C:0x006A 0509 INC 0x09 C:0x006C E509 MOV A,0x09 C:0x006E 7002 JNZ C:0072 C:0x0070 0508 INC p4800(0x08) 32: } } C:0x0072 0510 INC k(0x10) C:0x0074 E510 MOV A,k(0x10) C:0x0076 B410D6 CJNE A,#k(0x10),C:004F C:0x0079 22 RET C?CSTPTR: C:0x007A BB0106 CJNE R3,#0x01,C:0083 C:0x007D 8982 MOV DPL(0x82),R1 C:0x007F 8A83 MOV DPH(0x83),R2 C:0x0081 F0 MOVX @DPTR,A C:0x0082 22 RET C:0x0083 5002 JNC C:0087 C:0x0085 F7 MOV @R1,A C:0x0086 22 RET C:0x0087 BBFE01 CJNE R3,#0xFE,C:008B C:0x008A F3 MOVX @R1,A C:0x008B 22 RET 133: MOV R0,#IDATALEN - 1 C:0x008C 787F MOV R0,#0x7F 134: CLR A C:0x008E E4 CLR A 135: IDATALOOP: MOV @R0,A C:0x008F F6 MOV @R0,A 136: DJNZ R0,IDATALOOP C:0x0090 D8FD DJNZ R0,IDATALOOP(C:008F) 185: MOV SP,#?STACK-1 186: 187: ; This code is required if you use L51_BANK.A51 with Banking Mode 4 188: ; Code Banking 189: ; Select Bank 0 for L51_BANK.A51 Mode 4 190: #if 0 191: ; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.

192: EXTRN CODE (?B_SWITCH0) 193: CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 194: #endif 195: ; C:0x0092 758110 MOV SP(0x81),#k(0x10) 196: LJMP ?C_START 三、画出如下要测的数据表格: 断点 40H~4FH 4800H~480FH 50H~5FH P40 P50 P4800

B1 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x49 0x50

B2 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x49 0x50 0x4800 0x4801 0x4802 0x4803 0x4804 0x4805 0x4806 0x4807 0x4808 0x4809 0x4810