计算机硬件基础实验报告2汇编语言程序结构汇编语言程序设计Word文档格式.docx
《计算机硬件基础实验报告2汇编语言程序结构汇编语言程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机硬件基础实验报告2汇编语言程序结构汇编语言程序设计Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
程序清单如下:
#include"
msp430.h"
NAMEmain
PUBLICmain
ORG0FFFEh
DC16init
RSEGDATA16_C
LEDtab1:
DB0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,07Fh
LEDtab2:
DB07Eh,0BDh,0DBh,0E7h
RSEGCSTACK
RSEGCODE
init:
MOV#SFE(CSTACK),SP
main:
NOP
MOV.W#WDTPW+WDTHOLD,&
WDTCTL
MOV.b#0h,&
P2SEL
MOV.b#0FFh,&
P2OUT
P2DIR
start:
MOV#8,R4
MOV#4,R5
MOV#0,R6
num1:
MOV.bLEDtab1(R6),&
CALL#delay
INCR6
DECR4
JNZnum1
num2:
MOV.bLEDtab2(R4),&
INCR4
DECR5
JNZnum2
JMPstart
delay:
MOV#0FFFFh,R7
ww:
DECR7
JNZww
RET
END
思考:
如果选择用单片机的P4端口控制8个发光二极管,如何在实验板上设计连线?
如何编程实现任务2的功能?
把P4的8个接口分别与二极管的8个接口用跳线连接,程序中把P2XXX换成P4XXX。
3.用按键控制发光二极管的显示变化
在任务2基础上,增加2个按键与单片机的引脚相连,编程实现由按键控制发光二级管的显示变化:
当按下实验板上的Key1键时,8个发光二极管按任务2中的规律1反复变化,当按下实验板上的Key2键时,8个发光二极管按任务2中的规律2反复变化。
DB0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,07Fh
DB07Eh,0BDh,0DBh,0E7h
BIC.b#BIT0+BIT1,&
P1SEL
P1DIR
MOV#0,R8
MOV#8,R4
MOV#0,R6
k1:
BIT.b#BIT0,&
P1IN
JNZk2
MOV.b#1,R8
JMPkk1
k2:
BIT.b#BIT1,&
JNZkk1
MOV.b#2,R8
JMPkk2
kk1:
CMP.b#1,R8
JNZkk2
DECR4
JMPstart
kk2:
CMP.b#2,R8
JNZk1
MOV.bLEDtab2(R6),&
DECR5
MOV#0FFFFh,R7
END
1)程序开头的ORG0xFFFE和DC16init这两条语句的作用是什么?
在这两条语句的行首加注释符“;
”(相当于删除了这两条语句),即这两条语句不起作用,操作EW430左上角的reset,重新执行程序,出现什么后果,为什么?
因为EW430上电复位后从0xFFFE~0xFFFF上取第一条指令的地址,所以这两条语句是把init的地址1100h放在0xFFFE~0xFFFF上。
注释掉这两条语句后,重新执行程序,出现“Usererror:
Illegalopcodefoundonaddress0x0”
因为注释掉后,EW430从0xFFFE~0xFFFF上取第一条指令的地址“0x0”开始执行,而0x0上没有命令,所以出错了。
2)如果选择用单片机的P5端口接收2个按键的输入信号,如何在实验板上设计连线?
如何编程实现任务3中的功能?
把实验板上的Key1、2键和P5.0,P5.1用跳线连接,再把P1XXX换成P5XXX。
三、已完成的选做任务
4.(选做,可在simulator下完成)了解.xcl配置文件的作用
在任务1的基础上,打开lnk430F149.xcl配置文件,了解EW430系统设置的DATA16_I,DATA16_Z,DATA16_N,CSTACK,DATA16_ID,DATA16_C,CODE等段的定义及其属性,请记录各符号段对应的存储器地址。
段名
DATA16_I
DATA16_Z
DATA16_N
CSTACK
DATA16_ID
DATA16_C
CODE
起始地址
0200h
09B0h
1100h
末地址
09FFh
0A00h
FFDFh
回答:
在L4_directives.s43中,DATA16_C、DATA16_N、CSTACK、CODE各段的首、末地址分别是多少?
1122h
1120h
0207h
1157h
5.(选做,可在simulator下完成)了解汇编程序、连接程序功能
四、实验的思考
实验中任务3中编写的程序无法做到实时监控按键的信息,这需要学习了中断技术后才能做成功。
实验5.汇编语言程序设计
一.实验目的
1.掌握编写和调试汇编语言程序的方法;
2.掌握模块化汇编语言程序设计方法
3.了解简单电路的控制方法
二.实验任务
1.简单电子表的设计用8个发光二极管以秒为单位显示时间值,按下面步骤完成一个简单电子表的设计:
1)硬件连线:
用跳线将L6~L1分别与P2.5~P2.0连接,L6~L1用于显示秒值;
用双口长线将L7与P5.0连接,L8与P5.1连接,L8~L7用于显示分钟值;
蜂鸣器的控制端Buzz与P4.1连接;
2)编写延时子程,延时时间长度约1秒。
可参考附录A例程test_asm.s43中的delay子程,将其中的#10改为#4;
#4000h改为#0FFFFh,执行该delay子程的时间约为1秒。
(执行延时子程的时间可以通过设置1个I/O引脚(如P2.0)输出0,delay延时,再输出1,delay延时,如此循环可在该引脚输出一个方波,用示波器测量该方波周T,可以粗略得到延时子程的执行时间Tdelay=T/2。
)
3)编写完整程序:
计数秒值,用8个发光二极管以二进制将时间显示出来,如图5-1,其中高两位显示分钟值(L8、L7),低6位显示秒值(L6~L1),每60秒,分钟值加1,如图5-1,黑色表示亮,则显示的时间表示表示3分27秒。
每计数到4分钟时,控制蜂鸣器发出一报警声,然后又从0开始重新计数。
NAMEmain
PUBLICmain
DC16init
RSEGCSTACK
RSEGCODE
MOV#SFE(CSTACK),SP
NOP
MOV.W#WDTPW+WDTHOLD,&
WDTCTL
BIC.b#BIT0+BIT1+BIT2+BIT3+BIT4+BIT5,&
BIS.b#BIT0+BIT1+BIT2+BIT3+BIT4+BIT5,&
BIC.b#BIT0+BIT1,&
P5SEL
BIS.b#BIT0+BIT1,&
P5OUT
P5DIR
BIC.b#BIT1,&
P4SEL
BIS.b#BIT1,&
P4OUT
P4DIR
MOV#0,R4
MOV#3,R5
next:
MOV#0,R6
MOV#60,R7
then:
INVR6
MOV.bR6,&
INCR6
DECR7
JNZthen
BIC.bR4,&
DECR5
JNZnext
BIC.b#BIT1,P4OUT
BIS.b#BIT1,P4OUT
MOV#4,R8
wait1:
MOV#0FFFFh,R9
wait2:
DECR9
JNZwait2
DECR8
JNZwait1
END
2.数码管的显示控制
请根据上面的工作原理描述,编程实现对数码管的控制:
编程控制数码管顺序显示0~9和A、b、C、d、E、F,已知它们对应的数码管显示码分别为3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h、7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h。
LEDtab:
DB3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h
BIC.b#BIT1+BIT2+BIT3+BIT4,&
P6SEL
P6OUT
BIS.b#BIT1+BIT2+BIT3+BIT4,&
P6DIR
MOV#10h,R4
MOV#0,R5
MOV#8,R6
MOV.bLEDtab(R5),R7
CALL#then
INCR5
JNZnext
RLC.bR7
JCww1
BIC.b#BIT4,&
JMPww2
ww1:
BIS.b#BIT4,&
P6OUT
ww2:
BIC.b#BIT2,&
BIS.b#BIT2,&
DECR6
BIC.b#BIT3,&
BIS.b#BIT3,P6OUT
RET
DECR9
如果数码管电路的控制端DS、SHCP、STCP、#MR分别与单片机的P4.3~P4.0相连,如何修改程序?
请用长导线在实验板上完成。
把P6XXX换成P4XXX。
实验板上用跳线把对应的相连接。
1.(选做)增加按键控制功能:
当按下KEY2键时清零;
按下KEY3键时开始(或称继续)计时;
按下KEY4键时暂停计时。
NAMEmain
BIC.b#BIT0,&
BIS.b#BIT0,&
BIC.b#BIT1+BIT2+BIT3,&
P3SEL
P3DIR
MOV.b#0FFh,R9
MOV#0,R4
MOV#4,R5
test1:
BIT.b#BIT1,&
JZww1
BIT.b#BIT2,&
JZww2
BIT.b#BIT3,&
JZww3
BIT#0FBh,R9
JNZtest1
JMPtest2
CMP.b#0FFh,R9
JCtest1
MOV.b#BIT1,R9
MOV.b#BIT2,R9
ww3:
MOV.b#BIT3,R9
test2:
BIT#0FDh,R9
JZzero2
BIT#0FBh,R9
JZzero1
JMPtest1
zero1:
TST.bR6
JNZthen
zero2:
INVR6
BIT#0FDh,R9
JZss
MOV#0FFFFh,R10
DECR10
ss:
JMPtest1
如果硬件连线是将发光二极管LED8~LED1分别与P2.7~P2.0连接,按键Key4~Key2分别与P1.4~P1.2连接,蜂鸣器BUZZ与P6.5连接的话,实验板上连线,如何编程实现任务1?
把程序中的P5XXX换成P2XXX。
源程序中Key4~Key2对应P1.3~P1.1,只需相应的修改一下即可。
同理,把P4XXX换成P6XXX。
2.(选做)编程当分别按下KEY8~KEY1键时,在数码管上分别显示8~1,比如按下键KEY8,数码管上显示“8”;
按下键KEY2,数码管上显示“2”等。
DB06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh
MOV.b#0,&
MOV#8,R9
MOV.b&
P1IN,R7
RRA.bR7
JNCnext
JNZtest2
BIT#8,R5
MOV.bLEDtab(R5),R8
RLC.bR8
RET
3.(选做,可在simulator下完成)带初始化变量的实现(数据传送程序)
问题的提出:
初始化的变量和未初始化变量的不同在于,在执行程序前,初始化的变量中有设置好的初值,而未初始化的变量没有设置好的初值。
由于MCU内部没有操作系统,上电复位后即开始执行用户程序,存放在RAM区中的变量的值都是随机的,不能保存如何完成带初始值的变量设置呢?
编程实现:
在汇编语言程序中设置一个带初始化的字符串,字符串的初始值为“HelloMSP430”。
string:
DB"
HELLOMSP430"
RSEGDATA16_I
buffer:
DS12
MOV#0Bh,R4
MOV.bstring(R5),buffer(R5)
JNZstart
JMP$