ImageVerifierCode 换一换
格式:DOCX , 页数:54 ,大小:1.72MB ,
资源ID:5154523      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5154523.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机实验指导书版.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

单片机实验指导书版.docx

1、单片机实验指导书版实验一 8051简单编程与调试实验目的通过简单小程序的输入和调试,熟悉并掌握Keil 的使用。学会Proteus与Keil的整合调试。实验基本要求建立三个项目,分别输入存储块清零、二进制BCD码及二进制ASCII码转换的汇编源程序,并进行仿真调试。画出实验程序的流程框图。实验步骤采用Keil Cx51 开发8051单片机应用程序一般需要经过下面几个步骤:1、 在Vision2集成开发环境中创建一个新项目(Project),并为该项目选定合适的单片机CPU器件。在菜单栏中选择“Project” “New Project”,弹出“Create New Project”对话框,选择

2、目标路径,在“文件名”栏中输入项目名后,单击“保存(S)”按钮,弹出“Selecte Device for Target”对话窗口。在此对话窗口的“Data base”栏中,单击“Atmel”前面的“+”号,或者直接双击“Atmel”,在其子类中选择“AT89C51”,确定CPU类型。如图所示。点击“确定”按钮后,弹出如下的对话框如果是进行汇编语言编程选择“否”。2、 利用Vision2的文件编辑器编写C语言(或汇编语言)源程序文件,并将文件添加到项目中去。一个项目可以包含多个文件,除源程序文件外还可以有库文件或文本说明文件。在Vision2的菜单栏中选择“File”“New”命令,新建文档,

3、然后在菜单栏中选择“File” “Save”命令,保存此文档,这时会弹出“Save As”对话窗口,在“文件名(N)”一栏中,为此文本命名,注意要填写扩展名“.asm”。单击“保存(S)”按钮,这样在编写汇编代码时,Keil会自动识别汇编语言的关键字,并以不同的颜色显示,以减少输入代码时出现的语法错误。程序编写完后,再次保存。在Keil中“Project Workspace”子窗口中,单击“Target 1”前面的“+”号,展开此目录。在“Source Group 1”文件夹上单击鼠标右键,在右键菜单中选择 “Add File to Group Source 1”,弹出“Add File to

4、 Group”对话窗口,在此对话窗口的“文件类型”栏中,选择“Asm Source File”,并找到刚才编写的.asm文件,双击此文件,将其添加到Source Group中,此时“Project Workspace”子窗口如图所示。3、 通过Vision2的各种选项,配置Cx51编译器、Ax51宏汇编器、BL51/.Lx51连接定位器以及Debug调试器。在“Project Workspace”窗口中的“Target 1”文件夹上单击鼠标右键,在弹出的右键菜单中选择“Option for Target”选项,这时会弹出“Options for Target”对话窗口,在此对话窗口中选择“Ou

5、tput”选项卡,选中“Create HEX File”选项,如图所示。4、 利用Vision2的构造(Buid)功能对项目中的源程序文件进行编译连接,生成绝对代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源程序中的错误后重新构造整个项目。在Keil的菜单栏中选择“Project”“Build Target”命令,编译汇编源文件。如果编译成功,则在“Output Window”子窗口中会显示如图所示的信息;如果编译不成功,双击“Output Window”窗口中的错误信息,则会在编辑窗口中指示错误语句。5、 将没有错误的绝对代码装入Vision2调试器进行仿真调试,调试成功后

6、将HEX文件写入到单片机应用系统的EPROM中。在Keil的菜单栏中,选择“Debug”“Start/Stop Debug Session”选项,进入程序调试环境,如图所示。按“F11”键,单步运行程序。在“Project Workspace”窗口中,可以查看累加器、通用寄存器及特殊功能寄存器的变化。在“Memory”窗口中,可以看到每执行一条语句后存储空间的变化。在“Address”栏中,输入“D: 30H”,查看AT89C51的片内直接寻址空间。程序调试完毕后,再次在菜单栏中选择“Debug”“Start/Stop Debug Session”选项,退出调试环境。在Proteus中调试程序

7、打开Proteus ISIS编辑环境,在菜单栏中选择“File”“Load Design”弹出“Load ISIS Design File”对话窗口,选择要打开的Proteus的.DSN设计文件。在本实验中,设计文件为本实验子目录下的Basic.DSN单击鼠标右键选中AT89C51并单击鼠标左键,打开“Edit Component”对话窗口,在此窗口中的“Program File”栏中,选择先前用Keil生成的.HEX文件,如图所示。单击Proteus ISIS界面左下角的按钮,进入程序调试状态,并在“Debug”菜单中打开“8051 CPU Registers”、“8051 CPU Inte

