📄 io.asm
字号:
.title "io" ;title伪指令。双引号括起来的源程序名。伪指令小写。
.global _c_int00 ;global伪指令,将变量_c_int00说明为外部符号。
.mmregs ;将TMS320各寄存器名定义为全局符号,这样就可以直接引用寄存器(符号)。
;mmregs 定义存储器映射寄存器的符号名称。
FG_ADDR .set 1002H ;set伪指令。将一个值分配给一个符号。1002H I/O口地址定义。
DATA .set 60h ;double ram data, 其地址设为0060H
.sect ".vectors" ;sect定义初始化命名段。段名必须用双引号括起,建立包含代码和数据的自定义断。
;".vectors"定义向量表,紧跟其后的是复位向量和中断向量。
reset: B _c_int00 ; B 无条件跳转指令。将变量_c_int00说明为外部变量,程序入口地址1000。
NOP ;空指令。等待一个机器周期。
NOP
.space 31*4*16 ;space 伪指令。在当前段内保留一个指定数目的位数,并用0填充, 保留31*4个字单元。
DELAY .macro sec_tenth ;macro 宏指令开始。DELAY宏名。sec_tenth形式参数。延时 sec_tenth/10 秒
STM sec_tenth-1,AR5 ;STM存储指令。AR0~AR7 寄存器辅助。
loop1? STM #09h,AR6 ; should use STM, instead of ST, or LD and so
loop0? STM #19999,AR7 ;STM存储指令。AR0~AR7 辅助寄存器。
BANZ $,*AR7-
BANZ loop0?,*AR6- ;AR6-不为0时 转移。
BANZ loop1?,*AR5-
.endm ;Endm 宏指令结束。
.text ;text 段是源程序正文。经汇编后,紧跟.text 后的是可执行程序代码。
_c_int00: ;
LD #0h,DP ;LD装入指令。设置数据页指针,DP=0H,则数据存储器地址为0000H~007FH。
STM #3000h,SP ;STM存储指令。把累加器的低端存放到存储器映射寄存器中。SP设置堆栈指针
RSBX INTM ;RSBX清除指令。INTM中断方式位=0,允许可屏蔽中断。INTM中断方式位=1,禁止可屏蔽中断。
STM #07FFFh,SWWSR ;SWWSR可编程软件等待状态寄存器。作用:高速内存与慢速外设的协调连接,提供一个方便的接口。
SSBX XF ;SSBX置位指令。XF外部标志输出引脚=1,主要用于程序向外设传输标志信息.
ST #1007h,CLKMD ;ST存储指令。16bit长立即数。工作在20MHz
RPT #0FFh ;RPT循环指令。把循环次数0FFH装入循环计数器(RC)。
NOP
STM #0ffffh,IFR ;IFR中断标志寄存器。把IFR每位写1的用途,就是清除所有被挂起的中断。
ORM #000h,IMR ;IMR中断屏蔽寄存器。把IMR每位置0屏蔽该中断。
RSBX SXM ;RSBX清零指令。SXMS是状态寄存器ST1中第8位,当SXM=0,不扩展符号;当SXM=1,扩展符号。
ST #8100H,DATA ;DATA = #8100H,
WRDENG: PORTW DATA,FG_ADDR ;PORTW输出指令(端口写)。64K的I/O存储空间它都在片外,通过PORTW对I/O空间寻址。
DELAY #10 ;给出sec_tenth形式参数
NOP
ST #4200H,DATA ; ST存储指令。16bit长立即数。4200H=0100 0010 0000 0000b.
; DATA 的高8位的值对应发光管,从左到右。1-亮,0-灭
PORTW DATA,FG_ADDR ; PORTW端口写.写到口地址1002H。
DELAY #10
ST #2400H,DATA ; 2400H=0010 0100 0000 0000b
PORTW DATA,FG_ADDR ; 宏指令:简化汇编语言源程序的书写,将一些频繁出现的程序段定义为宏指令,
DELAY #10 ; 当程序中需要执行该程序段时,只需要一条宏调用语句,DELAY。
; 宏指令:有效缩短源程序的长度,易读,减少错误。
ST #1800H,DATA ;1800H=0001 1000 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
ST #1800H,DATA ;1800H=0001 1000 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #2400H,DATA ;2400H=0010 0100 0000 0000b
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #4200H,DATA ; 4200H=0100 0010 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #8100H,DATA ; 8100H=1000 0001 0000 0000b
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
STM #00H,DATA ;8个灯全灭1秒
;;;
PORTW DATA,FG_ADDR
DELAY #10
NOP
ST #100H,DATA ;0100H=0000 0001 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
ST #200H,DATA ; 0200H=0000 0010 0000 0000b
PORTW DATA,FG_ADDR
DELAY #10
ST #400H,DATA ;0400H=0000 0100 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
ST #800H,DATA ;0800H=0000 1000 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #1000H,DATA ;1000H=0001 0000 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #2000H,DATA ;2000h=0010 0000 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #4000H,DATA ;4000H=0100 0000 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
STM #8000H,DATA ;8000H=1000 0000 0000 0000b.
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
;;;
ST #8000H,DATA
PORTW DATA,FG_ADDR
DELAY #10
ST #4000H,DATA
PORTW DATA,FG_ADDR
DELAY #10
ST #2000H,DATA
PORTW DATA,FG_ADDR
DELAY #10
ST #1000H,DATA
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #800H,DATA
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #400H,DATA
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #200H,DATA
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
STM #100H,DATA
PORTW DATA,FG_ADDR
DELAY #10
RPT #10
NOP
ST #8100H,DATA
B WRDENG ;B无条件跳转指令。
aaa nop
b aaa
.end ;汇编语言结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -