1、单片机实验伟福LabP汇编语言源程序伟福.Lab2000P单片机仿真实验系统 MCS51汇编语言源程序参考 ; 软件实验一:存储器块清零 S1.ASM Block equ 6000h 0000 906000 mov dptr, #Block ; 起始地址 0003 7800 mov r0, #0 ; 清 256 字节 0005 E4 clr a Loop: 0006 F0 movx dptr, a 0007 A3 inc dptr ; 指向下一个地址 0008 D8FC djnz r0, Loop ; 记数减一 000A 02000A ljmp $ end ; 软件实验二:二进制到 BCD码转
2、换 S2.ASM ; 将 A 拆为三个 BCD 码, 并存入 Result 开始的叁个单元 Result equ 20h org 0 0000 020015 ljmp Start BinToBCD: 0003 75F064 mov b, #100 0006 84 div ab 0007 F520 mov Result, a ; 除以 100, 得百位数 0009 E5F0 mov a, b 000B 75F00A mov b, #10 000E 84 div ab 000F F521 mov Result+1, a ; 余数除以 10, 得十位数 0011 85F022 mov Result+
3、2, b ; 余数为个位数 0014 22 ret Start: 0015 758140 mov sp, #40h 0018 747B mov a, #123 001A 1103 call BinToBCD 001C 02001C ljmp $ end ; 软件实验三:二进制到ASCII码转换 S3.ASM ; 将 A 拆为二个 ASCII 码, 并存入 Result 开始的二个单元 Result equ 20h org 0 0000 020026 ljmp Start ASCIITab: 0003 303132 0006 333435 0009 363738 000C 394142 000F
4、 434445 0012 46 db 0123456789ABCDEF ; 定义数字对应的 ASCII表 BinToHex: 0013 900003 mov dptr, #ASCIITab 0016 F5F0 mov b, a ; 暂存 A 0018 C4 swap a 0019 540F anl a, #0fh ; 取高四位 001B 93 movc a, a+dptr ; 查 ASCII表 001C F520 mov Result, a 001E E5F0 mov a, b ; 恢复 A 0020 540F anl a, #0fh ; 取低四位 0022 93 movc a, a+dptr
5、 ; 查 ASCII表 0023 F521 mov Result+1, a 0025 22 ret Start: 0026 758140 mov sp, #40h 0029 741A mov a, #1ah 002B 1113 call BinToHex 002D 02002D ljmp $ end ; 软件实验四内存块移动 S4.ASM ; 移动 3000H - 4000H, 256 字节 0000 7830 mov r0, #30h 0002 7900 mov r1, #00h 0004 7A40 mov r2, #40h 0006 7B00 mov r3, #00h 0008 7F00
6、mov r7, #0 Loop: 000A 8883 mov dph, r0 000C 8982 mov dpl, r1 000E E0 movx a, dptr 000F 8A83 mov dph, r2 0011 8B82 mov dpl, r3 0013 F0 movx dptr, a 0014 B9FF01 cjne r1, #0ffh, Goon1 0017 08 inc r0 Goon1: 0018 09 inc r1 0019 BBFF01 cjne r3, #0ffh, Goon2 001C 0A inc r2 Goon2: 001D 0B inc r3 001E DFEA d
7、jnz r7, Loop 0020 020020 ljmp $ end ;软件实验五程序跳转表 S5.ASM org 0 0000 02001D ljmp Start 0003 7400 Func0: mov a, #0 0005 22 ret 0006 7401 Func1: mov a, #1 0008 22 ret 0009 7402 Func2: mov a, #2 000B 22 ret 000C 7403 Func3: mov a, #3 000E 22 ret FuncEnter: 000F 25E0 add a, acc ; ajmp 为二字节指令 , 调用号 X 2 0011
8、 900015 mov dptr, #FuncTab 0014 73 jmp a+dptr FuncTab: 0015 0103 ajmp Func0 0017 0106 ajmp Func1 0019 0109 ajmp Func2 001B 010C ajmp Func3 Start: 001D 7400 mov a, #0 001F 110F call FuncEnter 0021 7401 mov a, #1 0023 110F call FuncEnter 0025 7402 mov a, #2 0027 110F call FuncEnter 0029 7403 mov a, #3
9、 002B 110F call FuncEnter 002D 02002D ljmp $ end ; 软件实验六数据排序 S6.ASM Size equ 10 ; 数据个数 Array equ 50h ; 数据起始地址 Change equ 0 ; 交换标志 Sort: 0000 7850 mov r0, #Array 0002 7F09 mov r7, #Size-1 0004 C200 clr Change Goon: 0006 E6 mov a, r0 0007 FA mov r2, a 0008 08 inc r0 0009 86F0 mov B, r0 000B B5F002 cjn
10、e a, B, NotEqual 000E 8008 sjmp Next NotEqual: 0010 4006 jc Next ; 前小后大 , 不交换 0012 D200 setb Change ; 前大后小 , 置交换标志 0014 C6 xch a, r0 ; 交换0015 18 dec r0 0016 C6 xch a, r0 0017 08 inc r0 Next: 0018 DFEC djnz r7, Goon 001A 2000E3 jb Change, Sort 001D 02001D ljmp $ end ; 硬件实验一 P1口输入、输出实验H1A.ASM Loop: 00
11、00 7401 mov a, #01h 0002 7A08 mov r2, #8 Output: 0004 F590 mov P1, a 0006 23 rl 0007 12000F call D( a) elay 000A DAF8 djnz r2, Output 000C 020000 ljmp Loop Delay: 000F 7E00 mov r6, #0 0011 7F00 mov r7, #0 DelayLoop: 0013 DEFE djnz r6, DelayLoop 0015 DFFC djnz r7, DelayLoop 0017 22 ret end ; 硬件实验一 P1
12、口输入、输出实验 H1B.ASM KeyLeft equ P1.0 KeyRight equ P1.1 LedLeft equ P1.2 LedRight equ P1.3 0000 D290 SETB KeyLeft 0002 D291 SETB KeyRight Loop: 0004 A290 MOV C,KeyLeft 0006 9292 MOV LedLeft,C 0008 A291 MOV C,KeyRight 000A 9293 MOV Ledright,C 000C 020004 LJMP Loop END ; 硬件实验二继电器控制实验 H2.ASM Output equ P1.
13、0 ; P1.0 port Loop: 0000 C3 clr 0001 9290 mov O( c) utput,c 0003 12000F call Delay 0006 D3 setb 0007 9290 mov O( c) utput,c 0009 12000F call Delay 000C 020000 ljmp Loop - 4 - 伟福 .Lab2000P单片机仿真实验系统 MCS51汇编语言程序清单 Delay: 000F 7E00 mov r6, #0 0011 7F00 mov r7, #0 DLoop: 0013 DFFE djnz r7, DLoop 0015 DEF
14、C djnz r6, DLoop 0017 22 ret end ;硬件实验三 用74LS245扩展 I/O口实验 CS245 equ 8000h org 0000h Loop: 0000 908000 mov dptr,#CS245 0003 E0 movx a, dptr 0004 020000 ljmp Loop end ;硬件实验四 用74LS273扩展I/O口实验 CS273 equ 8000h 0000 908000 mov dptr, #CS273 0003 7401 mov a, #1 Loop: 0005 F0 movx dptr, a 0006 23 rl a 0007 0
15、0 nop 0008 020005 ljmp Loop end ; 硬件实验五 PWM转换电压实验 H5.ASM ; 输出 50% (5:5) 占空比 PWM ; 输出 10% (1:9) 占空比 PWM ; 输出 90% (9:1) 占空比 PWM OUTPUT equ P1.0 Loop: 0000 C290 clr OUTPUT 0002 7403 mov A, #3 0004 120011 call Delay 0007 D290 setb OUTPUT 0009 7407 mov a, #7 000B 120011 call Delay 000E 020000 ljmp Loop D
16、elay: 0011 7800 mov r0, #0 DLoop: 0013 D8FE djnz r0, DLoop 0015 D5E0FB djnz acc, DLoop 0018 22 ret end H3.ASM H4.ASM; 硬件实验六音频控制实验 H6.ASM Speaker equ P1.0 CBit equ 0 Loop: 0000 C200 clr CBit 0002 850090 mov Speaker,CBit 0005 120013 call Delay 0008 D200 setb CBit 000A 850090 mov Speaker,CBit 000D 1200
17、13 call Delay 0010 020000 ljmp Loop Delay: 0013 7832 mov r0, #50 0015 D8FE djnz r0, $ 0017 22 ret end ; 硬件实验七 8255输入、输出实验 H7.ASM mode equ 082h ; 方式 0,PA,PC输出,PB输入 PortA equ 0f000h ; Port A PortB equ 0f001h ; Port B PortC equ 0f002h ; Port C CAddr equ 0f003h ; 控制字地址 org 0h 0000 7482 mov a, #mode 0002
18、 90F003 mov dptr, #CAddr 0005 F0 movx dptr,a ; 输出控制字 0006 02001B jmp EX_B ;实验 1:PortA输出 EX_A: 0009 7480 mov a,#80H 000B 90F000 mov dptr,#PortA 000E 75F008 mov b,#8H 0011 F0 OutA: movx dptr,a ; 输出 PortA 0012 03 rr a ; 移位 0013 7D01 mov r5,#1 0015 12002B call delay ; 延时 0018 D5F0F6 djnz b, OutA ;实验 2:
19、PortB 输入 PortA 输出 EX_B: 001B 90F001 mov dptr,#PortB 001E E0 movx a,dptr ; 读入 PortB 001F 90F000 mov dptr,#PortA 0022 F0 movx dptr,a ; 输出到 PortA 0023 7D02 mov r5,#2 0025 12002B call delay 0028 020000 ljmp 0 delay: 002B 7F00 mov r7,#0 002D DFFE ddd: djnz r7,ddd 002F DEFC djnz r6,ddd 0031 DDFA djnz r5,d
20、dd 0033 22 ret end ; 硬件实验八 串行数转换并行数实验 H8A.ASM 0000 759800 mov SCON, #0 ; 串口方式 0 0003 74AA mov a, #0aah 0005 F599 mov SBUF, a ; 输出 55h 0007 3099FD jnb ti, $ 000A C299 clr ti 000C 02000C ljmp $ end ; 硬件实验八 串行数转换并行数实验 H8B.ASMLD equ P1.0 DAT equ P1.1 CLK equ P1.2 0000 D292 setb CLK 0002 C290 clr LD 0004
21、 D290 setb LD 0006 7F08 mov r7, #8 Next: 0008 03 rr a 0009 A291 mov c, DAT 000B 92E7 mov ACC.7, c 000D C292 clr CLK 000F D292 setb CLK 0011 DFF5 djnz r7, Next 0013 020013 ljmp $ end ; 硬件实验九 并行数转换串行数实验 H9A.ASM LD equ P1.0 0000 C290 clr LD 0002 D290 setb LD 0004 759810 mov SCON, #00010000b 0007 3098FD
22、 Wait: jnb RI, Wait 000A E599 mov a, SBUF 000C C298 clr ri 000E 02000E ljmp $ end ; 硬件实验九 并行数转换串行数实验 H9B.ASM LD equ P1.0 DAT equ P1.1 CLK equ P1.2 0000 D292 setb CLK 0002 C290 clr LD 0004 D290 setb LD 0006 7F08 mov r7, #8 Next: 0008 03 rr a 0009 A291 mov c, DAT 000B 92E7 mov ACC.7, c 000D C292 clr C
23、LK 000F D292 setb CLK 0011 DFF5 djnz r7, Next 0013 020013 ljmp $ end ; 硬件实验十 计数器实验 H10.ASM 0000 758905 mov TMOD, #00000101b ; 方式 1,记数器 0003 758C00 mov TH0, #0 0006 758A00 mov TL0, #0 0009 D28C setb TR0 ; 开始记数 Loop: 000B 858A90 mov P1, TL0 ; 将记数结果送 P1口 000E 02000B ljmp Loop end ; 硬件实验十一 外部中断实验 H11.AS
24、M LED equ P1.0 LEDBuf equ 0 0000 02000E ljmp Start org 3 Interrupt0: 0003 C0D0 push PSW ; 保护现场 0005 B200 cpl LEDBuf ; 取反 LED 0007 A200 mov c, LEDBuf 0009 9290 mov LED, c 000B D0D0 pop PSW ; 恢复现场 000D 32 reti Start: 000E C200 clr LEDBuf 0010 C290 clr LED 0012 758801 mov TCON, #01h ; 外部中断 0下降沿触发 0015
25、75A881 mov IE, #81h ; 打开外部中断允许位(EX0)及总中断允许位(EA) 0018 020018 ljmp $ end ; 硬件实验 十二定时器实验 H12.ASM T100us equ 256-50 ; 100us时间常数(6M) C100us equ 30h ; 100us记数单元 LEDBuf equ 0 LED equ P1.0 0000 020026 ljmp Start org 000bh T0Int: 000B C0D0 push PSW 000D E531 mov a, C100us+1 000F 7002 jnz Goon 0011 1530 dec C
26、100us Goon: 0013 1531 dec C100us+1 0015 E530 mov a, C100us 0017 4531 orl a, C100us+1 0019 7008 jnz Exit ; 100us 记数器不为 0, 返回 001B 753027 mov C100us, #high(Tick) 001E 753110 mov C100us+1, #low(Tick) 0021 B200 cpl LEDBuf ; 100us 记数器为 0, 重置记数器 ; 取反 LED Exit: 0023 D0D0 pop PSW 0025 32 reti Start: 0026 75
27、8902 mov TMOD, #02h ; 方式 2, 定时器 0029 758CCE mov TH0, #t100us 002C 758ACE mov TL0, #t100us 002F 75A882 mov IE, #10000010b ; EA=1, IT0 = 1 0032 D28C setb TR0 ; 开始定时 0034 C200 clr LEDBuf 0036 C290 clr LED 0038 753027 mov C100us, #high(Tick) 003B 753110 mov C100us+1, #low(Tick) Loop: 003E A200 mov c, LE
28、DBuf 0040 9290 mov LED, c 0042 02003E ljmp Loop end ; 硬件实验十三 D/A 转换实验 H13.ASM CS0832 equ 0a000h 0000 90A000 mov dptr, #CS0832 0003 7400 mov a, #0 0005 F0 movx dptr, a 0006 7440 mov a, #40h 0008 F0 movx dptr, a 0009 7480 mov a, #80h 000B F0 movx dptr, a 000C 74C0 mov a, #0c0h 000E F0 movx dptr, a 000
29、F 74FF mov a, #0ffh 0011 F0 movx dptr, a 0012 020012 ljmp $ end ; 硬件实验十四 A/D 转换实验 H14.ASM mode equ 082h ; 方式 0,PA,PC输出,PB输入 CS0809 equ 8000h PortA equ 9000h ; Port A PortB equ 9001h ; Port B PortC equ 9002h ; Port C CAddr equ 9003h ; 控制字地址 org 0 0000 909003 mov dptr,#CAddr 0003 7482 mov a,#mode 0005 F0 movx dptr,a 0006 908000 mov dptr, #CS0809 0009 7400 mov a, #0 000B F0 movx dptr, a ; 起动 A/D 000C 7440 mov a, #40h 000E D5E0FD djnz ACC, $ ; 延时 100us 0011 E0 movx a, dptr ; 读入结果 0012 7F64 mov r7,#100 dly: 0014 909000 mov dptr,#PortA 0017 F0 movx dptr,a 0018 DFFA djnz r7,dly ;延时 001A 02
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1