8、rnal (IDATA) Memory”及“8051 CPU SFR Memory”三个观察窗口,按“F11”键,单步运行程序。在程序运行过程中,可以在这三个窗口中看到各寄存器及存储单元的动态变化。Proteus 与Keil整合调试及电路仿真在Proteus的“Debug”菜单中选择“Use Remote Debug Monitor”选项,如图所示。选择Keil的“Project”“Options for Target Target 1”,在弹出的对话框中,单击Debug选项卡,单击右上部的下三角按钮选择“Proteus VSM Monitor-51 Driver”如图所示。单击“Settin

9、g”进入对话框填写如图所示的IP地址和端口号。在Keil中,在菜单栏中选择“Debug”“Start/Stop Debug Session”选项,Keil系统进入调试状态。同时Proteus也进入调试状态。这时可以调整这两个软件窗口的大小,使它们同时出现在桌面上,这样就可以同时观察这两个软件运行的情况了。在Proteus的调试状态下,在“Debug”菜单中打开“8051 CPU Registers”、“8051 CPU Internal(IDATA) Memory”、“8051 CPU SFR Memory”三个观察窗口,在单步运行程序的过程中,可以在这三个窗口中看到各寄存器以及存储单元的动态

10、变化。实验内容1Porteus模型为BASIC.DSN如下图所示。一、 存储块置全“1”源代码:汇编语言源程序:ORG 00HSTART EQU 30H MOV R1,#START ;起始地址 MOV R7,#32 ;Rn中设置32字节计数值 MOV A,#0FFHLOOP: MOV R1,A INC R1 ;指向下一个地址 DJNZ R7,LOOP ;计数值减1,不为零继续 SJMP $ END在下划线处填入适当指令。输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。解释START EQU 30H。【答】将30H定义为START二、 二进制BCD码转换源代码

11、:汇编语言源程序:RESULT EQU 30H ORG 00H LJMP STARTSTART: MOV SP,#40H ;堆栈指针指向40H MOV A,#123 LCALL BINTOBAC SJMP $BINTOBAC: MOV B,#100 DIV AB ;除以100得百位数 MOV RESULT,A MOV A,B MOV B,#10 DIV AB ;余数除以10得十位数 MOV RESULT+1,A MOV RESULT+2,B ;余数为个位数 RET END在下划线处填入适当指令。用单步执行的方法,观察子程序调用过程中堆栈指针的变化。三、 二进制ASCII码转换源代码:汇编语言源

12、程序:RESULT EQU 30H ORG 00HSTART: MOV A,#1AH LCALL BINTOHEX ;调用BINTOHEX子程序 LJMP $BINTOHEX: MOV DPTR,#ASCIITAB ;表的首址ASCIITAB送DPTR MOV B,A ;暂存A SWAP A ANL A,#0FH ;取A的高四位 MOVC A,A+DPTR ;查ASCII表 MOV RESULT, A MOV A,B ;恢复A ANL A,#0FH ;取低四位 MOVC A,A+DPTR ;查ASCII表 MOV RESULT+1,A RETASCIITAB: DB 0123456789ABC

13、DEF ;定义数字对应的ASCII表 END在下划线处填入适当指令。单步运行程序观察查表指令的执行过程。把 LJMP $这条指令注释掉,然后全速运行该程序,然后让其停止观察程序执行到哪里? 【答】一直重复调用不停止实验内容2输入、汇编、调试下列四个程序,通过信息窗口观察并回答问题。1、 程序a.asmORG 0000H MOV 30H,#87H MOV A,#69H ADD A,30H NOP END问:CY= 0 ,(A)= F0H ,OV= 0 ,P= 0将程序中的指令NOP改为 指令DA A后问:CY= 1 ,(A)=56H ,OV= 0 ,P= 02、 程序b.asmORG 0000H

14、 MOV SP,#60H MOV DPTR,#0A679H PUSH DPH PUSH DPL MOV A,#80H PUSH ACC POP B POP 30H POP 31H NOP END问:(SP)= 60H ,(A)= 80H ,(30H)= 79H ,(31H)=A6H ,(B)=80H ,(DPH)=A6H ,(DPL)=79H 3、 程序c.asmORG 0000H MOV DPTR,#TAB MOV A,#05H MOVC A,A+DPTR NOP ORG 1000HTAB: DB 6FH,30H,96H,75H,0A8H,0FEH DB 49H,8AH,5FH,0B6H,7

