3
第6章 DSP应用技术实训
7) 思考题
修改参考程序, 实现所给的一组数的连乘, 并将结果送数码
管显示。
参考程序如下。
汇编语言程序:
.title "mac.asm"
.mmregs
.def start
SIZE .set 100
stack .usect "STK", SIZE
第6章 DSP应用技术实训
SEGSEL .set 0001b ;数码管使能控制数据, 此处为第0个数码管选通
SEGSELPORT .set 0h ;数码管使能控制口地址
SEGPORT .set 1h ;数码管数据口地址
.bss SEG_DATA,10 ;用于存放从SEG_VALUE装载进来的数码管编码数据
.bss x,5 ;用于存放从table0装载进来的输入数据
.bss z,1 ;用于存放输出数据(计算结果)
.data
table0: .word 1,2,3,4,5 ;待计算的一组输入数据
;以下用于存放数码管编码数据,分别控制数码管显示0~9
第6章 DSP应用技术实训
SEG_VALUE .word 077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6H
.text
start:stm #stack+SIZE, SP
;;;;;;;;;C5402 初始化;;;;;;;;;;;;;;;
stm #2b40h,ST1;STM #2B40H,ST1;
stm #1e00h,ST0;
stm #02024h,PMST ;IPTR=0010,0000,0 ->RESET=2000H
stm #0h,SWWSR
stm #04007h,CLKMD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
stm #SEG_DATA, AR3
;将数码管编码数据从SEG_VALUE装入SEG_DATA
第6章 DSP应用技术实训
rpt #9
mvpd SEG_VALUE, *AR3+
stm #x,AR1 ;从空间table0装载输入数据进入空间x
rpt #4
mvpd table0,*AR1+
call sum ;调用累加子程序
ld #SEGSEL,B ;第0个数码管选通
portw *(0bH), SEGSELPORT
stlm A,AR0 ;累加子程序返回的计算结果转入AR0
stm #SEG_DATA,AR7 ;数码管编码数据区首地址送AR7
nop
mar *AR7+0 ;首地址(AR7中的内容)+偏移地址(AR0中的内容)
nop
portw *AR7,SEGPORT ;让数码管显示计算结果
第6章 DSP应用技术实训
end: b end
sum: stm #x,AR3 ;累加子程序
rptz A,#4
add *AR3, A
stm #z,AR4
stl A,*AR4
ret
.end
链接命令文件(.cmd文件):
mac.obj
-o mac.out
-m mac.map
-e start
MEMORY
{
第6章 DSP应用技术实训
PAGE 0:
EPROM :org=02000h,len=200h
PAGE 1:
SPRAM :org=0060h,len=001fh
DARAM :org=0080h,len=100h
}
SECTIONS
{
.text :>EPROM PAGE 0
.data :>EPROM PAGE 0
.bss :>SPRAM PAGE 1
.stack :>DARAM PAGE 1
}
评论0
最新资源