单片机实验代码集合(by fangyuan)1.多字节累加程序:ORG 0000HLJMP MAINORG 0030H;将加数和被加数送到指定地址MAIN: MOV 20H,#45HMOV 21H,#74HMOV 30H,#67HMOV 31H,#28H;低位相加MOV A,21HADD A,31HDA AMOV 42H,A;高位相加MOV A,20HADDC A,30HDA AMOV 41H,ACLR AADDC A,#0MOV 40H,ASJMP $END2.数据交换实验编写程序,实现以下操作:【功能1】产生数组Hex1:0H、1H、2H、…0FH,存储到片内RAM区中,数组Hex1的首地址为30H。
【功能2】产生数组Hex2:0FH、0EH、0DH、…0H,存储到片外RAM区中,数组Hex2的首地址为3000H。
【功能3】将片内RAM数组Hex1与片外RAM数组Hex2交换内容。
代码:ORG 0000HHex1 EQU 30H ;定义内部RAM数组首地址Hex2 EQU 3000H ;定义外部RAM数组首地址LJMP MAINORG 0030HMAIN: MOV SP,#4FH ;定义栈顶地址MOV R7,#16MOV R0,#Hex1MOV DPTR,#Hex2LCALL HEX1DE ;调用内部送数据函数LCALL HEX2DE ;调用外部送数据函数LCALL XCHDE ;调用交换函数SJMP $ORG 0100H;内部送数据HEX1DE: PUSH 00HPUSH 07HMOV A,#0LOOP1: MOV @R0,AINC AINC R0DJNZ R7,LOOP1POP 07HPOP 00HRET;外部送数据HEX2DE: PUSH 07HPUSH DPLPUSH DPHMOV A,#0FHLOOP2: MOVX @DPTR,ADEC AINC DPTRDJNZ R7,LOOP2POP DPHPOP DPLPOP 07HRET;交换子程序XCHDE:LOOP3: MOVX A,@DPTRXCH A,@R0INC R0INC DPTRDJNZ R7,LOOP3RETEND3.查表实验1、《单片机原理及应用实验教程》(第2版)“第2章实验3”(P49)。
要求:16进制数(00H~0FH)ASCⅡ码表定义在内部ROM中(用伪指令定义);R0为片内RAM区Hex 数组指针;R1为片内RAM区Asc数组指针;数据块长度放在寄存器R2中。
代码如下:ORG 0000HHex EQU 40HAsc EQU 50HLJMP MAINORG 0030HMAIN:MOV R2,#16MOV DPTR,#TABLEMOV R0,#HexMOV R1,#AscMOV SP,#2FHLCALL FUZHILCALL ZHUANHUANSJMP $TABLE:DB '0123456789';查表子程序ORG 1000HZHUANHUAN:PUSH 00HPUSH 01HPUSH 02HLOOP1:MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,LOOP1POP 02HPOP 01HPOP 00HRET;R0送值子程序FUZHI:PUSH 00HPUSH 01HPUSH 02HMOV A,#0LOOP2:MOV @R0,AINC R0INC ADJNZ R2,LOOP2POP 02HPOP 01HPOP 00HRETEND2、编写用@A+PC指令的查表程序,实现用查表方式将片内RAM中16进制数组Hex(00H~0FH)转换为ASCⅡ码并存入片内RAM数组Asc中。
要求:16进制数(00H~0FH)ASCⅡ码表在内部ROM中;R0为片内RAM区Hex数组指针;R1为片内RAM区Asc数组指针;数据块长度放在寄存器R2中。
代码如下:ORG 0000HHex EQU 40H ;内部Hex送数据地址定义Asc EQU 50H ;查表后数据储存地址定义LJMP MAINORG 0030HMAIN:MOV R2,#16MOV DPTR,#TABLEMOV R0,#HexMOV R1,#AscMOV SP,#2FHLCALL FUZHI ;送值函数LCALL CHABIAO ;查表函数SJMP $ORG 1000H;查表子程序CHABIAO:PUSH 00HPUSH 01HPUSH 02HLOOP1:MOV A,@R0ADD A,#20HMOVC A,@A+PCMOV @R1,AINC R0INC R1DJNZ R2,LOOP1POP 02HPOP 01HPOP 00HRET;R0送值子程序FUZHI:PUSH 00HPUSH 01HPUSH 02HMOV A,#0LOOP2:MOV @R0,AINC R0INC ADJNZ R2,LOOP2POP 02HPOP 01HPOP 00HRETTABLE:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46HEND4.十进制数1-100累加运算《单片机原理及应用实验教程》(第2版)“第2章实验5”(P30)。
编写程序,实现以下功能:【功能1】产生十进制数1~100,并存放在片外RAM中以1000H为首地址的Deci数组中。
【功能2】对Deci数组元素进行累加运算,并将累加和存入内部RAM中60H(存累加和低位)和61H(存累加和高位)单元。
代码如下:方法一:ORG 0000HLJMP MAINORG 0030HMAIN: MOV R7,#100MOV DPTR,#1000HMOV SP,#20HLCALL STEP1LCALL STEP2SJMP $ORG 2000HSTEP1: PUSH 07HPUSH DPHPUSH DPLMOV A,#0MOV R3,#0LOOP1: INC ADA AXCH A,R3ADDC A,#0MOVX @DPTR,AINC DPTRXCH A,R3MOVX @DPTR,AINC DPTRDJNZ R7,LOOP1POP DPLPOP DPHPOP 07HRETSTEP2: PUSH 07HPUSH DPHPUSH DPLMOV 60H,#0MOV 61H,#0MOV R3,#0LOOP2: INC DPTRMOVX A,@DPTRADD A,60HDA AMOV 60H,ACLR AADDC A,61HDA AMOV 61H,AINC DPTRDJNZ R7,LOOP2MOV A,#1ADD A,61HDA AMOV 61H,APOP DPLPOP DPHPOP 07HRETEND方法二:ORG 0000HLJMP MAINORG 0030H MAIN: MOV R7,#100MOV DPTR,#1000HMOV SP,#20HLCALL STEP1LCALL STEP2SJMP $ORG 2000H;送值子函数STEP1: PUSH 07HPUSH DPHPUSH DPLMOV A,#0 LOOP1: INC ADA AMOVX @DPTR,AINC DPTRDJNZ R7,LOOP1CLR AADDC A,#0MOVX @DPTR,APOP DPLPOP DPHPOP 07HRET;累加子函数STEP2: PUSH 07HPUSH DPHPUSH DPLMOV 60H,#0MOV 61H,#0 LOOP2:MOVX A,@DPTRADD A,60HDA AMOV 60H,ACLR AADDC A,61HDA AMOV 61H,AINC DPTRDJNZ R7,LOOP2MOVX A,@DPTRADD A,61HDA AMOV 61H,APOP DPLPOP DPHPOP 07HRETEND5.DPTR指针应用《单片机原理及应用实验教程》(第2版)“第2章实验6”(P31)。
编写程序,实现以下功能:【功能1】产生十进制数组Deci(1~99),并存放在片内RAM中,Deci数组首地址为08H。
【功能2】将Deci数组中的偶数元素全部送入外部RAM偶数区,首地址为2000H;将Deci 数组中的奇数元素全部送入外部RAM奇数区,首地址为3000H;分别统计外部RAM偶数区和奇数区元素个数。
代码如下:ORG 0000HLJMP MAINORG 0030HMAIN: MOV SP,#70HMOV R7,#99MOV R0,#08HMOV R5,#0MOV R6,#0LCALL STEP1LCALL STEP2SJMP $STEP1: PUSH 00HPUSH 07HMOV A,#1LOOP1: DA AMOV @R0,AINC R0INC ADJNZ R7,LOOP1POP 07HPOP 00HRETSTEP2: MOV DPTR,#2000HPUSH DPLPUSH DPHMOV DPTR,#3000HMOV R3,DPHMOV R4,DPLLP1: M OV A,@R0MOV R2,AJNB ACC.0,LOOP2SJMP LOOP3LOOP2: POP DPHPOP DPLMOVX @DPTR,AMOV A,R5ADD A,#1DA AMOV R5,AINC DPTRPUSH DPLPUSH DPHSJMP NEXTLOOP3: MOV DPH,R3MOV DPL,R4MOVX @DPTR,AMOV A,R6ADD A,#1DA AMOV R6,AINC DPTRMOV R3,DPHMOV R4,DPLSJMP NEXTNEXT: INC R0DJNZ R7,LP1POP DPHPOP DPLRETEND6.定时器应用实验DBUF EQU 30HORG 0000H STRT:LJMP MAINORG 000BHLJMP PTF00ORG 0030H MAIN:MOV DPTR,#5FFFHMOV A,#0DCHMOVX @DPTR,AMOV R5,#20LP:MOVX A,@DPTRJNB ACC.7,LPMOV A,#00HMOVX @DPTR,AMOV A,#34HMOVX @DPTR,AMOV SP,#60HMOV R0,#39HMOV R7,#06HML1:MOV @R0,#00HINC R0DJNZ R7,ML1MOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHSETB TR0MOV IE,#82HMOV 40H,#10HML0:LCALL DIRLJMP ML0PTF00:PUSH PSWPUSH ACCSETB PSW.3MOV TL0,#0B0HMOV TH0,#3CHDJNZ R5,PTFYMOV R5,#20MOV A,40HDEC AMOV 40H,AJNZ PTFYMOV 40H,#10HMOV R0,#39HMOV R7,#6PTFX:MOV A,@R0ADD A,#1DA AMOV @R0,ACJNE A,#0AH,$+3JC PTFYMOV @R0,#0INC R0DJNZ R7,PTFXPTFY:POP ACCPOP PSWRETIDIR:MOV R3,#06HMOV A,#92HMOV DPTR,#5FFFHMOVX @DPTR,AMOV R1,#39HTY11:MOV A,@R1MOV DPTR,#CODE1MOVC A,@A+DPTRMOV DPTR,#5FFFHMOVX @DPTR,AINC R1DJNZ R3,TY11RETCODE1:DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90H,88HDB 83H,0C6H,0A1H,86H,8EH,8CHDB 0C1H,89H,0C7H,0BFH,91HDB 00H,0FFHEND7.广告灯实验ORG 0000HLJMP MAINORG 000BHLJMP DELAYORG 0030HMAIN:MOV DPTR,#TABMOV R5,#71HMOV R2,#00HMOV R6,#20MOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHSETB TR0MOV IE,#82HSJMP $DELAY:MOV TL0,#0B0HMOV TH0,#2CHDJNZ R6,LPACALL STEPMOV R6,#20DJNZ R5,LPMOV R5,#71HLP:RETISTEP:LOOP:MOV A,R2MOVC A,@A+DPTRMOV P1,AINC R2DEC R5RETTAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FHDB 0FFH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDHDB 0FEH,0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0HDB 80H,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCHDB 0FEH,0FFH,7FH,3FH,1FH,0FH,07H,03HDB 01H,00H,01H,03H,07H,0FH,1FH,3FHDB 7FH,0FFH,7EH,3CH,18H,00H,18H,3CHDB 7EH,0FFH,0FEH,0FCH,0FCH,0F9H,0F3H,0E7HDB 0CFH,9FH,3FH,7FH,0FFH,7FH,3FH,9FHDB 0CFH,0E7H,0F3H,0F9H,0FCH,0FEH,0FFHDB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00HDB 80H,40H,20H,10H,08H,04H,02H,01H,00HDB 01H,02H,04H,08H,10H,20H,40H,80H,00HDB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END。