15、FH,0C4H END问:执行完MOVC A,A+DPTR以后,(A)= FEH 4、 程序d.asmORG 0000H MOV A,#02H MOV B,A RL A ADD A,B MOV DPTR,#TAB JMP A+DPTR NOP ORG 0800HTAB: LJMP 1000H LJMP 2000H LJMP 3000H LJMP 4000H END问:执行完JMP A+DPTR以后,PC=0806H实验二 汇编语言程序设计(一)实验目的通过上机实验掌握单片机汇编语言程序的编写和调试。实验基本要求按实验内容上机输入并调试实验程序。画出实验程序的流程框图。实验内容Proteus模型

16、为BASIC.DSN。一、内存块移动汇编语言源程序: ORG 00HSTART: MOV R0, #30H MOV R1, #00H ;设置源地址 MOV R2, #40H MOV R3, #00H ;设置目标地址 MOV R7, #0 ;设置计数值LOOP: MOV DPH, R0 MOV DPL, R1 ;将源地址(3000H)赋DPTR MOVX A, DPTR ;取源地址中的数据 MOV DPH, R2 MOV DPL, R3 ;将目标地址(4000H)赋DPTR MOVX DPTR, A ;将源地址中的数据送到目标地址 INC R1 ;源地址加1 INC R3 ;目标地址加1 DJN

17、Z R7, LOOP LJMP $ END输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。二、程序转跳表汇编语言源程序: ORG 00HSTART: MOV A,#0 ;设置地址偏移量 CALL FUNCENTER MOV A,#1 ;设置地址偏移量 CALL FUNCENTER MOV A,#2 ;设置地址偏移量 CALL FUNCENTER MOV A,#3 ;设置地址偏移量 CALL FUNCENTER LJMP $FUNCENTER: ADD A,ACC ;AJMP为二字节指令,地址偏移量*2 MOV DPTR,#FUNCTAB ;设置基址 JMP

18、A+DPTR ;跳转到目标地址FUNCTAB: AJMP FUNC0 AJMP FUNC1 AJMP FUNC2 AJMP FUNC3FUNC0: MOV 30H,#0 RETFUNC1: MOV 31H,#1 RETFUNC2: MOV 32H,#2 RETFUNC3: MOV 33H,#3 RET END输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。三、数据排序汇编语言源程序: ORG 00H SIZE EQU 10 ;数据个数 ARRAY EQU 50H ;数据起始地址 FLAG BIT 00H ;交换标志SORT: MOV R0,#ARRAY ;首

19、地址输入到R0 MOV R7,#SIZE-1 ;数据个数减一输入到R7 CLR FLAG ;交换标志置零COON: MOV A,R0 ;将首地址中的内容读到A MOV R2,A ;将数据写入到R2中 INC R0 ;首地址加一 MOV B,R0 ;将首地址中的内容读到B CJNE A,B,NOTEQUAL ;不相等则跳转 SJMP NEXTNOTEQUAL: JC NEXT ;前小后大,不交换 SETB FLAG ;前大后小,置交换标志 XCH A,R0 ;交换 DEC R0 ;R0减1 XCH A,R0 INC R0NEXT: DJNZ R7,COON ;R7不等于0时转到GOON(即没有交

20、换完) JB FLAG,SORT ;FLAG=1时转到SORT使FLAG清零 SJMP $ END把数据按从小到大排序四、调试程序S1.asm程序:S1.asmORG 0000H MOV R0,#30H MOV R7,#20H MOV DPTR,#1000HLOOP1: CLR A MOVC A,A+DPTR MOV R0,A INC R0 INC DPTR DJNZ R7,LOOP1 NOP NOP LJMP $ ORG 1000HDB 23H,45H,0A5H,7FH,8DH,0CDH,33H,0BFHDB 0FH,66H,9AH,8CH,33H,69H,50H,2DHDB 6DH,45H

21、,0FEH,90H,0ABH,3CH,67H,88HDB 0EDH,0FFH,00H,21H,63H,9DH,77H,45H END思考题:1、在这个程序中的32个数据原来在哪里?这个程序完成了什么操作?【答】在片内程序存储区;把程序存储区的32个数据传送到内部30H数据区2、如果把MOVC A,A+DPTR改成MOVX A,A+DPTR会发生什么情况?【答】把数据区相应寻址地址里存的数据传送到累加器A3、程序中的ORG指令起什么作用?【答】用于定位,把ORG之后的程序放在指定的地址里4、将上述程序修改成将32个数据传送到外部数据区2050H开始的单元中去。【答】 ORG 0000H MOV

22、R7,#20H MOV R0,#10H MOV R1,#00H MOV R2,#20H MOV R3,#50HLOOP: CLR A MOV DPH,R0 MOV DPL,R1 MOVC A,A+DPTR MOV DPH,R2 MOV DPL,R3 MOVX DPTR,A INC R1 INC R3 DJNZ R7,LOOP ORG 1000H DB 23H,45H,0A5H,7FH,8DH,0CDH,33H,0BFH DB 0FH,66H,9AH,8CH,33H,69H,50H,2DH DB 6DH,45H,0FEH,90H,0ABH,3CH,67H,88H DB 0EDH,0FFH,00H

