单片机实验验指导书有程序.docx
- 文档编号:7268441
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:26
- 大小:669.09KB
单片机实验验指导书有程序.docx
《单片机实验验指导书有程序.docx》由会员分享,可在线阅读,更多相关《单片机实验验指导书有程序.docx(26页珍藏版)》请在冰豆网上搜索。
单片机实验验指导书有程序
单片机实验指导书
三明学院
2011年09月01日
实验一简单程序调试实验
一、实验目的
1、熟悉KeiluVision3集成仿真环境
2、掌握以下内容:
1)建立工程
2)建立源程序并添加源程序到工程
3)编译源程序及工程
4)调试并观察运行结果
①观察汇编代码;
②观察并修改寄存器值;
③观察并修改内部存储单元内容
二、实验内容
实验程序如下:
汇编指令行号
ORG0000H
DSP0EQU30H
DSP1EQU31H
AT1:
MOVR0,#DSP1;1
MOV32H,A;2
ANLA,#0FH;3
MOV@R0,A;4
DECR0;5
MOVA,32H;6
ANLA,#0FH;7
SWAPA;8
MOV@R0,A;9
SJMP$;10
END
二、实验步骤
说明:
以下[]内加粗内容均为系统菜单名称、列表名称、窗口名称或按钮名称
㈠进入KeiluVision3集成仿真环境
从程序组或桌面找到KeiluVision3图标,点击图标启动仿真软件,即可进入Keil
uVision2仿真环境。
㈡建立工程文件
⒈点击菜单[Project]→[NewProject]
⒉出现[CreatNewProject]对话框,在文件名栏中输入一个工程文件名(用英文缩写),选择一个可以保存的文件夹,点击[保存]按钮。
⒊出现选择器件类型对话框,在对话框左列表中选择处理器型号[Atmel]→[AT89C51],点[确定]按钮。
⒋出现是否添加标准8051启动代码的对话框,点击[否],进入KeiluVision2工程界面。
㈢建立汇编源文件:
⒈点击菜单[File]→[New],出现一个名为[Text1]的空白文本文件,点击菜单[File]→[Save]保存文本文件,出现[Save]对话框。
⒉在文件名栏中输入一个有意义的文件名,用英文缩写并且不能和工程文件名同名(如TEST1),
后缀必须为“.asm”,点击[保存]按钮。
⒊点开左侧[ProjectWorkspace]列表窗中的[Target1]文件夹,出现[SourceGroup1]
文件夹。
鼠标右键点击[SourceGroup1]文件夹,在弹出的菜单中点击[AddFilesto
Group‘SourceGroup1’]出现添加文件对话框(图)。
⒋在对话框文件类型中选择[AsmSourcefile(*.s*;*.src;*.a*)],选择刚才保存的asm
源文件,点击[Add]完成添加,然后点击[close]关闭界面。
⒌输入以下源程序(注意标点符号应该是英文半角符号,并注意区分数字0和字母O),并保存。
㈣编译并装入
⒈点击菜单[Project]→[Translate...],编译当前源程序。
如发生错误,根据红色提示带和编辑窗口下的输出出错信息提示进行修改,再编译,直至无错误为止。
⒉点击菜单[Project]→[Buildtarget],编译工程。
㈤调试并观察运行结果
⒈点击菜单[Debug]→[Start/StopDebugSession]开始调试程序。
⒉进入调试状态后,系统自动打开反汇编窗口,如果看不到,可由[View]→[DisassemblyWindow]打开,观察源程序1—10条的汇编代码,填入表1-1内
⒊由左侧寄存器窗口,双击累加器A旁的值至蓝色可编辑状态,将累加器A的值由00H修改为25H
⒋观察并修改内部RAM内容(将内部RAM30H单元的值修改为12H)
①由[View]→[MemoryWindow],打开内存窗口
②在[Address]栏输入D:
30H并按回车,表示从内部RAM的30H开始显示调试值(从左到右地址依次递增)。
③鼠标右键点击内存窗口的30H位置,在弹出菜单中选择[ModifyMemoryatD:
0x30]。
④在弹出对话框中输入值12H(图1-16),并点击[OK],表示修改内部RAM30H内的值为12H。
图1-16
-
⒌重复步骤4,将31H单元的值修改为34H。
⒍单步运行
①按[Debug]→[Step](F11),每按一次、PC下移一次。
②观察左侧寄存器列表中R0、A的值,以及内存30H、31H、32H单元内容在PC移过后的变化情况,填入表1-1内。
⒎如没看清楚,可由[Peripherals]→[RestCPU],重复步骤1-6
四、实验报告
1、写出KeiluVision3集成仿真使用时的主要步骤。
2、写出程序清单,并根据实验结果填写下表:
R0A30H31H32H
0X310X2512H34H00H
0X310X2512H34H25H
0X310X0512H34H25H
0X310X0512H05H25H
0X300X0512H05H25H
0X300X2512H05H25H
0X300X0512H05H25H
0X300X5012H05H25H
0X300X5050H05H25H
0X310X5050H05H25H
实验二数据传送实验
一、实验目的
掌握单片机内部RAM和外部RAM的数据操作,掌握这两部分RAM存储器的特点与应用。
二、实验内容
编写并调试一个数据传送程序,将内部RAM40H~4FH的16个数据送到
外部RAM0000H~000FH单元。
并调试检查写入的内容是否正确。
三、实验步骤
1、 启动KeiluVision3集成仿真仿真软件。
2、 编写并输入实验源程序,名为TEST2A.ASM。
3、 汇编源程序,直至无错误为止。
4、 装入数据,单步执行或断点执行程序,检查结果是否正确。
在程序运行之前,将01H,02H,03H……,0FH,16个数据写入内部RAM40H~4FH的16个单元,然后执行程序,检查外部RAM0000H~000FH16个单元内容是否与内部RAM40H~4FH单元的数据一一对应。
四、编程指示
Y
N
五、实验报告
1、写出程序清单。
2、试编写数据块清零程序。
3、编写将外部RAM0000H~000FH单元的数据传送到内部RAM40H~4FH单元的程序。
ORG0000H
MAIM:
MOVR0,#40H
MOVDPTR,#0000H
MOVR7,#16
AT0:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR7,AT0
END
实验三I/O接口实验
一、实验目的:
掌握MCS-51单片机的P1口作为并行输入、P3口作为并行输出方式使用时的电路设计及软件编程方法。
二、实验内容:
1、编写P1口输出实验程序,使发光二极管在程序的控制下自动按照设定的规律亮灭。
2、编写P3口输入实验程序,通过接收开关设置的参数来控制发光管的亮灭。
三、实验电路(单片机实验板参考原理图)
四、实验步骤
1、输出实验
(1)认真阅读单片机实验板参考原理图,掌握P1.0~P1.7和LED3~LED10的连接关系。
(2)在KeiluVision3集成仿真软件中编制程序,首先使所有的发光二极管全部熄灭,之后从LED3开始,LED3~LED6四个发光二极管轮流发光1秒,然后四个二极管全部发光1秒,最后全灭1秒,完成一个过程后又重新开始,周而复始。
(3)在KeiluVision3集成仿真软件中用单步、断点、连续方式调试程序,直至正确。
(4)将生成的*.hex目标文件通过ISP下载线烧写到单片机内部,观察LED3~LED6四个发光二极管的状态,验证运行结果是否正确,直至达到实验的要求为止。
2、输入实验
(1)认真阅读单片机实验板参考原理图,掌握开关K1~K4和P3.2~P3.5的连接关系。
(2)在KeiluVision3集成仿真软件中编制程序,将P1.0设置为输出口,P3.2设置为输出口,按一次开关K1,LED3熄灭,再次按开关K1,LED3亮,如此循环,LED3亮灭交替。
(3)在KeiluVision3集成仿真软件中用单步、断点、连续方式调试程序,直至正确。
(4)将生成的*.hex目标文件通过ISP下载线烧写到单片机内部,反复按下K1,观察LED3的状态,验证运行结果是否正确,直至达到实验的要求为止。
五、编程提示
1、延时子程序的延时计算问题
对于程序DELAY
DELAY:
MOVR5,#10
LOOP:
MOVR6,#200
LOOP1:
MOVR7,#250
LOOP2:
DJNZR7,LOOP2
DJNZR6,LOOP1
DJNZR5,LOOP
RET
查指令表可知DJNZ指令需用两个机器周期,在12MHZ晶振时,一个机器周期时间长度为1s,所以该段程序执行时间为:
(((250×2+3)×200)+3)×10+3≈1s
六、实验报告
1、写出程序清单(要写出必要的注释)
3、思考:
程序没有进行按键消抖动处理,控制结果会因为按键抖动而出错,按压K1十次,大概有3~5次输出会因为按键抖动而发生错误,实验时请多按几次,观察一下效果,加深对按键消抖动重要性的认识。
1、输出实验
例1:
ORG0000H
AJMPSTART;跳转到初始化程序
ORG0033H
;-----主程序开始-----
START:
MOVP1,#0FFH;是所有LED熄灭
ACALLDELAY;调用延时子程序
CLRP1.0;P1.0输出低电平,使LED3点亮
ACALLDELAY;调用延时子程序
SETBP1.0;P1.0输出高电平,使LED3熄灭
CLRP1.1;P1.1输出低电平,使LED4点亮
ACALLDELAY;调用延时子程序
SETBP1.1;P1.1输出高电平,使LED4熄灭
CLRP1.2;P1.2输出低电平,使LED5点亮
ACALLDELAY;调用延时子程序
SETBP1.2;P1.2输出高电平,使LED5熄灭
CLRP1.3;P1.3输出低电平,使LED6点亮
ACALLDELAY;调用延时子程序
MOVP1,#0F0H;LED3~LED6全部发光
ACALLDELAY;调用延时子程序
AJMPSTART;返回到标号START处再循环
;-----延时子程序-----
DELAY:
MOVR5,#10
LOOP:
MOVR6,#200
LOOP1:
MOVR7,#250
LOOP2:
DJNZR7,LOOP2
DJNZR6,LOOP1
DJNZR5,LOOP
RET
例2:
ORG0000H
AJMPSTART;跳转到初始化程序
ORG0033H
;-----主程序开始-----
START:
MOVP1,#0FFH;是所有LED熄灭
ACALLDELAY;调用延时子程序
MOVACC,#0FEH;ACC中先装入LED3亮的数据(二进制的11111110)
MOVP1,ACC;将ACC的数据送P1口
ACALLDELAY;调用延时子程序
MOVR0,#03H;上句送到P1口的数据就点亮了LED1,所以将数据再移
动3次就完成一个4位流水过程
LOOP3:
RLA;将ACC中的数据左移一位
MOVP1,A;把ACC移动过的数据送p1口显示
ACALLDELAY;调用延时子程序
DJNZR0,LOOP3;没有移动够4次继续移动
MOVP1,#0F0H;LED3~LED6全部发光
ACALLDELAY;调用延时子程序
AJMPSTART;返回到标号START处再循环
;-----延时子程序-----
DELAY:
MOVR5,#10
LOOP:
MOVR6,#200
LOOP1:
MOVR7,#250
LOOP2:
DJNZR7,LOOP2
DJNZR6,LOOP1
DJNZR5,LOOP
RET
2、输入实验
例1:
;****************************************************************
;*K1控制LED3亮灭交替*
;****************************************************************
org0
star:
movp1,#0h
movp3,#0ffh
st1:
jbp3.2,$
jnbp3.2,$
cplp1.0
sjmpst1
end
例2:
;******************************************************************************
;*按压实验板上的按钮K1,控制P1.0的LED亮灭*
;*按压K1,LED点亮,再次按压K1,LED熄灭*
;*程序没有进行按键消抖动处理,控制结果会因为按键抖动而出错*
;*按压K1十次,大概有3~5次输出会因为按键抖动而发生错误*
;*实验时请多按几次,观察一下效果,加深对按键消抖动重要性的认识*
;******************************************************************************
ORG0000H
AJMPSTART;跳转到初始化程序
ORG0033H
START:
MOVSP,#60H;SP初始化
MOVP3,#0FFH;端口初始化
MAIN:
JBP3.2,MAIN;检测按键K1有没有按下
CPLP1.0;执行按键命令,改变P1.0指示灯状态
JNBP3.2,$;等待按键K1释放
AJMPMAIN;返回重新检测按键
END
例3:
;******************************************************************************
;*按压实验板上的按钮K1,控制P1.0的LED亮灭*
;*按压K1,LED点亮,再次按压K1,LED熄灭*
;*程序进行了按键消抖动处理,不会出现控制结果出错的现象*
;*由此可以看出按键软件消抖动的功效*
;******************************************************************************
ORG0000H
AJMPSTART;跳转到初始化程序
ORG0033H
START:
MOVSP,#60H;SP初始化
MOVP3,#0FFH;端口初始化
MAIN:
JBP3.2,MAIN;检测按键P3.2有没有按下
ACALLYS20ms;消前沿抖动延时,实现软件去抖动
JBP3.2,MAIN;再次检测按键,如果为高电平,则是抖动
CPLP1.0;执行按键命令,改变P1.0指示灯状态
JNBP3.2,$;等待按键释放
AJMPMAIN;返回重新检测按键
YS20ms:
MOVR7,#40;延时20ms子程序
YS1:
MOVR6,#229
DJNZR6,$
DJNZR7,YS1
RET
实验四外部中断实验
一、实验目的:
1、掌握外部中断技术的基本使用方法。
2、掌握中断处理程序的编程方法。
3、加深理解外部中断优先级的概念。
二、实验内容:
编制程序使INT0、INT1为边沿触发方式,INT1为高级中断。
在主程序中使8个LED轮流闪烁;外中断程序0中,8个指示灯同时闪烁8次;外中断程序1中,左右4个指示灯交替闪烁。
因为INT1为高级中断,所以INT1中断可以中断INT0中断程序,即当按压K1进入外中断0时,8个LED同时闪烁,此时按压K2可以中断TIN0的执行。
相反,当INT1中断后,按压K1则不能中断INT1的执行。
三、实验电路(见单片机实验板参考原理图)。
四、实验步骤
1、认真阅读单片机实验板参考原理图,
2、在KeiluVision3集成仿真软件中用单步、断点、连续方式调试程序一,检查程序运行结果是否正确,排除软件错误。
3、将生成的*.hex目标文件通过ISP下载线烧写到单片机内部,观察LED3~LED10四个发光二极管的状态,验证运行结果是否正确,直至达到实验的要求为止。
五、编程提示
1、外部中断INT0的入口地址为0003H;外部中断INT1的入口地址为0013H。
2、中断服务程序编程的关键是:
(1)保护进入中断的状态,并在退出中断之前恢复进入时的状态。
(2)必须在中断程序中设置是否允许中断重入,即设置EX0位。
3、一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置不允许重入。
七、实验报告
1、画出硬件接线图。
2、写出程序清单(要写出必要的注释)。
3、思考:
中断响应的条件是什么?
如何用软件实现中断请求?
例程:
;************************************************************************
;*INT0,INT1为边沿触发方式,INT1为高级中断*
;*主程序中8个LED轮流闪烁*
;*外中断程序0中,8个指示灯同时闪烁8次*
;*外中断程序1中,左右4个指示灯交替闪烁*
;*因为INT1为高级中断,所以INT1中断可以中断INT0中断程序*
;*即当按压K1进入外中断0时,8个LED同时闪烁,此时按压K2可以中断*
;*TIN0的执行。
相反,当INT1中断后,按压K1则不能中断INT1的执行*
;************************************************************************
ORG0000H
AJMPSTART
ORG0003H
JMPPGINT0
ORG0013H
JMPPGINT1
ORG0033H
START:
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MAIN:
MOVIE,#10000101B;INT0,INT1中断使能
MOVIP,#00000100B;INT1中断优先
MOVTCON,#00000000B;INT0,INT1为电平触发
MOVSP,#60H
MOVA,#0FEH
LOOP:
MOVP1,A
CALLDELAY
RLA
JMPLOOP
JMPMAIN
PGINT0:
PUSHACC
MOVR2,#8
LOOP0:
MOVP1,#00H
CALLDELAY
MOVP1,#0FFH
CALLDELAY
DJNZR2,LOOP0
POPACC
RETI
PGINT1:
PUSHACC
MOVR3,#8
LOOP1:
MOVP1,#0FH
CALLDELAY
MOVP1,#0F0H
CALLDELAY
DJNZR3,LOOP1
POPACC
RETI
;********延时子程序********
DELAY:
MOVR4,#80
D1:
MOVR5,#10
D2:
MOVR6,#228
DJNZR6,$
DJNZR5,D2
DJNZR4,D1
RET
END
实验五定时器/计数器实验
一、实验目的
1、掌握MCS-51单片机的定时器/计数器工作方式和编程方法。
2、进一步掌握MCS-51单片机中断服务程序编写方法。
二、实验内容
1、程序一:
利用单片机内部中断方式定时器0实现LED3(通过P1.0口)闪烁。
2、程序二:
利用单片机内部定时器和计数器,控制发光二极管LED10(通过P1.7口)以亮1秒,暗1秒的速度闪烁。
三、实验电路
程序一:
见单片机实验板参考原理图。
程序二:
见单片机实验板参考原理图(需要自己用导线将P1.0接T1(P3.5))。
四、实验步骤
1、认真阅读单片机实验板参考原理图。
2、在KeiluVision3集成仿真软件中用单步、断点、连续方式调试程序一,检查程序运行结果是否正确,排除软件错误。
3、将生成的*.hex目标文件通过ISP下载线烧写到单片机内部,观察LED3的状态,验证运行结果是否正确,直至达到实验的要求为止。
4、在KeiluVision3集成仿真软件中用单步、断点、连续方式调试程序二,检查程序运行结果是否正确,排除软件错误。
5、用导线将P1.0接T1(P3.5)。
6、将生成的*.hex目标文件通过ISP下载线烧写到单片机内部,观察LED3和LED10的状态,验证运行结果是否正确,直至达到实验的要求为止。
五、编程提示
1、程序1说明
定时器T0、T1的数据寄存器都是16位,定时间隔有限,因此会发现LED3闪烁的速度很快。
2、程序2说明
(1)该程序要求定时时间间隔为1秒,故应采用复合定时的方法。
即设T0为50ms定时器,每50ms使P1.0输出变化一次,则100ms后P1.0输出一个完整的计数脉冲,作为T1计数器的计数输入,所以T1每计数10次就能完成1秒的定时。
六、实验报告
1、画出硬件接线图。
2、写出程序清单(要写出必要的注释)和执行结果。
3、根据单片机定时器工作方式,如何选择好的工作方式?
在长时间定时中,如何提高定时精度?
程序一:
ORG0000H
AJMPSTART
ORG000BH;定时器0的中断向量地址
AJMPTIME0;跳转到真正的定时器程序处
ORG0030H
START:
MOVP1,#0FFH;关所有灯
MOVTMOD,#00000001B;定时/计数器0工作于方式1
MOVTH0,#15H
MOVTL0,#0A0H;即数5536
SETBEA;开总中断允许
SETBET0;开定时/计数器0允许
SETBTR0;定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)