jtd.asm
来自「用dsp编写的四个程序,关于数组,还有语音,录音功能的实现」· 汇编 代码 · 共 90 行
ASM
90 行
.title "jtd"
.global _c_int00 ;将变量_c_int00说明为外部符号,程序入口地址1000。
.mmregs ;将TMS320各寄存器名定义为全局符号,这样就可以直接引用寄存器(符号)。
LED_ADDR .set 1001h ;交通灯的I/O地址
STATUS0 .set 60h ;0AA00H全部红灯: 05500H全部绿灯:0FF00H全部黄灯
STATUS1 .set 61h ;南北红灯、东西绿灯
STATUS2 .set 62h ;南北红灯、东西黄灯
STATUS3 .set 63h ;南北绿灯、东西红灯
STATUS4 .set 64h ;南北黄灯、东西红灯
STA2_PRE_0 .set 65h ;块重复放入状态0
STA2_PRE_1 .set 66h ;块重复放入状态1
STA4_PRE_0 .set 67h ;块重复放入状态0
STA4_PRE_1 .set 68h ;块重复放入状态1
DELAY .macro sec_tenth ;延时 sec_tenth/10 秒
STM sec_tenth-1,AR5
loop1? STM #09h,AR6
loop0? STM #19999,AR7
BANZ $,*AR7-
BANZ loop0?,*AR6-
BANZ loop1?,*AR5-
.endm ;Endm 宏指令结束。
.sect ".vectors"
reset: B _c_int00
NOP
NOP
.space 4*127 ; 在目前段中,保留4*127个单元
.text ;text 段是源程序正文。经汇编后,紧跟.text 后的是可执行程序代码。
_c_int00
LD #0h,DP ;LD装入指令。设置数据页指针,DP=0H,则数据存储器地址为0000H~007FH。
STM #3000h,SP;STM存储指令。SP设置堆栈指针,把累加器的低端存放到存储器映射寄存器中。
SSBX INTM ;指令SSBX INTM(置1)。禁止可屏蔽中段。
SSBX SXM ;指令SSBX SXM(置1)。SXM是状态寄存器ST1中第8位,当SXM=0,不扩展符号;当SXM=1,扩展符号。
STM #07FFFh,SWWSR ;IO总线外部等待时间7个周期
STM #0h,CLKMD ; can see CLKMD, work, 0058H
tst: BITF CLKMD,#1h ;BITF测试指令,测试立即数最后位。
BC tst,TC ;BC条件转移指令, TC是ST0中的测试/控制标志位。测试位等于1,TC=1
STM #1007h,CLKMD ;CLKMD时钟模式寄存器。采用1倍频方式,20MHz工作
;RPT #0FFh
;NOP
STM #0FFFFh,IFR ;IFR中断标志寄存器。把IFR每位写1的用途,就是清除所有被挂起的中断。
;LDM IFR, A ; the above code doesn't work, Can't change IFR
ORM #000h,IMR ;IMR中断屏蔽寄存器。把IMR每位置0屏蔽该中断,置1表示允许中断。
ST #0AA00H,STATUS0 ;1010 1010 0000 0000b.有1的位(高电平)显示红色。
LOOPB PORTW STATUS0,LED_ADDR ;全部红灯
DELAY #100 ;延时1秒
circle ST #6600H,STATUS1 ;0110 0110 0000 0000b。
PORTW STATUS1,LED_ADDR ;南北红灯、东西绿灯
DELAY #200 ;延时?秒
STM #2h,BRC ;BRC块循环计数器赋值2H。
RPTB flash1 ;RPTE块重复。将重复操作的范围扩大到任意长度的循环回路。
ST #2200H,STA2_PRE_1 ;0010 0010 0000 0000b。
PORTW STA2_PRE_1,LED_ADDR ;南北红灯、东西灯灭
DELAY #30
ST #6600H, STA2_PRE_0 ;0110 0110 0000 0000b。
PORTW STA2_PRE_0,LED_ADDR ;南北红灯、东西绿灯
DELAY #30
flash1 NOP ;flash1块作用:;南北红灯、东西绿灯亮灭3次。
ST #0EE00H, STATUS2 ;1110 1110 0000 0000b。
PORTW STATUS2,LED_ADDR ;南北红灯、东西黄灯
DELAY #30 ;延时3秒
ST #9900H,STATUS3 ;1001 1001 0000 0000b。
PORTW STATUS3,LED_ADDR ;南北绿灯、东西红灯
DELAY #200 ;延时20秒
STM #4h,BRC ;BRC块循环计数器。
RPTB flash2 ;RPTE块重复。
ST #08800H,STA4_PRE_1 ;1000 1000 0000 0000b。
PORTW STA4_PRE_1,LED_ADDR ;南北灯全灭、东西红灯
DELAY #30
ST #09900H, STA4_PRE_0 ;1001 1001 0000 0000b。
PORTW STA4_PRE_0,LED_ADDR ;南北绿灯、东西红灯
DELAY #30
flash2 NOP ;flash1块作用:;东西红灯、南北绿灯亮灭5次
ST #0BB00H,STATUS4 ;1011 1011 0000 0000b。
PORTW STATUS4,LED_ADDR ;南北黄灯、东西红灯
DELAY #30 ;延时3秒
B circle ; B 无条件跳转指令。
.end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?