单片机实验总汇.docx
《单片机实验总汇.docx》由会员分享,可在线阅读,更多相关《单片机实验总汇.docx(77页珍藏版)》请在冰点文库上搜索。
![单片机实验总汇.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/170aa37e-507b-43e5-8d5e-a95970b4c861/170aa37e-507b-43e5-8d5e-a95970b4c8611.gif)
单片机实验总汇
星研集成环境软件简介
STARES598PCIS实验仪提供详尽的C、汇编例子程序、使用说明,可以进行单片机、微机原理、32位微机接口课程的开放式实验教学,通过扩展模块,连接了各种类型的接口芯片,并可以做各种实时控制实验。
下面通过对循环点亮发光二极管程序的设计,来说明如何使用星研集成环境软件。
本实例是仿真INTEL的8031单片机,来循环点亮P1口的发光二极管(低电平有效)。
程序是用汇编语言来编写。
下面介绍相应的操作步骤:
首先运行星研集成软件。
启动画面如图:
1、设置缺省项目
执行[主菜单»辅助»缺省项目],出现一个对话框:
(使用仿真器)
(使用仿真模块)
使用仿真器:
这时您可以根据自己的需要和实际情况来选择仿真头、公司、CPU、晶振。
本实例选择仿真头为PODPH51(DIP),公司为INTEL,CPU为80(C)31,晶振12MHz。
如果选择89C51等带有EPROM或FLASH的CPU,请点击“地址总线”命令。
使用仿真模块:
选择MCS51。
点击进入下一步:
“选择语言”
您可以根据自己的需要以及程序的类型作相应的选择,本实例选择Keil的A51、C51、Intel的PL/M51(请确定在选择语言之前已经安装好相应的编译软件)。
然后再点击进入下一步:
“编译、连接控制项”
如果您使用C51编写C文件,“CodeRomSize”选择“Large:
64Kprogram”,“MemoryModel”选择“Large:
variablesinXDATA”,如果您希望了解C文件行与汇编代码的对应关系、函数中参数是如何传递的,请选择“CODE”,编译以后生成的列表文件(扩展名为.LST)中就会包含汇编代码。
如果您使用汇编语言,选择MOD51,Keil自动使用缺省的8051特殊功能寄存器定义;如果不选择MOD51,在您的程序前边,加上:
$include(reg52.inc)
上一行必须顶格输入,reg52.inc是一个寄存器文件,您可以根据您选择的CPU,选择对应的寄存器文件(在KeilC51的ASM目录中)
如果您使用RTX-51Real-TimeOS,请在KeilL51的Operating中选择RTX-51TinyReal-TimeOS。
然后再点击进入下一步:
“存贮器出借方式”
使用仿真器:
存贮器出借方式分为程序空间出借方式、外部数据空间出借方式。
STAR系列仿真器内有128K仿真RAM,其中64K可以出借给您作为程序存贮器,存放机器码;64K可出借给您作为数据存贮器,存放外部数据。
通常,您借用仿真RAM作为程序存贮器,便于调试程序;外部数据空间在您的应用系统上,便于对您系统上的I/O、数据RAM操作;如果您的线路板还未制成,您也可借用仿真RAM。
具体操作是:
选择“程序”或者“外部数据”然后点击“借用”即可,若不想借用可先选中,然后点击“删除选中范围”即可。
使用仿真模块:
借用64K仿真RAM作为程序存贮器,64KCPU片外数据空间在实验仪上。
本实例采用默认的选项。
点击“完成”。
2、建立源文件
下面我们建立源文件,执行[主菜单»文件»新建],(或者点击图标
)打开窗口如下:
首先选择存放源文件的目录,输入文件名,注意:
一定要输入文件名后缀。
对源文件编译、连接、生成代码文件时,系统会根据不同的扩展名启动相应的编译软件。
比如:
*.asm文件,使用A51来对它编译。
本实例文件名为xunhuan.asm。
窗口如下:
按“确定”即可。
然后即出现文件编辑窗口:
输入源程序,本实例的源程序如下:
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
MOV
A,#0FFH
CLR
C
START1:
RLC
A
MOV
P1,A
ACALL
Delay
SJMP
START1
Delay:
MOV
R5,#2
;延时
Delay1:
MOV
R6,#0
Delay2:
MOV
R7,#0
DJNZ
R7,$
DJNZ
R6,Delay2
DJNZ
R5,X3
RET
输入源程序,如下图:
这样一个源文件就建立好了。
3.编译、连接文件
首先选择一个源文件,然后可以编译、连接文件了。
对文件编译,如果没有错误,再与库文件连接,生成代码文件(DOB、HEX文件)。
编译、连接文件的方法有如下二种:
(1)使用[主菜单»项目»编译、连接]或[主菜单»项目»重新编译、连接]”。
(2)点击图标
或
来“编译、连接”或“重新编译连接”。
“编译连接”与“重新编译、连接”区别:
“重新编译、连接”不管源文件是否修改、编译软件是否变化、编译控制项有无修改,对源文件编译,如果没有错误,再与库文件连接,生成代码文件(DOB、HEX文件)。
编译、连接过程中产生的信息显示在信息窗的“建立”视中。
编译没有错误的信息如下:
若有错误则出现如下信息框:
有错误、警告信息,用鼠标左键双击错误、警告信息或将光标移到错误、警告信息上,回车,系统自动打开对应的出错文件,并定位于出错行上。
这时用户可以作相应的修改,直到编译、连接文件通过。
4.调试
在进入调试状态以前,请正确设置通信口:
执行[主菜单»辅助»通信],对话框如下:
仿真器、实验仪配套的通信线可以与微机USB口相连,即为USB通信线,请选择USB。
仿真器配套的通信线可以与微机并口相连,即为并口通信线,如果并口地址是378H,请选择并口1;并口地址是278H,请选择并口2;并口地址是3BCH,请选择并口3。
仿真器配套的通信线可以与微机串口相连,即为串口通信线。
对于最下面一行的校验,通常您不必选中它,可以提高传送DOB/HEX文件时的速度。
在进入调试状态以前,你还必须确定仿真器、实验仪与微机的正确连接,如果使用仿真器,仿真头正确地连接在仿真器上。
电源接通,开关打开。
在软件中选择对应的仿真器、实验仪型号,具体设置如下:
执行[主菜单»辅助»仿真器、实验仪],对话框如下:
根据你所使用的机型作相应选择。
如果编译、连接正确后,可以开始调试程序。
进入调试状态方法有:
a)执行[主菜单»运行»进入调试状态]
b)点击工具条的
c)执行[主菜单»运行»装载DOB、HEX、BIN文件]
进入后的窗口如下:
在整个图片中我们可以看到相对应的窗口信息。
在“工作区窗”的“CommonRegister”中我们可以了解通用寄存器的信息。
中间的窗口为源程序窗口,用户可在此设置断点,设置光标的运行处,编辑程序等。
寄存器窗我们可以看到一些常用的寄存器的数值。
存贮窗1、存贮窗2显示相应的内部数据空间、外部数据空间的数据,还有变量窗,自动收集变量显示其中。
反汇编窗显示对程序反汇编的信息代码、机器码。
在信息窗的“装载”视中,显示装载的代码文件,装载的字节数,装载完毕后,显示启始地址,结束地址。
这种船坞化的窗口比通常的窗口显示的内容更多,移动非常方便。
用鼠标左键点住窗口左边或上方的标题条,移动鼠标,将窗口移到您认为合适的位置;将鼠标移到窗口的边上,鼠标的图标变成可变化窗口时的形状,用鼠标左键点住,移动鼠标,变化一个或一组窗口的大小。
在调试过程中,可以根据您的需要,在[主菜单»查看]中打开:
寄存器窗、存贮器窗1、2、3、观察窗、变量窗、反汇编窗。
您也可以通过[主菜单»辅助»设置»格式],设置每一种窗口使用的字体、大小、颜色。
移动窗口到您喜欢的位置、大小。
首先在“种类”中选择一个窗口,然后选择“字体”、“大小”,在“颜色”中选择某一类,在“前景”、“背景”中选择您喜欢的颜色。
对于高级语言,在您的程序前有一段库文件提供的初试化代码,
(当前可执行标志)不会出现在您的文件行上,如果您使用C语言,可将光标移到main函数上,按F4功能键,让CPU全速运行到main行上后停下;如果您使用PL/M语言,按F7功能键,让CPU“单步进入”,运行到您的任何一个可执行后停下。
您可以使用以下命令调试您的程序:
设置或清除断点(功能键为F2)
在当前光标行上设置或清除一个断点
单步进入(功能键F7)
单步执行当前行或当前指令,可进入函数或子程序。
SUPERICE16、SUPERICE51“单步进入”时,不响应中断。
连续单步进入(功能键Ctrl+F7)
连续执行“单步进入”,用鼠标点击
或按任意键后,停止运行。
SUPERICE16、SUPERICE51“单步进入”时,不响应中断。
单步(功能键F8)
单步执行当前行或当前指令,将函数或子程序作为一条指令来执行。
如果当前行中含有函数、子程序或发生中断,CPU将执行完整个函数、子程序或中断,停止于当前行或当前指令的下一有代码的行上。
SUPERICE16、SUPERICE51“单步”时,不响应中断。
连续单步(功能键Ctrl+F8)
连续执行“单步”,用鼠标点击
或按任意键后,停止运行。
SUPERICE16、SUPERICE51“单步”时,不响应中断。
运行到光标行(功能键F4)
从当前地址开始全速运行用户程序,碰到光标行、断点或用鼠标点击
,停止运行。
全速断点(功能键F9)
从当前地址开始全速运行用户程序,碰到断点或用鼠标点击
,停止运行。
全速运行(功能键Ctrl+F10)
从当前地址开始全速运行用户程序,此时,按用户系统的复位键,CPU从头开始执行用户程序,即对于MCS51类CPU是从0开始执行;对于MCS96、MCS196类CPU是从2080H开始执行。
用鼠标点击
,停止运行。
停止运行
终止微机与仿真器之间通信(功能键ESC)。
注意:
欲终止微机与仿真器之间通信,功能键ESC是一个很方便的键,它的效果比点击相应的图标的效果要好。
建议用户多用ESC键。
在系统运行“连续单步”或者“连续单步进入”时ESC键被禁止,这时用户可以按键盘的其他任意键停止其运行。
5.调试的方法及技巧
一般来说,用户的程序或多或少的会有一些逻辑错误,我们的仿真器、实验仪和星研集成软件可以帮助用户很快的定位,很快的查出相应的错误。
一般刚刚写好的程序,在进入调试状态后,执行“单步”或者“单步进入”,我们推荐您能记住这些操作的相对应的功能键,这样您就在调试程序的过程中很方便。
在调试状态的窗口中我们可以看到很多的窗口,用户只要熟练地应用这些窗口来观察、分析数据就会很快的调试好程序,达到事半功倍的效果。
比如在刚才的调试程序中我们多次执行“单步(F8)”命令,在工作区窗口的CommonRegister视中查看通用的寄存器:
我们可以观察到在本程序中所使用的一些寄存器的变化,比如累加器A、P1口的数值的变化。
我们可以看到P1口中的数值变化为FEH(11111110B)—FDH(11111101B)—FBH(11111011B)—F7H(11110111B)—EFH(11101111B)—DFH(11011111B)—BFH(10111111B)—7FH(01111111B)
—FEH(11111110B)很好的实现了P1口循环点亮发光二极管的功能。
对于其他的一些寄存器的数值的观察我们也可以用来分析自己的程序。
把光标移动到DELAY子程序(具体操作是:
用鼠标点击DELAY行,然后再点击图标
):
这时执行“连续单步(Ctrl+F7)”命令,在工作区窗口的CommonRegister视中我们可以寄存器R5,R6,R7的数据的连续的变化。
用户可对此做专门的分析。
使用本软件也可以很好的查出逻辑错误。
比如:
如果我们输入程序为:
ORG
0000H
LJMP
START
START:
MOV
R4,#0FEH
LOOP:
MOV
P1,R4
MOV
A,R4
RR
A
MOV
R4,A
LCALL
DELAY
LJMPSTART
DELAY:
MOV
R0,#02H
;延迟子程序
X3:
MOV
R1,#0FFH
X2:
MOV
R2,#0FFH
X1:
DJNZ
R2,X1
DJNZ
R1,X2
DJNZ
R0,X3
RET
END
我们在调试时,观察工作区窗口的CommonRegister视,就会看到尽管有A,R4的数值在变化,但是P1的数值始终没有变化。
这样我们在调试时就会发现问题LJMPSTART应改为LJMPLOOP。
我们也可以在软件中查看变量,查看变量有多种方法,a)鼠标移到文件窗、反汇编窗口中的变量、寄存器、内部RAM、外部RAM上,半秒钟后,在它们的旁边,会显示相应的值。
b)在变量窗中,“全局”显示所有的全局变量;“模块”显示所有模块级变量;“局部”显示所有当前函数中的变量;“自动”自动收集当前可执行及前二行中的所有变量、寄存器、内部RAM、外部RAM。
所以说星研集成软件为用户提供了许多实用和方便的观察、调试、分析的功能,其他的一些功能我们会在后续的实例中作更详细的介绍。
用户也可以依此类推,发掘出更多更好的为自己调试程序方便的功能。
软件实验
实验一数据传送(RAM–>XRAM)
一、实验目的
熟悉星研集成环境软件或熟悉KeilC51集成环境软件的使用方法。
熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。
二、实验内容
1、熟悉星研集成环境软件或熟悉KeilC51集成环境软件的安装和使用方法。
2、编写程序,实现内外部数据段的传送、校验。
三、程序框图
四、实验步骤
在内部RAM30H~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM的1000H~100FH中的内容。
熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
五、程序清单
;将内部RAMAddress1开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。
Address1
DATA
30H
Address2
XDATA
1000H
ORG
0000H
LJMP
STAR
ORG
0100H
STAR:
MOV
SP,#60H
MOV
R0,#Address1
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中。
实验二双字节BCD码(十进制数)加法
一、实验目的
熟悉51汇编指令,学会使用星研集成环境软件,能自己编写简单的程序,熟悉BCD码,了解如何调用系统提供的子程序。
二、实验内容
从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上;熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
三、实验框图
四、实验步骤
1、连线说明:
D3区:
CLK
——
B2区:
2M
D3区:
CS
——
A3区:
CS5
D3区:
A0
——
A3区:
A0
2、在F4区的键盘上输入4位被加数、加数
3、结果显示在F4区的数码管上
五、程序清单
EXTRN
CODE(Display8,GetBCDKey)
Buffer
DATA
30H
;8字节显示缓冲区
F1
BIT
0D1H
;PSW.1
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
CLR
F1
;先清除显示,再接收键输入
START1:
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
Display:
PUSH
ACC
;显示结果
MOV
R0,#buffer
MOV
A,buffer+5
;低位
ACALL
B1toB2
;压缩BCD码转换成非压缩BCD码
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
;将高位0消隐
MOV
R0,#buffer
LCALL
Display8
SJMP
START1
;将一个字节压缩BCD码转换成二个字节非压缩BCD码
B1toB2:
PUSH
ACC
ANL
A,#0FH
MOV
@R0,A
INC
R0
POP
ACC
ANL
A,#0F0H
SWAP
A
MOV
@R0,A
INC
R0
RET
BlackDisplay:
MOV
A,@R0
;将高位0消隐
JNZ
Exit
MOV
A,#10H
MOV
@R0,A
DEC
R0
DJNZ
R7,BlackDisplay
Exit:
RET
END
实验三冒泡排序
一、实验目的
熟悉使用MCS51指令,掌握汇编语言的设计和调试方法,了解如何使用高效方法对数据排序。
二、实验内容
编写并调试一个排序程序,要求使用冒泡法将一组数据从小到大重新排列。
三、程序框图
四、实验步骤
使用断点方式调试程序,检查内部RAM30H~3FH中数据是否按从小到大的顺序排列。
五、程序清单
bSort
BIT
F0
ORG
0000H
LJMP
STAR
ORG
0100H
STAR:
MOV
SP,#60H
;堆栈
MOV
R0,#30H
;存放待排序数据的首地址
MOV
R7,#16
;数据个数
MOV
DPTR,#TAB_1
STAR1:
CLR
A
MOVC
A,@A+DPTR
MOV
@R0,A
;将数据移入内部RAM中
INC
R0
INC
DPTR
DJNZ
R7,STAR1
MOV
R7,#16-1
;存放比较次数
STAR2:
PUSH
07H
MOV
R0,#30H
;存放启始地址
CLR
bSort
MOV
R1,00H
INC
R1
MOV
A,@R0
STAR3:
MOV
B,A
MOV
A,@R1
CJNE
A,B,$+3
JNC
STAR5
XCH
A,@R0
MOV
@R1,A
SETB
bSort
STAR5:
INC
R0
INC
R1
DJNZ
R7,STAR3
POP
07H
JNB
bSort,Exit
DEC
R7
SJMP
STAR2
Exit:
SJMP
$
TAB_1:
DB0H,5H,6H,3H,8H,92H,04H,57H,46H,01H,0FFH,0A0H,45H,99H,55H,66H
END
六、思考题
你还知道哪些排序方法?
另外编写一个排序子程序。
(数据结构方面的教材上有十几种排序方法)。
实验四电子钟(定时器、中断综合实验)
一、实验目的
熟悉MCS51类CPU的定时器、中断系统编程方法,了解定时器的应用、实时程序的设计和调