使用汇编语言实现A口的输出.doc
文本预览下载声明
实验三 使用汇编语言实现A口的输出
一、实验目的
1. 掌握SPCE061A单片机汇编语言的编程方法;
2. 掌握IOA端口作为普通输出口时的使用方法。
二、实验设备
1. 装有Windows系统和μ’nSP? IDE集成开发环境的PC机一台,μ’nSP?十六位单片机实验箱一 个。
2. 本实验用到的实验箱硬件模块为:SPCE061A核心及周边电路模块(包含32个I/O口),发光 二极管电路模块。
三、实验要求
1. 编程要求:编写一个汇编语言程序。
2. 实现功能:通过IOA口输出的数据控制8个发光二极管的点亮与熄灭。
3. 实验现象:8个发光二极管动态点亮和熄灭,并且循环显示,点亮与熄灭状态顺序如下表 1-3所示。其中,“●”表示二极管是点亮状态,“○”表示二极管是熄灭状态。表中D4~D11为实验箱上发光二极管电路模块中从左到右的8个发光二极管。
表 1-3 8个发光二极管状态
四、实验原理
1. I/O口的设置
SPCE061A有32个可编程I/O端口,分为两组:IOA0~15口和IOB0~15口,其中每一个端口都可以被单独设置为输入或者输出口。SPCE061A的I/O口的输入输出方式是通过方向控制向量Dir、属性向量Attrib和数据向量Data三个向量组合控制的。I/O口的组合控制设置如表 1-4所示。
表 1-4 I/O端口的组合控制设置
注:端口位默认为带下拉电阻的输入管脚。
按照上面的组合控制设置,当IOA的低八位设置为同相低电平输出口时,Dir、Attrib和Data三个向量的设置如下表 1-5所示。
表 1-5 IOA的低8位设置为同相低电平输入口
在SPCE061A的I/O口被设置为输出口时,当Data寄存器中的某一位写入“1”时,该位所对应的端口输出高电平;写入“0”时,输出低电平。
2. 发光二极管的点亮与熄灭
如下图 1-21实验箱发光二极管的电路原理图。当IO端输出高电平时,发光二极管导通,即二极管点亮;输出低电平时,发光二极管截止,即二极管熄灭。
【硬件连接】
如图 1-22硬件连接图所示,IOA的低八位IOA0~IOA7分别依次接8个发光二极管D11~D4,即用8pin排线连接实验箱的J26和J16,注意这里的连接顺序为J26的第0号引脚连接J16的第7号引脚,不要接反了。(在以后的描述中如果出现类似“IOA0~IOA7分别依次接8个发光二极管D11~D4”,就说明IOA0接发光二极管D11;如果没有特别说明,就是正常的连接方式,即J26的第0号引针接J16的第0号引针;在连接过程中敬请读者注意。另外,本书上出现的所有的标号类似J26、J16等都是基于最新版本V3.0版本的实验箱,如果读者用的是其他版本的实验箱,以电路连接图为准。)
【程序流程图】
根据实验要求8个发光二极管的显示状态,程序的主循环当中,输出到IOA口低八位的数据每次输出显示后要加1;输出显示的数据可用变量保存,也可在程序运行当中通过读取P_IOA_Buffer(0x7001)寄存器得到上次输出数值。主程序流程图如图 1-23所示:
注意:①为了避免因为延时时间长导致看门狗复位,延时子程序里需要清看门狗操作。
②选择合适的延时时间,本实验中选择大约0.2s的延时。因为当延时时间太短时,8个发光二极管的状态变化太快,还没来及看一个状态,就已经变化到下一个状态,不便观察;而当延时时间太长时,发光二极管停留在一个状态很长时间,也不便于观察8个发光二极管的状态变化,所以要选择合适的延时时间。
五、实验步骤
1. 按照流程图编写一个汇编语言程序。
2. 利用和前面实验相同的方法Rebuild All。
3. 如图 1-24所示,①区的S19选择开关中ICE拨到“ON”位置,其他都拨到“OFF”位置。②区和③区中JP4和JP7的跳线全部断开,⑤区J16和J26按照图 1-22所示利用8pin排线连接,即把IOA0~7依次连接8个发光二极管D11~D4,⑦区中J10接Probe。把所有排线、跳线和开关都连接好之后,打开⑥区电源开关POWER。
图 1-24 实验箱硬件连接和其他设置
4. 在IDE环境中选择在线调试图标,注意Body选择和实验一相同。
5. 下载、运行,观察图 1-24 ④区发光二极管D4~D11的变化,检查与实验要求是否统一。
【实验程序】
.INCLUDE SPCE061A.inc; // 包括hardware.inc 文件
.RAM
.VAR R_LedCounter; //定义变量
.VAR R_DelayCounter;
.CODE
.public _main; //对_main程序声
显示全部