Mcs51系列单片机实训指导书
软件实验
实验一
数据传送(RAM–>XRAM)
一、实验目的
熟悉星研集成环境软件或熟悉Keil C51集成环境软件的使用方法。 熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。
二、实验内容
1、熟悉星研集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。 2、编写程序,实现内外部数据段的传送、校验。
三、程序框图
开始 堆栈指针初始化计数器、地址初始化内部RAM数据传送外部RAM一次地址指针+1 计数器-1=0?Y计数器、地址指针复位传送错误结束数据传送程序框图N取内部RAM和对应的外部RAMN比较是否相等Y地址指针+1 计数器-1=0?Y传送正确N
四、实验步骤
在内部RAM 30H ~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM的1000H ~100FH中的内容。熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
五、程序清单 ;将内部RAM Address1 开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。 Address1 DATA 30H Address2 XDATA 1000H ORG 0000H LJMP STAR ORG 0100H STAR: MOV SP,#60H MOV R0,#Address1
1
Mcs51系列单片机实训指导书
MOV DPTR,#Address2 MOV R7,#10H STAR1: MOV A,@R0 ;传送 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,STAR1 MOV R0,#Address1 MOV DPTR,#Address2 MOV R7,#10H STAR2: MOV B,@R0 ;比较 MOVX A,@DPTR CJNE A,B,STAR3 INC R0 INC DPTR DJNZ R7,STAR2 SJMP $ ;传送正确 STAR3: SJMP $ ;传送错误 END
如果读者使用星研集成环境软件,请考虑以下问题:
1、运行程序前,打开变量窗、二个存贮器窗(一个选择片内数据;一个选择片外数据,起始地址选择1000H),每个存贮器窗有四个标签,有何好处?;
2、使用单步进入命令,运行到第十四行后,运行过程中变量窗有何变化?将鼠标停留在A、SP、@R0、@DPTR上一秒后,出现什么?,它与变量窗使用场合的区别?
3、将光标移到第十四行上,使用运行到光标处命令,观察运行结果,体会它与单步进入命令的不同处。
4、在二十行上,设置一个断点,使用全速断点命令运行几次,观察运行结果,它与运行到光标处命令有何区别?
5、使用全速运行命令,稍后,点击工具条上停止运行命令按钮,当前执行箭头停在哪一行?运行结果是否正确?它与全速断点运行命令有何区别? 6、观察寄存器,有哪几种方法?
1)在工作区窗的通用寄存器标签视中; 2)变量窗
3)鼠标停留在寄存器上
4)观察窗 5)寄存器窗
7、查看CPU内部数据RAM、CPU片外数据RAM: 1)存贮器窗 2)变量窗
3)鼠标停留在CPU内部数据RAM、CPU片外数据RAM的地址、@R0、@DPTR上 六、思考题
编写一个程序,将外部数据RAM中的数据传送到内部数据RAM中。
2
Mcs51系列单片机实训指导书
实验二 双字节BCD码(十进制数)加法
一、实验目的
熟悉51汇编指令,学会使用星研集成环境软件,能自己编写简单的程序,熟悉BCD码,了解如何调用系统提供的子程序。
二、实验内容
从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上;熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
三、实验框图
开始初始化堆栈设定\键输入\通过键盘获得4位被加数(压缩BCD码)置位\后才清除LED\通过键盘获得4位加数(压缩BCD码)被加数与加数的低位字节不带进位加法十进制调整被加数与加数的高位字节带进位加法十进制调整压缩BCD码(结果)转换为非压缩BCD码高位0消隐显示结果双字节BCD加法程序框图
四、实验步骤
1、连线说明: D3区 :CLK D3区 :CS D3区 :A0 —— —— —— B2区:2M A3区:CS5 A3区:A0 2、在F4区的键盘上输入4位被加数、加数 3、结果显示在F4区的数码管上
3
Mcs51系列单片机实训指导书
五、程序清单 EXTRN
Buffer F1
START:
START1:
Display:
CODE(Display8, GetBCDKey) DATA 30H BIT 0D1H ORG 0000H LJMP START ORG 0100H MOV SP,#60H CLR F1 MOV R0,#buffer MOV A,#4 LCALL GetBCDKey SETB F1 MOV R0,#buffer+4 MOV A,#4 LCALL GetBCDKey MOV A,buffer+1 ADD A,buffer+5 DA A MOV buffer+5,A MOV A,buffer ADDC A,buffer+4 DA A MOV buffer+4,A CLR A RLC A PUSH ACC MOV R0,#buffer MOV A,buffer+5 ACALL B1toB2 MOV A,buffer+4 ACALL B1toB2 POP ACC ACALL B1toB2 MOV @R0,#10H INC R0 MOV @R0,#10H MOV R0,#buffer+5 MOV R7,#5 ACALL BlackDisplay MOV R0,#buffer
4
;8字节显示缓冲区 ;PSW.1
;先清除显示,再接收键输入
;按键次数
;得到双字节十进制数(被加数) ;接收到第一个键,才清除显示
;按键次数
;得到双字节十进制数(加数)
;显示结果
;低位
;压缩BCD码转换成非压缩BCD码;高位
;进位
;最高二位消隐
;将高位0消隐
Mcs51系列单片机实训指导书
LCALL Display8 SJMP START1 ;将一个字节压缩BCD码转换成二个字节非压缩BCD码 B1toB2: BlackDisplay: Exit: PUSH ACC ANL A,#0FH MOV @R0,A INC R0 POP ACC ANL A,#0F0H SWAP A MOV @R0,A INC R0 RET MOV A,@R0 JNZ Exit MOV A,#10H MOV @R0,A DEC R0 DJNZ R7,BlackDisplay RET END
5
;将高位0消隐