📄 led.asm
字号:
IOSFT_REG .usect ".data0",1 ;要显示的数据寄存器
.include "F2407REGS.H" ;引用头部文件
.def _c_int0
.text
_c_int0: ;相当于主程序的入口
CALL SYSINIT ;调系统初始化程序
LDP #DP_PF2 ;指向7080h~7100h区
LACL MCRA
AND #000FFH ;IOPB口配置为一般I/O功能
SACL MCRA
LACL MCRA
AND #0FF00H ;IOPA 配置为一般I/O功能
SACL MCRA
LACL PBDATDIR
OR #0FF00H ;IOPB口设置为输出方式
SACL PBDATDIR
LACL PADATDIR
OR #0FF00H
SACL PADATDIR ;IOPA 设置为输出方式
LDP #5H ;指向0280h~0300h区
SPLK #80H,IOSFT_REG ;给显示的数据赋初值
LOOP: LDP #DP_PF2
LACL PADATDIR
AND #0FFC7H ;138 select ch0,ledclk==1
SACL PADATDIR ;开74HC273片选信号
LDP #5H
LACL IOSFT_REG
LDP #DP_PF2
OR #0FF00H
SACL PBDATDIR ;送要显示的数据到IOPB口
LACL PADATDIR
OR #0038H ;138 select ch7,ledclk=0
SACL PADATDIR ;关74HC273片选信号
CALL DELAY ;调延时程序
LDP #5H
LACL IOSFT_REG
BIT IOSFT_REG,BIT0 ;判是否循环完一次,即已点亮第8个发光二极管
ROR ;左移一位
SACL IOSFT_REG
BCND LOOP1,TC
B WAIT
LOOP1: LDP #5H
SPLK #80H,IOSFT_REG ;如循环完一次则显示数据赋初值
WAIT: NOP
B LOOP
;(2) 系统初始化程序
SYSINIT:
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF ;B0 被配置为数据存储空间
LDP #0E0H
SPLK #81FEH,SCSR1 ;CLKIN=6 M,CLKOUT=24 M
SPLK #0E8H,WDCR ;不使能WDT
LDP #0
SPLK #0000H,IMR ;不使能
SPLK #0FFFFH,IFR ;清全部中断标志
RET
;(3) 软件延时程序
DELAY:
MAR *,AR4
LAR AR4,#0FFFEH
LAR AR0,#00H
DELAY1: SBRK #1
NOP
CMPR 00
BCND DELAY1,NTC
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -