1、 DJNZ R2,A2 MOV R0,#030H ;断点,观察并记录!A3: MOVX A,DPTR MOVX R0,A DJNZ R2,A3DO: LJMP DO END ;内部存储器数据块赋值,搬运数据块到外部存储器,再搬运回内部数据存储器。五、附加题1. 将光标移到想要暂停的地方,MOV R0,#20H所在行,选择 “执行到光标处”功能,程序快速执行到光标所在行。观察运行情况,并记录下表。R0R2A20H21H22H23H24H25H0x2f0x000x0f00H01H02H03H04H05H26H27H28H29H2AH2BH2CH2DH2EH06H07H08H09H0AH0BH0CH
2、0DH0EH2. 在MOV R0,#0A0H行设置断点,全速执行,暂停后观察并记录以下单元内容DPL7000H7001H7002H7003H7004H7005H7006H0X2F0FH7007H7008H7009H700AH700BH700CH700DH700EH 3.画出程序流程图 N Y Y4.修改程序,实现新功能 实现倒序数据转移程序 AJMP MAIN MOV R0,#40H DEC R0 MOV R0,#30H MOV R0,#030H END 实验二 程序设计一、实验目的1、掌握MCS-51单片机指令系统及用汇编语言编程技巧;2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方
3、法。二、实验内容及步骤(完成分值:30分/单个程序)题目1、编写排序程序并上机调试通过。已知8031内部RAM60H69H单元中,依次存放了0FH,09H,07H,0CH,03H,0DH,08H,0BH,04H,01H共10个字节无符号数,编程将它们规律排序,最大数放在60H中,最小数放在69H中。结果应该是0FH,0DH,0CH,0BH,09H,08H,07H,04H,03H,01H。 题目2、编写多字节加法程序并上机调试通过。8031内部RAM22H、21H、20H单元中,分别存放了3字节无符号被加数0FFH、0FFH、0FFH(低字节在低地址),在32H、31H、30H单元中分别存放3字
4、节无符号加数22H、22H、22H(低字节在低地址),求两数之和,并将结果存入内部RAM23H 、22H 、21H 、20H单元中(低字节在低地址)。结果应该是01H、22H、22H、21H。四、参考实验程序题目1ORG 0000H LJMP mainORG 0100Hmain:.将10个随机数送入内部RAM的5059H单元 NOP;可在此处设置断点 ACALL SELSORT;调用排序子程序HERE:AJMP HERE ;可在此处设置断点,观察每次排序结果 NOP;排序子程序DAT EQU 60H ;排序数据首地址N EQU 10 ;排序个数SELSORT: MOV R0,#DAT MOV
5、R2,#N-1LOOP: MOV B,R0 MOV A,R0 MOV R3,A INC A MOV R1,A MOV A,R2 MOV R4,ALOOP1: MOV A,R1 CLR C SUBB A,B JC LOOP2 ;改为JNC即可逆序排列 MOV B,R1 MOV A,R1LOOP2: INC R1 DJNZ R4,LOOP1 MOV A,R3 XCH A,R0 XCH A,R1 DJNZ R2,LOOP RETEND题目2 MOV R0,#20H MOV R0,#0FFH MOV R0,#30H MOV R0,#22H ACALL MULTADD;调用多字节加法子程序可在此处设置断
6、点,观察结果N字节无符号数加法子程序 (R0+R1)=(R0)入口 :R0,R1,R2占用资源:ACC,B堆栈需求:2字节出口 :R0存放结果高地址MULTADD:MOV R0,#20H ;地址1 MOV R1,#30H ;地址2 MOV R2,#03H ;加法字节数NSUB:NSUB1: ADDC A,R1 MOV R0,A DJNZ R2,NSUB1 CLR A ADDC A, #00H ; 把进位位C加到高8位去 MOV R0, A1. 画出题目1的程序流程图。N2. 将题目1的排序算法进行改变,采用另一种排序算法进行排序。 ORG 0000H MAIN:.;将10个随机数送入 MOV
7、50H,R1 CJNE A,50H,BIG ;做减法。BIG: JNC LESS ;是0则跳转 LJMP LOOP3LESS: XCH A,R1 ;交换60与61中的内容LOOP3: CJNE R1,#6AH,LOOP2 ; MOV 51H,R0 MOV R1,51H INC R1 CJNE R0,#69H,LOOP2 ;以此类推,直到剩最后两个数比较完。 SJMP $ END3. 画出题目2的程序流程图。4. 改为编写多字节减法程序。 实验三 定时/计数器实验1、掌握MCS-51单片机内部定时/计数器的功能与特点,工作方式选择和编程方法,中断功能的使用和中断服务程序的设计;2、 了解和熟悉M
8、CS-51单片机实验板的功能。60分/单个程序)本实验需要用到单片机最小应用系统(F1区)和十六位逻辑电平显示模块(I4区)。用P1口做输出口,接十六位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。三、参考流程图、电路图、参考程序 程序:Tick equ 5000 ;100us记数次数,5000 x 100us = ,十六进制#1388H T100us equ 156 ; 100us时间常数(12MHz) C100us equ 5h ; 100us记数单元,05H、06H org 0000H ljmp Start org 000BH LJMP T0Int- ORG 0100HStar
9、t: mov TMOD, #02h ; 方式2, 定时器 mov TH0, #T100us ; mov TL0, #T100us ; mov IE, #b ; EA=1, IT0 = 1 setb TR0 ; 开始定时 mov p1,#0FEH ;由于电路原因,输出高电平为灭灯。 mov C100us, #HIGH(Tick);05H-#13H,初始化100us记数单元 mov C100us+1, #LOW(Tick);06H-#88H,初始化100us记数单元Loop: ljmp Loop ORG 0300HT0Int: push PSW mov a, C100us+1; 100us高位记数
10、单元06H jnz Goon dec C100us; 100us低位记数单元05HGoon: dec C100us+1 mov a, C100us; orl a, C100us+1 jnz Exit ; 100us 记数单元不为0, 返回-#13H,100us 记数单元为0则初始化100us记数单元-#88H,100us 记数单元为0则初始化100us记数单元 MOV A,P1 ; 100us 记数单元为0, 位移! RL A MOV P1,AExit: pop PSW reti End1. 修改程序,实现新功能 奇数偶数交换点亮Tick equ 5000 T100us equ 156 C10
11、0us equ 5h mov TMOD, #02h mov TH0, #T100us mov TL0, #T100us mov IE, #b setb TR0 mov p1,#0AAH mov C100us mov C100us+1 mov a, C100us+1 dec C100us mov a, C100us jnz Exit mov C100us, #HIGH(Tick) mov C100us+1, #LOW(Tick) MOV A,P1 2. 用MCS-51单片机的内部定时器定时中断,编写一段电子秒表程序,在静态数码管上实现显示。TCNTA EQU 30H ;TCNTB EQU 31H
12、 SEC EQU 32H KEYCNT EQU 33H SP1 BIT ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV KEYCNT,#00H MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOV P2,A MOV TMOD,#02H ; SETB ET0 SETB EA WT: JB SP1,WT LCALL DELY10MS INC KEYCNT MOV A,KEYCNT CJNE A,#01H,KN1 SETB
13、 TR0 MOV TH0,#06H MOV TL0,#06H MOV TCNTA,#00H MOV TCNTB,#00H LJMP DKN KN1: CJNE A,#02H,KN2 CLR TR0 KN2: CJNE A,#03H DIV AB MOV DPTR,#TABLE MOV KEYCNT,#00H DKN: JNB SP1,$ LJMP WT DELY10MS: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET INT_T0: INC TCNTA MOV A,TCNTA CJNE A,#100,NEXT INC TCNTB MOV
14、 A,TCNTB CJNE A,#4,NEXT INC SEC CJNE A,#100,DONE DONE: MOV DPTR,#TABLE MOVC A,A+DPTR NEXT: RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 实验四 动态显示实验1、掌握七段LED数码管显示器工作原理,以及用动态扫描方法编程实现8位LED数码管显示的方法;2、 进一步了解和熟悉MCS-51单片机实验板的功能。本实验需要用到单片机最小应用系统(F1区)和动态扫描显示模块(I2区)。1. 用8P排线将单片机最小应用系统(F1区)的P2口和动态
15、扫描显示的位选JD1I相连, 用8P排线将单片机最小应用系统(F1区)的P0口和动态扫描显示模块的段码JD0I相连。2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加源程序,进行编译,直到编译无误。4.全速运行程序,直至显示效果为稳定的“123456”。四、参考流程图、电路图、实验程序电路接线图程序: AJMP MAINORG 0080H MOV P2,#0FFH MOV P0,#7DH ;显示6 CLR ;选中第一个数码管 LCALL DELAY ; 调用延时 MO
16、V P0,#0FFH ;关显示 SETB MOV P0,#6DH ;显示5选中第二个数码管 LCALL DELAY MOV P0,#0FFH MOV P0,#066H ;显示4选中第三个数码管 MOV P0,#4FH ;显示3选中第四个数码管 MOV P0,#5BH ;显示2选中第五个数码管 MOV P0,#06H ; 显示1选中第六个数码管选中第七个数码管 MOV P0,#21H ; 显示6选中第八个数码管 MOV P0,#7AH ; 显示7 AJMP MAIN ;重新开始DELAY: ;延时子程序 MOV R7,#20H MOV R6,#30HD2: DJNZ R6,D2 DJNZ R7,
17、D1RETDISTAB: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H五、附加题(完成分值:20分/单个附加题,附加题要求当场给指导老师检查结果,否则无效。)1. 修改程序,稳定循环显示“GOOD”、 “HELLO”、 “CSU”、 “D510”,程序如何修改MOV R1,#7FH MOV R2,#7FH MOV R3,#7FH MOV R4,#7FH MOVP2,#0FFH MOV P0,#3FH CLR LCALL DELAY MOV P0,#0FFH MOV P0,#03FH MOV P0,#7DH DJNZ R1,LOOP1 LOOP2: MOV P0,#38H MOV P0,#038H MOV P0,#79H MOV P0,#
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2