收藏 分销(赏)

单片机实验汇编源程序.doc

上传人:仙人****88 文档编号:8945404 上传时间:2025-03-08 格式:DOC 页数:75 大小:39.67KB
下载 相关 举报
单片机实验汇编源程序.doc_第1页
第1页 / 共75页
单片机实验汇编源程序.doc_第2页
第2页 / 共75页
点击查看更多>>
资源描述
;软件实验〇:发光二极管右移显示 org 0 ajmp main main: mov sp,#5fh mov a,#7fh loop: mov p0,a lcall delay rr a ajmp loop delay: mov r7,#0 del0: mov r6,#0 del1: nop nop djnz r6,del1 djnz r7,del0 ret end ;软件实验一:存储器块清零 ;将内部RAM从30H开始至5h单元内容清零 ORG 0000H LJMP START ORG 0100H START: mov r0,#30h mov a,#00h loop: mov @r0,a inc r0 cjne r0,#60h,loop sjmp $ END ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;将外部RAM从90H开始至0CH单元内容清零 ORG 0000H LJMP START ORG 0100H START: mov r0,#90h mov a,#00h loop: movx @r0,a inc r0 cjne r0,#0c0h,loop sjmp $ END ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;将外部RAM从2000H开始的100个单元内容清零 ORG 0000H LJMP START ORG 0100H START: mov dptr,#2000h mov b,#100 mov a,#00h loop: movx @dptr,a inc dptr djnz b,loop sjmp $ END ;******************* Block equ 3000h mov dptr, #Block ; 起始地址 mov r0, #0ffh ; 清 256 字节 clr a Loop: movx @dptr, a inc dptr ; 指向下一个地址 djnz r0, Loop ; 记数减一 ljmp $ end ;软件实验二:二进制到BCD转换 程序功能:单字节二进制数转换成为压缩BCD码程序 条件: 待转换的单字节二进制数放在累加器A中 结果: 转换后的BCD码十位和个位仍放在累加器A中,百位放在R3中 ORG 0000H LJMP START ORG 0100H START: mov B,#100 ;分离出百位放在R3中 DIV AB MOV R3,A mov a,#10 ;余数继续分离 XCH A,B DIV AB SWAP A ORL A,B ;将十位和个位组合成压缩BCD码 sjmp $ END **************************************** ; 将 A 拆为三个 BCD 码, 并存入 Result 开始的叁个单元 Result equ 20h org 0 ljmp Start BinToBCD: mov b, #100 div ab mov Result, a ; 除以 100, 得百位数 mov a, b mov b, #10 div ab mov Result+1, a ; 余数除以 10, 得十位数 mov Result+2, b ; 余数为个位数 ret Start: mov sp, #40h mov a, #123 call BinToBCD ljmp $ end ;软件实验三:十进制到ASCII码转换 程序功能:给出一个压缩BCD码用逻辑运算方法将其转换成ASCII码程序 条件: 待转换的压缩BCD码放在30h中 结果: 转换后的ASCII码放在30h(高位)和31h(低位)单元中 ORG 0000H LJMP START ORG 0100H START: mov A,30H MOV B,A ORL A,#30H MOV 31H,A mov a,B SWAP A ORL A,#30H MOV 30H,A sjmp $ END ;************************* ; 将 A 拆为二个 ASCII 码, 并存入 Result 开始的二个单元 Result equ 20h org 0 ljmp Start ASCIITab: db '0123456789ABCDEF' ; 定义数字对应的ASCII表 BinToHex: mov dptr, #ASCIITab mov b, a ; 暂存 A swap a anl a, #0fh ; 取高四位 movc a, @a+dptr ; 查ASCII表 mov Result, a mov a, b ; 恢复 A anl a, #0fh ; 取低四位 movc a, @a+dptr ; 查ASCII表 mov Result+1, a ret Start: mov sp, #40h mov a, #1ah call BinToHex ljmp $ end ;软件实验四:存储块移动 程序功能:将片外数据存储器2000h单元开始的16个单元的内容移到3000h开始的16个单元中 ORG 0000H LJMP START ORG 0100H START: mov dptr,#2000h MOV b,#16 mov r0,#30h loop1: movx a,@dptr mov @r0,a inc dptr inc r0 djnz b,loop1 mov b,#16 mov r0,#30h mov dptr,#3000h loop2: mov a,@r0 movx @dptr,a inc r0 inc dptr djnz b,loop2 sjmp $ END ;********************************* ; 移动 3000H --> 4000H, 256 字节 mov r0, #30h mov r1, #00h mov r2, #40h mov r3, #00h mov r7, #0 Loop: mov dph, r0 mov dpl, r1 movx a, @dptr mov dph, r2 mov dpl, r3 movx @dptr, a cjne r1, #0ffh, Goon1 inc r0 Goon1: inc r1 cjne r3, #0ffh, Goon2 inc r2 Goon2: inc r3 djnz r7, Loop ljmp $ end ;软件实验五: org 0 ljmp Start Func0: mov a, #0 ret Func1: mov a, #1 ret Func2: mov a, #2 ret Func3: mov a, #3 ret FuncEnter: add a, acc ; ajmp 为二字节指令, 调用号 X 2 mov dptr, #FuncTab jmp @a+dptr FuncTab: ajmp Func0 ajmp Func1 ajmp Func2 ajmp Func3 Start: mov a, #0 call FuncEnter mov a, #1 call FuncEnter mov a, #2 call FuncEnter mov a, #3 call FuncEnter ljmp $ end ;软件实验六: 数据排序 Size equ 10 ; 数据个数 Array equ 50h ; 数据起始地址 Change equ 0 ; 交换标志 Sort: mov r0, #Array mov r7, #Size-1 clr Change Goon: mov a, @r0 mov r2, a inc r0 mov B, @r0 cjne a, B, NotEqual sjmp Next NotEqual: jc Next ; 前小后大, 不交换 setb Change ; 前大后小, 置交换标志 xch a, @r0 ; 交换 dec r0 xch a, @r0 inc r0 Next: djnz r7, Goon jb Change, Sort ljmp $ end ;硬件实验一:跑马灯 count equ 30H org 0 ajmp main main: mov sp,#5fh mov a,#7fh loop: mov p0,a mov count,#10 lcall deln10ms rr a ajmp loop ;******************************************* ; (1) (2) (3) (4) (5) (6) (7) ; t= 1T+( 1T+(1T+ 1T+ 2T )*25 + 2T)*100 + 2T =10303T=10303US=10.03MS ; ;******************************************* delay10ms: mov r7,#100 ;1T (1) del0: mov r6,#25 ;1T (2) del1: nop ;1T (3) nop ;1T (4) djnz r6,del1 ;2T (5) djnz r7,del0 ;2T (6) ret ;2T (7) ;入口参数:COUNT,t=count*10ms deln10ms: deln: lcall delay10ms djnz count,deln ret end   跑马灯(左右) count equ 30H sel0 equ p3.5 org 0 ajmp main main: mov sp,#5fh setb sel0 clr sel0 mov a,#0feh right: rr a mov p0,a mov count,#10 lcall deln10ms jb acc.0,right left: rl a mov p0,a mov count,#10 lcall deln10ms jb acc.7,left ajmp right ;******************************************* ; (1) (2) (3) (4) (5) (6) (7) ; t= 1T+( 1T+(1T+ 1T+ 2T )*25 + 2T)*100 + 2T =10303T=10303US=10.03MS ; ;******************************************* delay10ms: mov r7,#100 ;1T (1) del0: mov r6,#25 ;1T (2) del1: nop ;1T (3) nop ;1T (4) djnz r6,del1 ;2T (5) djnz r7,del0 ;2T (6) ret ;2T (7) ;入口参数:COUNT,t=count*10ms deln10ms: deln: lcall delay10ms djnz count,deln ret end ;硬件实验二:4位LED数码管动态显示 SEL0 EQU P3.5 SEL1 EQU P3.7 DISP1 EQU 30H DISP2 EQU 31H DISP3 EQU 32H DISP4 EQU 33H COUNT EQU 34H SCAN EQU 20H SCAN1 EQU 20H.0 SCAN2 EQU 20H.1 SCAN3 EQU 20H.2 SCAN4 EQU 20H.3 ORG 0000H LJMP MAIN ORG 001BH AJMP DISPLAY MAIN:MOV TMOD,#00010000B MOV TH1,#0ECH MOV TL1,#78H SETB ET1 SETB PT1 SETB EA SETB TR1 MOV COUNT,#0 CLR SEL0 CLR SEL1 MOV DISP1,#2 MOV DISP2,#0 MOV DISP3,#0 MOV DISP4,#6 WAIT: AJMP WAIT DISOUT1: MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A SETB SEL1 NOP CLR SEL1 RET DISOUT0:MOV A,SCAN MOV P0,A SETB SEL0 NOP CLR SEL0 RET DISPLAY:MOV TH1,#0ECH MOV TL1,#78H PUSH ACC PUSH PSW INC COUNT MOV A,COUNT CJNE A,#1,NO_DIS1 CLR SCAN1 SETB SCAN2 SETB SCAN3 SETB SCAN4 LCALL DISOUT0 MOV A,DISP1 LCALL DISOUT1 AJMP T1_END NO_DIS1:CJNE A,#2,NO_DIS2 SETB SCAN1 CLR SCAN2 SETB SCAN3 SETB SCAN4 LCALL DISOUT0 MOV A,DISP2 LCALL DISOUT1 AJMP T1_END NO_DIS2:CJNE A,#3,NO_DIS3 SETB SCAN2 CLR SCAN3 SETB SCAN2 SETB SCAN4 LCALL DISOUT0 MOV A,DISP3 LCALL DISOUT1 AJMP T1_END NO_DIS3:MOV COUNT,#0 SETB SCAN1 SETB SCAN2 SETB SCAN3 CLR SCAN4 LCALL DISOUT0 MOV A,DISP4 LCALL DISOUT1 T1_END: POP PSW POP ACC RETI TAB:DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H END ;硬件实验三:静态按键、显示实验 SEL0 EQU P3.5 SEL1 EQU P3.7 DISP1 EQU 30H DISP2 EQU 31H DISP3 EQU 32H DISP4 EQU 33H COUNT EQU 34H SCAN EQU 20H SCAN1 EQU 20H.0 SCAN2 EQU 20H.1 SCAN3 EQU 20H.2 SCAN4 EQU 20H.3 SCAN5 EQU 20H.4 SCAN6 EQU 20H.5 SCAN7 EQU 20H.6 ORG 0000H LJMP MAIN ORG 001BH AJMP DISPLAY MAIN:MOV TMOD,#00010000B MOV TH1,#0ECH MOV TL1,#78H SETB ET1 SETB PT1 SETB EA SETB TR1 MOV COUNT,#0 CLR SEL0 CLR SEL1 MOV DISP1,#2 MOV DISP2,#0 MOV DISP3,#0 MOV DISP4,#6 WAIT: LCALL KEY_SCAN JZ PRO_END CJNE A,#1,NO_1 MOV DISP1,#1 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_1: CJNE A,#2,NO_2 MOV DISP1,#2 MOV DISP2,#2 MOV DISP3,#2 MOV DISP4,#2 AJMP PRO_END NO_2: CJNE A,#3,NO_3 MOV DISP1,#3 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_3: CJNE A,#4,NO_4 MOV DISP1,#4 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_4: PRO_END: AJMP WAIT DISOUT1: MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A SETB SEL1 NOP CLR SEL1 RET DISOUT0:MOV A,SCAN MOV P0,A SETB SEL0 NOP CLR SEL0 RET KEY_SCAN:CLR SCAN5 SETB SCAN6 SETB SCAN7 ; CLR SCAN6 ; CLR SCAN7 LCALL DISOUT0 MOV A,P2 ANL A,#00001111B CJNE A,#0FH,MAY_KEY AJMP NO_KEY MAY_KEY:LCALL DELAY10ms MOV A,P2 ANL A,#0FH CJNE A,#0FH,YES_KEY AJMP NO_KEY YES_KEY:CJNE A,#0EH,NO_KEY1 MOV A,#1 AJMP KEY_END NO_KEY1:CJNE A,#0DH,NO_KEY2 MOV A,#2 AJMP KEY_END NO_KEY2:CJNE A,#0BH,NO_KEY3 MOV A,#3 AJMP KEY_END NO_KEY3:MOV A,#4 AJMP KEY_END NO_KEY:MOV A,#0 AJMP KEY_END KEY_END:RET DELAY10ms:MOV R6,#250 DEL:MOV R7,#10 DJNZ R7,$ DJNZ R6,DEL RET DISPLAY:MOV TH1,#0ECH MOV TL1,#78H PUSH ACC PUSH PSW INC COUNT MOV A,COUNT CJNE A,#1,NO_DIS1 CLR SCAN1 SETB SCAN2 SETB SCAN3 SETB SCAN4 LCALL DISOUT0 MOV A,DISP1 LCALL DISOUT1 AJMP T1_END NO_DIS1:CJNE A,#2,NO_DIS2 SETB SCAN1 CLR SCAN2 SETB SCAN3 SETB SCAN4 LCALL DISOUT0 MOV A,DISP2 LCALL DISOUT1 AJMP T1_END NO_DIS2:CJNE A,#3,NO_DIS3 SETB SCAN2 CLR SCAN3 SETB SCAN2 SETB SCAN4 LCALL DISOUT0 MOV A,DISP3 LCALL DISOUT1 AJMP T1_END NO_DIS3:MOV COUNT,#0 SETB SCAN1 SETB SCAN2 SETB SCAN3 CLR SCAN4 LCALL DISOUT0 MOV A,DISP4 LCALL DISOUT1 T1_END: POP PSW POP ACC RETI TAB:DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H END ;扫描更多的按键 SEL0 EQU P3.5 SEL1 EQU P3.7 DISP1 EQU 30H DISP2 EQU 31H DISP3 EQU 32H DISP4 EQU 33H COUNT EQU 34H SCAN EQU 20H SCAN1 EQU 20H.0 SCAN2 EQU 20H.1 SCAN3 EQU 20H.2 SCAN4 EQU 20H.3 SCAN5 EQU 20H.4 SCAN6 EQU 20H.5 SCAN7 EQU 20H.6 ORG 0000H LJMP MAIN ORG 001BH AJMP DISPLAY MAIN:MOV TMOD,#00010000B MOV TH1,#0ECH MOV TL1,#78H SETB ET1 SETB PT1 SETB EA SETB TR1 MOV COUNT,#0 CLR SEL0 CLR SEL1 MOV DISP1,#2 MOV DISP2,#0 MOV DISP3,#0 MOV DISP4,#6 WAIT: LCALL KEY_SCAN JZ WAIT CJNE A,#1,NO_1 MOV DISP1,#1 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_1: CJNE A,#2,NO_2 MOV DISP1,#2 MOV DISP2,#2 MOV DISP3,#2 MOV DISP4,#2 AJMP PRO_END NO_2: CJNE A,#3,NO_3 MOV DISP1,#3 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_3: CJNE A,#4,NO_4 MOV DISP1,#4 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_4: CJNE A,#5,NO_5 MOV DISP1,#5 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_5: CJNE A,#6,NO_6 MOV DISP1,#6 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#3 AJMP PRO_END NO_6: CJNE A,#7,NO_7 MOV DISP1,#7 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_7: CJNE A,#8,NO_8 MOV DISP1,#8 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_8: CJNE A,#9,NO_9 MOV DISP1,#9 MOV DISP2,#1 MOV DISP3,#1 MOV DISP4,#1 AJMP PRO_END NO_9: CJNE A,#10,NO_10 MOV DISP1,#10 MOV DISP2,#2 MOV DISP3,#2 MOV DISP4,#2 AJMP PRO_END NO_10: CJNE A,#11,NO_11
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服