DICE实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[单片机原理及接口技术] [实验指导书]
[东北电力大学自动化工程学院]
2015年6月14日
前言
本实验指导书是以启动计算机总厂有限公司生产的DICE-5212K单片机实验系统为硬件基础来编写的。
其主要内容为实验设备的介绍、操作使用及MCS51系列单片机的相关实验项目。
第1章实验设备介绍
1.1实验设备简介
DICE-5212K多功能单片机实验开发系统是《MCS-51单片机原理与接口》《C8051嵌入式单片机控制技术》《自动化控制》《传感器控制》等课程教学的配套实验设备。
它以小系统、多功能、易扩展为设计思想,系统的地址总线、数据总线、控制总线全部引出,对用户开放,并留有扩展单元(区),学生可以选配各种扩展模块开展实验项目。
本设备不仅针对教学实验、课程设计、毕业设计等教学环节提供了良好的实验开发环境,同时也可为学生课外科技活动的开展提供硬件支持。
下图为DICE-5212K单片机实验箱的实物图。
图1-1 DICE-5212K单片机实验箱的实物图
1.2、系统组成及工作方式
DICE-5212K单片机实验系统由用户实验箱、仿真器和ISP下载器等部分组成。
其工作方式有脱机运行和联机运行两种,其中脱机运行又分为固化程序脱机运行和ISP脱机运行两种。
下面分别介绍各种工作方式。
1.2.1 固化程序脱机运行
DICE-5212K用户实验箱的外部扩展程序存储器W27512(ROM 64K)内部烧写了部分硬件实验模块程序,在不用仿真器和PC机联机时可直接通过实验仪4*6键盘调出相应的程序并全速运行。
便于用户测试和演示实验。
1.2.2 ISP脱机运行
可以通过ISP下载线,将HEX文件直接下载到AT89S52单片机内部8K的FLASH ROM中运行。
1.2.3 联机运行
通过仿真器及配套上位软件在PC机上编写、编译、装载、运行、调试程序。
具体操作详见“第2章 DICE-5212K仿真联机运行”。
1.3、系统地址分配及系统接口定义
1.3.1 系统地址分配
(1)I/0地址分配
地址扩展名称用途
8000H ~ 8FFFH自定义实验用口地址
9000H ~ 9FFFH自定义实验用口地址
0A000H ~ 0AFFFH自定义实验用口地址
0B000H ~ 0BFFFH自定义实验用口地址
0C000H ~ 0CFFFH自定义实验用口地址
0D000H ~ 0DFFFH自定义实验用口地址
0E000H ~ 0EFFFH自定义实验用口地址
0F000H ~ 0FEFFH自定义实验用口地址
0FF20H8155控制口写方式字
0FF21H8155PA口字位口
0FF22H8155PB口字形口
0FF23H8155PC口键入口
0FF28H8255PA口扩展用
0FF29H8255PB口扩展用
0FF2AH8255PC口扩展用
0FF2BH8255控制口写方式字
(2)存储器地址分配
地址器件用途
0000H ~ 0FFFFH AT89S52/27C512用户程序空间
0000H ~ 7FFFH62256用户数据空间
1.3.2 系统接口定义
(1)RS232用户通信口
短路块定义:
A:EXT-C(2、3)位置,表示RXD、TXD插孔悬空,用户使用时需用导线连接。
B:Keil-C(1、2)位置,表示RXD、TXD插孔已经内部与单片机P3.0、P3.1连接。
图1-2
(2)CZ4:打印接口
图1-3 (3)JX0,JX17:为系统提供的数据总线接口
图1-4
(4)CZ7:系统提供的扩展接口
图1-5 (5)JX12、JX14:液晶显示接口
图1-6 (6)ISP下载接口
图1-7
1.4通用单元电路
(1)LED发光二极管输出模块
实验台上有8只发光二极管及相应驱动电路。
见图1-8,L1~L8为相应发光二极管驱动信号输入端,该输入端为高电平“1”时发光二极管亮。
图1-8
(2)开关量输入模块一
实验台上有8只开关Kl-K8,与之相对应的K1-K8个引线孔为逻辑电平输出端。
开关向上拨相应插孔输出高电平“l”,向下拨相应插孔输出低电平“0”。
见图1-9。
图1-9
开关量输入模块二。
见图1-10
图1-10
(3)单脉冲电路
实验仪上单脉冲产生电路如图1-11所示,标有“”和“”的两个引线插孔为正负单脉冲输出端。
附近按钮AN0为单脉冲产生按钮,每按一次产生一个单脉冲。
图1-11
(4)分频电路。
见图1-12
图1-12
(5)脉冲发生电路
实验仪上提供一8MHZ的脉冲源,见图1-13,实验仪上标有8MHZ的插孔,即为脉冲的输出端。
图1-13
(6)485接口电路。
见图1-14
图1-14
(7)数码管显示电路。
见图1-15
数码管显示电路中,SW3、SW4红色拨码开关打在“ON”位置,数码管代码端和公共端与8155PA、PB口相连。
如果SW3、SW4红色拨码开关打在相反位置,即“OFF”位置,数码管电路与8155断开,数码管代码端和公共端对外开放。
图1-15
(8)矩阵键盘模块电路。
见图1-16
图1-16
(9)目标CPU(AT89S52)的控制电路
注:图1-17中的74LS245与74LS373功能由CPLD器件1016实现。
图1-17
(10)存储器控制电路。
见图1-18
图1-18
(11)实验扩展模块
图1-19所示为实验扩展模块引脚定义,对应插孔号。
KZ1~KZ8还配有排针/锁紧孔转接口。
图1-19
第2章DICE-5212K仿真联机运行
2.1 DICE-KEIL USB仿真器与DICE-5212K的连接
(1)确认KB1开关打在“一般模式”,KB2短路块插在MCS-51(1、2)位置,SW1短路块插在“UP”位置。
SW3、SW4、SW5打在“ON”的位置。
这些都是出厂时的默认设置;
(2)在确认断电的情况下,取下DICE-5212K实验仪右上角绿色锁紧插座上的AT89S52单片机芯片;
(3)将40芯白色扁平线上的IDC40插头与DICE-KEIL USB仿真器的IDC40插座接插好,然后用随机配送的USB线将仿真器与PC机连接;
(4)将40芯白色扁平线另一头的40芯仿真头插在DICE-5212K实验仪右上角绿色锁紧插座上。
注意:不要插反,绿色锁紧插座左上角第一脚为单片机第一脚。
40芯仿真头的第一脚上有箭头指示。
DICE-KEIL USB仿真器应置于实验箱右侧。
如有疑问请致电我公司技术支持。
2.2 KEILC仿真软件的操作应用
(1)建立一个项目:
点击Project(工程)菜单,选择New Project(新工程),在文件名中输入您的第一个程序项目名称,假定我们用“test”。
“保存”后的文件扩展名为uv2 这是KEIL uVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。
注意输入的时候不要输入文件的后缀名,默认即可。
为了查找方便,假定我们保存在c盘的根目录。
这时会弹出让你选择单片机型号的对话框,我们选择ATMEL---AT89S52。
图2-1
(2)汇编源文件的建立:
点击FILE(文件)菜单中的NEW...(新文件)命令新建一个文本编辑窗口。
在里面输入一个程序范例如流水灯程序,然后点击FILE(文件)菜单中的SAVE(保存)命令保存文件,注意必须输入文件的后缀名.asm,例如保存为C:/prog/001.asm(注意不要有中文目录,文件名不超过8个字符,否则编译不通过!如果您是第一次使用,那么建议您直接保存在c 盘的根目录,文件名同样取001.ASM,不要试图把他保存在桌面/我的文档等等!)
图2-2
请注意:
C51 用户请在您的代码的main()函数前面,加上一句:
code unsigned char stop[3] _at_ 0x3b;
ASM 汇编用户请将你的主程序跳过中断区直到0080H 以后,如:
org 0000H
LJMP main
org 0080H
main:....;程序开始
(3)点击Target 1(目标1)前面的“+”,出现Source Group 1,(源程序组1)选中右键点选“Add files Group Source Group 1” (增加文件到源程序组1)这时选择文件类型为asm,再选中001.asm 文件,再按Add添加,在随后的提示框中按“确定”。
图2-3
(4)仿真部份采用Mon51协议,在使用之前应必须对软件项目进行如下设置:
单击“Project”(工程)菜单,再在下拉菜单中单击“options for target target 1”(目标1 属性)在下图中选择output(输出)“Create HEX file“(产生hex 文件)的选项,以便汇编后生成HEX 代码,供编程器使用。
(5)在“Debug”(调试)中点选“KeilMonitor-51 Driver”,同时选中加载代码到仿真器,运行到main0,在“恢复调试设置”中“断点”“工具栏”“浏览点”“储存器显示”也全部钩选上,然后点击“设置”。
(6)点击“Settings”(设置)选择要使用串口必须和实际相符合,你的计算机可能是COM2 或者其他,对此不能确定可以通过察看控制面板\硬件\端口\通讯端口来解决,同时注意电脑上不能够同时运行其他可能占用串口资源的软件,串口调试软件等等也必须退出,否则将引起冲突,(如果您使用的是USB 通信方式,那么选择系统分配的虚拟串口号
(7)按以下两个向下小箭头的图标进行编译,(或者按F7快捷)编译成功后如会出现下图红箭头所指的文字正在汇编…0(错误),0(警告)这里的意思是没有错误,没有警告,表示编译成功。
此时在C盘的根目录就生成了test.hex 文件,有了这个hex 文件,我们也可用ISP 方式烧写到单片机实验,然后可以进行硬件仿真了,将仿真头插入目标板的40pin 卡座,开始仿真,退出仿真时最好按一下仿真器上的复位按键,绿色指示灯闪三下。
(一般不需要这样做,除非系统没有复位)
(8)在按图第三个红色的(debug)按钮或按Ctrl+F5快捷键可以进入仿真。
此时界面将出现连接成功的提示! Connected to monitor-51 v9.1
其中9.1是仿真器的版本号(否则设置有误请仔细检查)
2.3 KEILC仿真器软件调试技巧
进入调试状态后,Debug 菜单项中的命令可以使用了,有关编译的工具栏按钮消失了,出现了一个用于运行和调试的工具栏,Debug 菜单上的大部份命令都有相应的快捷按钮。
从左到右依次是复位、运行、暂停、单步跟踪、单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮命令;然后按一下图示第二个“运行”按钮。
连接上相关的实验资源,本实验用一条8PIN 的数据排线把实验仪的CPU 部份的P1 口(JP1)连接到八路指示灯部份的L1~L8。
这时你会看到实验仪的八个红色LED,轮流点亮,表示运行成功,也可以查看相关的变量和参数,非常方便。
1)单步跟踪运行
使用菜单 Debug->Step 或上图第四个单步运行按钮或使用快捷键 F11 可以单步跟踪执行程序,在这里我们按下F11 键,即可执行该箭头所指程序行,每按一次 F11,可以看到源程序窗口的左边黄色调试箭头指向下一行,如果程序中有Delay延时子程序,则会进入延时程序中运行。
2)单步运行
如果 Delay 程序有错误,可以通过单步跟踪执行来查找错误,但是如果 Delay 程序已正确,每次进行程序调试都要反复执行这些程序行,会使得调试效率很低,为此,可以在调试时使用 F10 来替代 F11(也可使用菜单 Step Over 或相应的命令按钮),在 main 函数中执行到Delay时将该行作为一条语句快速执行完毕。
为了更好的进行对比,我们重新进入仿真环境,将反汇编窗口关闭,不断按 F10 键,可以看到在源程序窗口中的左边黄色调
试箭头不会进入到延时子程序。
3)全速运行
点击工具栏上的“运行”按钮或按 F5 键启动全速运行,全速执行程序,此时实验仪上的 P1 口所接 LED 以流水灯状态显示。
4)暂停
点击工具栏上的按钮,此时用户板上的 P1 口所接 LED 停止以流水灯状态显示,只有一个LED 灯点亮(取决于暂停前的 P1 的值)
5)观察/修改寄存器的值
Project 窗口在进入调试状态后显示 Regs 页的内容,包括工作寄存器 R0~R7 的内容和累加器 A、寄存器B、堆栈指针SP的内容
用户除了可以观察以外还可自行修改,例如将寄存器 a 的值 0x62 改为 0x85。
方法一:用鼠标点击选中单元 a,然后再单击其数值位置,出现文字框后输入 0x85 按回车键即可;
方法二:在命令行窗口,输入 A=0x85,按回车键将把 A 的数值设置为 0x85。
6)观察/修改存储器的数据
点击菜单“视图View->储存器窗口Memory Windows”,便会打开储存器Memory窗口(如窗口已打开,则会关闭),Memory窗口可以同时显示4个不同的存储器区域,点击窗口下部分的编号可以相互切换显示。
在储存器1(Memory#1)的地址输入栏内输入“D:0e0h”,按回车键后,可以从内部可直接寻址 RAM 的e0H 地址处开始显示,e0H地址的值就是寄存器 a 的值,应与主寄存器窗口下的值相同。
点击窗口下部分的储存器2(Memory#2),在 Address 输入栏内输入“D:0e0h”,按回车键后,可以从内部可间接寻址 RAM 的 e0H 地址处开始显示。
点击窗口下部分的 Memory#3,在 Address 输入栏内输入“C:0x0021”,按回车键后,可以从代码区域 0000H地址处开始显示,这时各地址值应与在反汇编窗口中的值相同。
点击窗口下部分的 Memory#4,在Address输入栏内输入“X:00h”,按回车键后,可以从xdata RAM 区域 0000H地址处开始显示。
通过 Memory 窗口修改数据
在 Memory 窗口中显示的数据可以修改。
例如,要改动 data 区域 OXE0 地址的数据内容:把鼠标移动到该数据的显示位置,按动鼠标右键在弹出的菜单中选中:更新储存器“Modify Memory at D:0xE0”,在弹出对话框的文本输入栏内输入相应数值,按回车键或点击 OK,修改完成。
通过命令行查看数据
例如,我们想查看 data 空间从 0x01 到 0x03 地址的内容,可在命令输入窗口输入“d d:0x01,03H”,回车即可完成,d 表示 data 空间,0x01 表示起始地址,03H 表示结束地址(注意两种 16 进制的表示方法在这里都可以接受),输出结果在信息输出窗口中显示出来。
通过命令行修改数据
例如,我们想把 p1口的值从0x02数据修改成 0x05 ,可在命令输入窗口输入p1=0x04”,回车即可完成,此时如果p1口接有led,将立即看到led状态改变。
通过 Memory 窗口可以看到修改后的数据:
在地址栏输入 d:00H然后回车。
储存器1 的d:0x90后的第一个数据就变成了04 ,这正是我们刚才修改的结果。
7)观察/修改变量的值
在暂停程序运行时,可以观察到有关的变量值。
在监视/调用堆栈(Watch)窗口“局部”页自动显示当前正在使用的局部变量,不需要用户自己添加。
监视(Watch)页显示用户指定的程序变量。
(先按F2键,然后输入变量的名称例如“delay”然后回车)
移动鼠标光标到要观察的变量“delay”上停留大约一秒钟,就弹出一个“变量提示”块出来。
将鼠标移动到一个变量名“d1”的上面,点击鼠标右键,出现快捷菜单,选中:“增加d1到观察窗口”(Add“d1” to Watch Windows…)选项,子菜单中会出现#1 和#2 的选项,点击后该变量就会加入对应的监视/调用堆栈(Watch) 窗口。
增加d1到观察窗口”(Add “d1” to Watch Windows…)选项后对应的监视窗口显示了d1 的值。
修改变量的数值方法:用鼠标左键点击该行的变量数据栏,然后按 F2 键出现文本输入栏后,输入修改的数据,确认正确后按回车键。
8)复位
如果用户想重新开始运行用户程序,可以点击工具栏上的复位按钮,对仿真器的用户程序进行复位。
仿真器复位后,程序计数器 PC 指针将复位成 0000H,另外,一些内部特殊功能寄存器在复位期间也将重新赋值,例如 A 将变为 00H, DPTR 变为 0000H, SP 变为07H, I/O 口变为 0FFH,此时用户板上的 P1 口所接 LED 指示灯会全部熄灭。
9)设置断点
将光标移至待设置断点的源程序行,如“MOV P1,#0B6H”行。
点击工具栏上的“断点”图标,可以看到源程序窗口中该行的左边出现了一个红色的断点标记。
(如果再点一下这个图标则清除这个断点)同样的方法,您可以设置多个断点。
10)带断点的全速运行
按动 F5 启动全速运行,全速执行程序,当程序执行到第一个断点时,会暂停下来,这时你可以观察程序中各变量的值及各端口的状态,如下图:第一个断点在mov p1,#06dh 之
后,此时在储存器窗口Memory Windows”, 储存器1(Memory#1)的地址输入栏内输入“D:000h”,按回车键后,可以从内部可直接寻址地址数据为6D 和程序设计的相同。
此时用户目标板上会显示当前断点的状态,继续按动 F5 启动全速运行,程序执行到第二个断点时,会暂停下来,在变量观察窗口中,RAM的值应为B6;继续按动 F5 启动全速运行,程序又会执行到第一个断点处暂停,此时用户目标板上的灯又显示相应的状态。
断点是仿真器调试的重要手段,请您仔细反复的练习直到熟练。
11)清除程序中所有断点
如果想取消全部的断点全速运行时,要是逐个取消将是很烦琐的事,我们只要点击工具栏相应的图标,就可清除程序中所有断点。
L2)执行到光标处
在体验“执行到光标处”之前,我们先点击工具栏上复位的图标,对仿真器的用户程序进行复位,把鼠标放在想要停止的行点一下,再按“执行到光标处”程序全速执行到光标所在行,这与我们在前面看到的带断点的全速运行相类似。
13) 退出仿真
先按暂停按钮,再按复位,再按开启/关闭调试模式按钮,则退出仿真状态又重新回到编辑模式。
(如果不能正确退出,请按一下仿真器上的复位按钮),此时可以对程序修改,然后重新编译,再按开启/关闭调试模式按钮,就又进入仿真模式了。
请注意!由于KEIL软件在仿真状态时和仿真器始终保持通信联系,为此退出仿真的时候最好按照以上顺序退出,不要强行退出,否则容易造成电脑死机。
到这里也就完成了keil软件的标准操作过程,由于KEIL 操作过程较复杂,请您自行练习直到熟练!
第3章MCS51单片机实验
实验1 实验设备的熟悉掌握及数据传送指令寻址方式的验证练习
1、实验目的:了解实验设备及其使用方法。
通过汇编语言基本指令的练习,灵活运用各类
指令,熟练掌握编译软件的使用。
2、实验设备:
①、DICE-5212K单片机综合实验箱1台
②、PC机1台
3、原理图(AT89S52控制电路及存储器控制电路模块):
3、实验内容:
了解DICE-5212K实验箱的运行方式,学会KEILC软件的简单应用,包括:建立工程、建立汇编语言源文件、设置工程、编译、链接、运行指令、并通过窗口观察运行结果等。
其中尤为重要的是掌握单步、单步追踪、运行到光标处、连续运行、断点等运行命令。
①、寄存器、内部数据数据传送指令验证练习(各类寻址方式验证练习):
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#30H
MOV B,#0E4H
MOV R0,#30H
MOV R1,#31H
MOV 30H,#31H
MOV 34H,#32H
MOV R0,A
MOV A,R0
MOV A,30H
MOV 31H,B
MOV 32H,A
MOV R0,32H
MOV 33H,R0
MOV R1,34H
MOV 34H,R1
MOV 35H,34H
MOV 36H,@R0
MOV 37H,@R1
MOV @R0,36H
MOV @R1,37H
S:CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
SJMP S
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
要求:运行并观察并记录运行结果。
学会观察寄存器及内部数据。
②、外部数据数据传送指令的验证练习
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#30H
MOV DPTR,#1000H
MOVX @DPTR,A
MOVX A,@DPTR
INC A
MOV DPH,#10H
MOV DPL,#07H
INC DPTR
MOVX @DPTR,A
NOP
SJMP $
END
要求:运行并观察并记录运行结果,学会观察外部数据。
③、程序存储区指令验证练习
●指令读程序存储区
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:CLR A
MOVC A,@A+PC
INC A
MOVC A,@A+PC
MOV DPTR,#0080H
MOVC A,@A+DPTR
INC A
MOVC A,@A+DPTR
INC DPTR
MOVC A,@A+DPTR
NOP
SJMP $
END
要求:运行并观察并记录运行结果。
学会观察程序存储区。
●用伪指令DB改写程序存储区
ORG 0000H
LJMP MAIN
ORG 1000H
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
ORG 0080H
MAIN:CLR A
MOV DPTR,#1000H
MOVC A,@A+DPTR
MOV A,#03H
MOVC A,@A+DPTR
MOV A,#0DH
MOVC A,@A+DPTR
INC DPTR
MOV A,#03H
MOVC A,@A+DPTR
NOP
SJMP $
END
要求:运行并观察并记录相关程序存储区运行结果。
●程序储存区中查表
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:CLR A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV A,#03H
MOVC A,@A+DPTR
MOV A,#0DH
MOVC A,@A+DPTR
INC DPTR
MOV A,#03H
MOVC A,@A+DPTR
NOP
SJMP $
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
END
要求:运行并观察并记录相关程序存储区运行结果。
结论:标号是程序存储区中的地址位置标记,是由用户自己定义的字母和数字的组合,是由编译器自动分配的,它的宽度是16位的。
在控制转移类指令中经常用到。
④、堆栈指令验证练习
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV SP,#30H
MOV A,#45H
MOV 56H,#89H
PUSH ACC
PUSH 56H
POP ACC
POP 57H
NOP
SJMP $
END
要求:运行并观察并记录相关程序存储区运行结果。
⑤、累加器传送命令练习
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#30H
MOV R0,#34H
XCH A,R0
MOV 30H,#98H
XCH A,30H
XCH A,@R0
SWAP A
SJMP $
END
4、实验报告:
①、按要求完成上述实验内容并做好指令注释。
②、记录好观察到的实验结果。
实验二程序状态字及其相关指令的影响实验
1、实验目的:
学习掌握MCS51单片机程序状态字PSW及影响其各个状态位的指令验证练习,进一步熟练掌握KEIL 编译器软件的应用。
2、实验设备:
①、DICE-5212K单片机综合实验箱1台
②、PC机1台
3、实验原理图:(同上)
4、实验内容:
①、学习如何观察程序状态字PSW的状态。
②、算数运算类指令练习验证示例:
●寄存器加指令练习ADD A,R n
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:SETB C
MOV A,#30H
MOV R3,#45H
ADD A,R3
SJMP $
END
要求:观察指令执行后PSW各个相关位的变化并记录。
●直接地址加指令练习ADD A,direct
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#30H
MOV 26h,#45H
ADD A,26h
SJMP $
END
要求:观察指令执行后PSW各个相关位的变化并记录。
●寄存器间接寻址加法指令练习ADD A,@Ri
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#30H
MOV 26H,#0F5H
MOV R0,#26H
ADD A,@R0
SJMP $
END
要求:观察指令执行后PSW各个相关位的变化并记录。
●立即数加法指令练习ADD A,#data
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#30H
ADD A,#0F5H
SJMP $
END
要求:观察指令执行后PSW各个相关位的变化并记录。
③、程序状态字PSW中RS0和RS1控制位的练习
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV R0,#36H
CLR RS0
SETB RS1
MOV R0,#45H
MOV A,R0
MOV 20H,@R0
CLR RS1
NOP
SJMP $
END
要求:观察指令执行后PSW各个相关位及寄存器的变化并记录。
④、学生自行练习教科书上的其他算术运算类指令,内容不限。
5、实验报告:
①、按要求完成上述实验内容并做好指令注释。
②、记录好观察到的实验结果。
实验三MCS51基本指令练习
1.实验目的:学习掌握MCS51单片机其他指令(逻辑运算类指令、控制转移类指令、布
尔处理类指令)验证练习,进一步熟练掌握KEIL 编译器软件的应用。
2.实验设备:
①、DICE-5212K单片机综合实验箱1台
②、PC机1台
3.实验原理图:(同上)
4.实验内容:
①、逻辑运算类指令练习
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#30H
CLR A
MOV A,#89H
CPL A
RL A
SETB C
RLC A
RR A
SETB C
RRC A
MOV A,#0FH
MOV R7,#89H
ANL A,R7
MOV 30H,#89H
ANL A,30H
MOV R0,#30H
ANL A,@R0
ANL A,#0F0H
SJMP $
END
要求:独立练习逻辑“或”指令、逻辑“异或”指令。
独立完成拆字拼字程序。
程序示例:将20h、09h、04h拆分为高低4位并分别存放在内部数据区7eh、7dh、7ch、7bh、7ah、79h
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV R6,#20H
MOV R5,#09H
MOV R4,#04H
MOV A,R6
ANL A,#0F0H
SWAP A
MOV 7EH,A
MOV A,R6
ANL A,#0FH
MOV 7DH,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV 7CH,A
MOV A,R5
ANL A,#0FH
MOV 7BH,A
MOV A,R4
ANL A,#0F0H
SWAP A
MOV 7AH,A
MOV A,R4
ANL A,#0FH
MOV 79H,A
SJMP $
End
要求:编写子程序完成此功能。
②、控制转移类指令练习
条件跳转和无条件跳转指令练习。
ACALL,LCALL,RET ,AJMP ,LJMP ,SJMP ,DJNZ,CJNE ,JZ ,JNZ等指令练习.
清零程序示例:(将外部数据区3000h-30ffh数据清零,学会程序循环)
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV R0,#00H
MOV DPTR,#3000H
LOOP:MOV A,#00H
MOVX @DPTR,A
INC DPTR
INC R0
CJNE r0,#00H,LOOP
SJMP $
END
要求:编写程序将外部数据区3000h-30ffh数据置1。
③、布尔处理类指令练习(位传送、位操作、位逻辑、位跳转等指令练习)
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV C,20H.0
MOV C,00H
SETB C
SETB 21H.6
SETB 00H
CLR 00H
CPL 00H
SETB 00H
SETB C
JC S
NOP
S:JB 00H ,S1
NOP
S1:JBC 00H,S2
NOP
SETB 00H
S2:SJMP S
END
5、实验报告:①、按要求完成上述实验内容及指令注释②、记录实验结果
实验四基本单元电路的测试及应用(设计性实验)
1、实验目的:通过本试验,使学生了解DICE-5212K实验箱的开关量输入输出电路单元,并提高学生的学习兴趣,进一步熟练操作实验设备。
2、实验原理图(输入模块一、输入模块二、输出模块电路):
3、实验内容:
①、验证程序:通过I/O口控制单个LED小灯。
实验连线:p1.0连接到开关量输出模块L1-L8任意引脚。
实验程序示例:(无延时控制)
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN: SETB P1.0
CLR P1.0
SJMP MAIN
END
实验程序示例:(有延时控制)
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN: SETB P1.0
MOV R2,#2FH
LCALL DELYA
CLR P1.0
MOV R2,#2FH
LCALL DELYA
SJMP MAIN
DELYA: PUSH 02H ;延时子程序
DELYB: PUSH 02H
DELYC: PUSH 02H
DELYD: DJNZ R2,DELYD
POP 02H
DJNZ R2,DELYC
POP 02H
DJNZ R2,DELYB
POP 02H
DJNZ R2,DELYA
RET
END
要求:学生练习示例观察现象后,读懂延时子程序的延时原理并学会调整延时时间。
学会I/O口控制蜂鸣器。
②、验证程序:通过I/O口控制8位LED小灯。
实验连线:P1口排线连接开关量输出模块L1-L8
实验程序:
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:CLR A
MOV P1,A
MOV R2,#2FH
LCALL DELYA
CPL A
MOV P1,A
MOV R2,#2FH
LCALL DELYA
SJMP MAIN
DELYA: PUSH 02H ;延时子程序
DELYB: PUSH 02H
DELYC: PUSH 02H
DELYD: DJNZ R2,DELYD
POP 02H
DJNZ R2,DELYC
POP 02H
DJNZ R2,DELYB
POP 02H
DJNZ R2,DELYA
RET
END
③、设计任务:用移位控制指令I/O口控制8位LED小灯。
独立编程实现多种形式的跑马灯控制。
④、验证程序:通过I/O口读入K1-K8的状态。
实验连线:P3口排线连接开关量输入模块一的K1=K8。
P1口排线连接开关量输出模块L1-L8.
实验程序示例:
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,P3
MOV P1,A
SJMP MAIN
END
⑤、任务:同上控制方式,验证开关量输入二模块电路。
4、实验报告:完成实验内容。
要写出程序注释、实验结论和实验体会收获。
实验五8155扩展六位并行显示器(设计性实验)
1、实验目的:掌握DICE5212K实验箱通过8155扩展六位LED数码管显示器的原理及其各个口德地址分配,学习验证静态显示与动态显示方式。
了解显示缓冲区及显示子程序在程序设计中的应用。
2、实验原理(显示模块电路原理图):
3、实验内容:
①、验证程序示例:单个LED数码管的显示控制(静态按位手动查表显示)
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#43H
MOV DPTR,#0FF20H
MOVX @DPTR,A
MOV DPTR,#0FF21H
MOV A,#0FEH
MOVX @DPTR,A
MOV A,#0F8H
MOV DPTR,#0FF22H
MOVX @DPTR,A
SJMP $
//data1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
// DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
END
②、验证程序示例:六位LED数码管的显示控制(动态六位自动查表循环显示)
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV A,#43H
MOV DPTR,#0FF20H
MOVX @DPTR,A
MOV 7EH,#02H
MOV 7DH,#00H
MOV 7CH,#00H
MOV 7BH,#09H
MOV 7AH,#00H
MOV 79H,#04H
S0:MOV R0,#7EH
MOV R2,#0DFH
MOV R3,#00H
S:MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A
S1:DJNZ R3,S1
MOV A,#0FFH
MOVX @DPTR,A
DEC R0
SETB C
MOV A,R2
RRC A
MOV R2,A
CPL A
JNZ S
SJMP S0
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
END
③、设计任务:自行编程完成3个字节在六位显示器上显示google(提示:一个字节拆分成为高四位和低四位并分别送显示缓冲区并循环动态显示)。
实验报告:并完成实验报告,写出实验结果及程序注释。
④、验证程序示例:编写子程序完成六位数码管显示扫描功能,同时标注入口参数。
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV 7EH,#2
MOV 7DH,#0
MOV 7CH,#1
MOV 7BH,#4
MOV 7AH,#0
MOV 79H,#9
MOV SP,#53H
MOV A,#43H
MOV DPTR,#0FF20H
MOVX @DPTR,A
LCALL DISP ;占用30h,31h内存单元,每次刷新显示时间:
SJMP MAIN
DISP:SETB RS1
MOV R5,#05H
DISP2:MOV 30H,#20H
MOV 31H,#7EH
MOV R7,#06H
DISP1:MOV A,30H
CPL A
MOV DPTR,#0FF21H
MOVX @DPTR,A
MOV R0,31H
MOV A,@R0
MOV DPTR,#DDFF
MOVC A,@A+DPTR ;取字形代码
MOV DPTR,#0FF22H
MOVX @DPTR,A
MOV A,30H ;右移
RR A
MOV 30H,A
DEC 31H
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
DJNZ R7,DISP1 ;6位显示完了吗?
DJNZ R5,DISP2 ;5次显示完了吗?
CLR RS1
RET
DDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
END
4、实验报告:完成实验内容。
要写出程序注释、实验结论和实验体会收获。
实验六多位BCD码加法(设计性实验)
1、实验目的:通过本次试验,学习BCD码相关知识,掌握51单片机汇编语言指令系统中ADD、ADDC、DA等相关指令的运用,同时掌握汇编语言的程序设计方法。
2、实验原理框图:(4位加法)
清进位标志c
存放被加数高位存R1,低位存R0
存放加数高位存R3,低位存R2
加数与被加数低位相加
结果进行BCD调整后存在R4中
加数与被加数高位带进位相加
结果进行BCD调整后存在R5中
进位调整
3、实验内容:
①、验证程序示例:被加数以BCD码格式存放在R0、R1中,加数也以BCD码格式存放在R2、R3中,和值以BCD码格式存放在R4、R5、R6。
(4位加法)
O RG 0000H
LJMP MAIN
ORG 0080H
MAIN:MOV R0,#88H
MOV R1,#34H
MOV R2,#78H
MOV R3,#96H
MOV A,R0
ADD A,R2
DA A
MOV R4,A
MOV A,R1
ADDC A,R3
DA A
MOV R5,A
MOV R6,#00H
CLR A
ADDC A,R6
MOV R6,A。