23、,21H,63H,9DH,77H,45HEND实验三 汇编语言程序设计(二)实验目的通过上机实验掌握单片机汇编语言程序的编写和调试。实验基本要求按实验内容上机输入并调试实验程序。画出实验程序的流程框图。实验内容一、调试S2.asm、S3.asm两个程序并完成思考题程序:S2.asmORG 0000H MOV 30H,#68H MOV 31H,#0AFH MOV 40H,#9AH MOV 41H,#59H MOV R0,#30H MOV R1,#40H MOV R7,#02H CLR CLOOP2: MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ R

24、7,LOOP2 MOV A,#00H ADDC A,#00H MOV R0,A LJMP $ END思考题:1、程序运行结束时,(32H)=01H ,(31H)=09H ,(30H)= 02H 2、观察程序运行时,CY,OV,P,AC标志位的变化。3、修改原始数据为8421码(压缩BCD码),并把程序改成8421码(压缩BCD码)加法程序,并运行该程序。ORG 0000H MOV 30H,#68H MOV 31H,#82H MOV 40H,#51H MOV 41H,#69H MOV R0,#30H MOV R1,#40H MOV R7,#02H CLR CLOOP: MOV A,R0 ADDC

25、 A,R1 DA A MOV R0,A INC R1 INC R0 DJNZ R7,LOOP MOV A,#00H ADDC A,#00H MOV R0,A SJMP $ END 程序:S3.asmORG 0000H MOV SP,#60H MOV A,#68H MOV B,#7EH MOV DPTR,#20A8H MOV R0,#74H MOV R1,#49H MOV 08H,#30H MOV 09H,#50H SETB RS0 PUSH DPH PUSH DPL PUSH B PUSH ACC MOV R0,A XCH A,B MOV R1,A POP ACC POP DPL CLR RS

26、0 NOP NOP END思考题:1、(A)= 68H ,(B)= 68H ,(DPH)= 20H ,(DPL)= 7EH ,(SP)= 62H ,2、(74H)= 00H ,(49H)= 00H ,(30H)= 68H ,(50H)= 7EH 保护和恢复现场数据的规则是什么? 【答】通过使用堆栈二、编程并调试B1.asm和B2.asmB1.asm已知(30H)=89H,(31H)=41H,编写并调试一个程序:将30H,31H中的内容进行字节分离为四个字节,高四位为零,低四位为分离后的内容,存放在32H35H的单元中。ORG 0000H MOV 30H,#89H MOV 31H,#41H MO

27、V R0,#30H MOV R1,#32H MOV R7,#02HLOOP: MOV A,R0 MOV B,A SWAP A ANL A,#0FH MOV R1,A INC R1 MOV A,B ANL A,#0FH MOV R1,A INC R1 INC R0 DJNZ R7,LOOP SJMP $ ENDB2.asm已知(30H)=89H,(31H)=41H,编写并调试一个程序:将30H,31H中的内容进行循环右移五次。实验四 功能模块一(I/O口)实验目的 通过实验掌握单片机的输入输出应用。实验基本要求 按实验内容上机输入并调试实验程序。画出实验程序的流程框图。实验内容11、多路开关指示

28、AT89C51单片机的P1.0P1.3接4个二极管,P1.4P1.7接4个开关,编程读取开关状态,使得对应的发光二极管反映开关状态(开关闭合,对应的灯亮)。Porteus模型为Multi Switch.DSN如下图所示。 程序设计:开关状态检测,对于单片机来说,是检测其I/O口的输入。可以轮流检测每个开关状态。根据每个开关的状态让相应的发光二极管指示。汇编语言源程序:ORG 00HSTART: ;读取P1口数据 ;交换A中高四位与低四位的位置 ;与0F0H相或 ;将开关状态送LED显示 ;转移到START END问题:为什么A要与0F0H相或?2、键盘显示AT89C51的并行口P3上接44键盘,P3.0P3.3为行线,P3.4P3.7位2列线,在数码管上显示每个按键的序号。Porteus模型为4X4KeyBoard.DSN如下图所示。程序设计:每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码,计算公式为键值=行号行数+列号假设9号键按下,它所在的行号为2,列号为1,该键的行数为4,则键值为24+1=9。汇编语言源程序:LINE EQU 30HROW EQU 31HVAL EQU 32H ORG 00HSTART: MOV DPTR,#T

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2