logo资料库

lab8000单片机仿真实验 汇编语言程序.pdf

第1页 / 共240页
第2页 / 共240页
第3页 / 共240页
第4页 / 共240页
第5页 / 共240页
第6页 / 共240页
第7页 / 共240页
第8页 / 共240页
资料共240页,剩余部分请下载后查看
伟福 Lab2000P 单片机仿真实验系统 ® MCS51 汇编语言程序清单 附录 A 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 码转换 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+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 - 1 -
伟福 Lab2000P 单片机仿真实验系统 MCS51 ® 汇编语言程序清单 0006 333435 0009 363738 000C 394142 000F 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 ; 查 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 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 djnz r7, Loop 0020 020020 ljmp $ end - 2 -
伟福 Lab2000P 单片机仿真实验系统 ® MCS51 汇编语言程序清单 ; 软件实验五 程序跳转表 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 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 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 cjne a, B, NotEqual 000E 8008 sjmp Next NotEqual: 0010 4006 jc Next ; 前小后大, 不交换 0012 D200 setb Change ; 前大后小, 置交换标志 0014 C6 xch a, @r0 ; 交换 - 3 -
伟福 Lab2000P 单片机仿真实验系统 MCS51 ® 汇编语言程序清单 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: 0000 7401 mov a, #01h 0002 7A08 mov r2, #8 Output: 0004 F590 mov P1, a 0006 23 rl a 0007 12000F call Delay 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 口输入、输出实验 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.0 ; P1.0 port Loop: 0000 C3 clr c 0001 9290 mov Output,c 0003 12000F call Delay 0006 D3 setb c 0007 9290 mov Output,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 DEFC djnz r6, DLoop 0017 22 ret end ; 硬件实验三 用 74LS245 扩展 I/O 口实验 H3.ASM CS245 equ 8000h org 0000h Loop: 0000 908000 mov dptr,#CS245 0003 E0 movx a, @dptr 0004 020000 ljmp Loop end ; 硬件实验四 用 74LS273 扩展 I/O 口实验 H4.ASM CS273 equ 8000h 0000 908000 mov dptr, #CS273 0003 7401 mov a, #1 Loop: 0005 F0 movx @dptr, a 0006 23 rl a 0007 00 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 Delay: 0011 7800 mov r0, #0 DLoop: 0013 D8FE djnz r0, DLoop 0015 D5E0FB djnz acc, DLoop 0018 22 ret end - 5 -
伟福 Lab2000P 单片机仿真实验系统 MCS51 ® 汇编语言程序清单 ; 硬件实验六 音频控制实验 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 120013 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 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: 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 - 6 -
伟福 Lab2000P 单片机仿真实验系统 ® MCS51 汇编语言程序清单 002F DEFC djnz r6,ddd 0031 DDFA djnz r5,ddd 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.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 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 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 - 7 -
伟福 Lab2000P 单片机仿真实验系统 MCS51 ® 汇编语言程序清单 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 ; 硬件实验十 计数器实验 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.ASM 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 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 - 8 -
分享到:
收藏