班级:12数控1 姓名:李嘉敏学号:2012984225
实验一查表实验
一、实验目的
1.掌握汇编语言编程软件的使用及调试方法
2.掌握查表指令MOVC的使用
3.熟悉整个实验流程实验步骤
二、实验内容
编写并调试一个查表程序,根据输入值不同查表得到不同值,比如求1-9的平方
三、实验设备
计算机、实验箱、keil uVision3软件、若干根连接电线、USB接线
四、实验步骤(过程)
1.将串口线与实验箱连接,将开关“kc”拨至上
2.查看仿真器的串口号
3.在keil中创建新项目
4.新建文件,添加源程序并保存
5.添加源代码文件到项目Source Group1中并设置好仿真驱动
6.编译检查
7.接好USB线以及其他接线,打开电源开关
8.按下“debug”进行调试
9.观看实验想象并记录数据
五、实验数据及结果(或者现象)
程序所得的结果是随着dptr的值的变化而r7的值也随之呈平方变化。
六、实验源程序
org 0000h
ljmp main
org 0030h
main: mov a, r7
mov dptr, #tab
mov a, @a+dptr
mov r7, a
tab: DB 00,01,04,09,16
DB 25,36,49,64,81
七、问题分析
1.问题:程序编译检查有错误执行不了。
解决方案:回头检查是源程序中
出现逻辑错误。
2.问题:实验箱的指示灯没有亮。
解决方案:检查各线路是否连接好。
八、思考题:
MOVC指令有几种格式?并写出来
答:两种。
分别是movc a,@a+dptr和movc a,@a+pc
实验二数据传送实验
一、实验目的
1.掌握MCS51单片机数据传送指令;
2.掌握MCS51单片机内部和外部数据存储空间的编程和调试方法
二、实验内容
编程实现单片机不同存储空间的数据传输
三、实验设备
keil uVision3软件、计算机
四、实验步骤(过程)
1.查看仿真器的串口号
2.在keil中创建新项目
3.新建文件,添加源程序并保存
4.添加源代码文件到项目Source Group1中并设置好仿真驱动
5.编译检查
6.按下“debug”进行调试
7.观看实验想象并记录数据
五、实验数据及结果(或者现象)
外部RAM的20h后八个地址存放的数据分别为0,3,8,9,57,43,63,
19
六、实验源程序
org 0000h
ljmp main
org 0030h
main: mov dptr,#tab
mov r0,#20h
mov r7,#8
loop2:clr a
movc a,@a+dptr
mov @r0,a
inc r0
inc dptr
djnz r7,loop2
mov r0,#20h
mov r7,#8
mov dptr,#0100h
loop1: mov a,@r0
movx @dptr,a
inc r0
inc dptr
djnz r7,loop1
here: ajmp here
tab:db 00,3,08,9,87,67,99,25
end
七、问题分析
因为电脑的读显结果为16进制,所以会与源程序中的十进制数进行自行转换。
八、思考题:
单片机从物理空间来说,有几个存储空间?从使用角度来讲,有几个空间?分别使用什么指令?
答:从物理空间来说,有四个存储空间,有256个RAN单元,使用数据传送指令、算数运算指令、逻辑运算指令;从使用角度来说,有三个空间,有128个RAN单元,使用移位类指令、控制转移类指令、位操作类指令。
实验三求极值实验
一、实验目的
1.掌握MCS51单片机跳转指令的使用
2. 掌握MCS51单片机循环程序的结构
二、实验内容
编程实现从N个数据里面找出最大值或者最小值
三、实验设备
keil uVision3软件、计算机
四、实验步骤(过程)
1.查看仿真器的串口号
2.在keil中创建新项目
3.新建文件,添加源程序并保存
4.添加源代码文件到项目Source Group1中并设置好仿真驱动
5.编译检查
6.按下“debug”进行调试
7.观看实验想象并记录数据
五、实验数据及结果(或者现象)
程序执行完后2bh地址存放的数据为tab中数据的最大数63 六、实验源程序
org 0000h
ljmp main
org 0030h
main: mov dptr,#tab
mov r0,#20h
mov r7,#8
loop2:clr a
movc a,@a+dptr
mov @r0,a
inc r0
inc dptr
djnz r7,loop2
mov r0,#20H
mov r7,#08H
mov a,@r0
dec r7
loop:inc r0
mov 2ah,@r0
cjne a,2h,chk
chk: jnc loop1
mov a,@r0
loop1:djnz r7,loop
mov 2bh,a
here: ajmp here
tab:db 00,3,08,9,87,67,99,25
end
七、问题分析
答:程序编译检查没有错误但执行不了,再次检查是否源程序出现逻辑错误
八、思考题:
利用DJNZ R1,LOOP指令实现循环,R1取几时循环次数最多?最多循环多少次?
答:255次;254次
实验四定时器实验
一、实验目的
掌握单片机内部定时器的应用
二、实验内容
编程实现每隔一段时间让A自动加1
或者编程实现输出方波
三、实验设备
keil uVision3软件、计算机
四、实验步骤(过程)
1.查看仿真器的串口号
2.在keil中创建新项目
3.新建文件,添加源程序并保存
4.添加源代码文件到项目Source Group1中并设置好仿真驱动
5.编译检查
6.按下“debug”进行调试
7.观看实验想象并记录数据
五、实验数据及结果(或者现象)
每个相应的设置时间,累加器便执行加1命令,数据随时间增加而逐渐增大六、实验源程序
org 0000h
ljmp main
org 0030h
main: mov tmod,#00h
mov th0,#0fch
mov tl0,#03h
setb tr1
loop:jbc tf1,loop1
ljmp loop
loop1:mov th0,#0fch
mov tl0,#03h
cpl p1.0
ljmp loop
end
七、问题分析
答:调试程序没有出现变化时要注意源程序的本身是否涉及外部RAN,若涉及则该程序不能执行。
八、思考题:
51单片机内部有几个定时器?定时器有几种工作方式?方式1最大定时时间?方式2最大定时时间?方式1和方式2有什么区别?
答:2个定时器。
4中工作方式。
方式1最大定时时间是131ms,方式2最大定时时间是255ms。
区别是方式1需要反复设置计数初值,而方式2具有重新加载计数初值的功能。