📄 gpio.asm
字号:
;*******************************************************
; File Name:GPIO.asm
;*******************************************************
.title "GPIO"
.include LF2407.inc
.include CPU.inc
.include GPIO.inc
;*******************************************************
TxdPtr: .usect "data", 8
RxdPtr: .usect "data", 8
.data
counterValue .byte 1
;*******************************************************
.def _c_int0
.ref Pvect
;*******************************************************
; 主程序开始
.text
_c_int0:
call fSysInit
ldp #00E1h
splk #MCRAV, MCRA
splk #MCRBV, MCRB
splk #7f01h, PADATDIR
splk #0808h, PBDATDIR
; call fSciInit
Main:
ldp #0000h
LoopMain:
; call fSendChar
; mar *, AR0
; lar AR0, #TxdPtr
; adrk #5
; mar *, AR4
; lacc *+
; cmpr 00
; bcnd Main, TC
; mar *, AR2
; sacl *, AR4
ldp #00e1h
call fDelay
lacc PADATDIR
and #0ff81h
or #step1
sacl PADATDIR
; splk #STEP1, PADATDIR
call fDelay
lacc PADATDIR
and #0ff81h
or #step2
sacl PADATDIR
; splk #STEP2, PADATDIR
call fDelay
lacc PADATDIR
and #0ff81h
or #step3
sacl PADATDIR
; splk #STEP3, PADATDIR
call fDelay
lacc PADATDIR
and #0ff81h
or #step4
sacl PADATDIR
; splk #STEP4, PADATDIR
b LoopMain
;*******************************************************
fSendChar:
; 发送一个字符
mar AR2
lacc #'b'
sacl * ; 发送数据到SCITXBUF寄存器
LoopSendChar:
ldp #DP_PF1
bit SCICTL2, BIT7
bcnd LoopSendChar, NTC
ret
;*******************************************************
; 系统初始化程序
fSysInit:
setc INTM ; 初始化期间禁止中断
clrc SXM ; 清符号扩展模式
clrc OVM ; 溢出模式复位
clrc CNF ; 配置B0块到数据存储区
ldp #00e0h ; 设置DP=E0H,则数据存储器地址为7000H~707FH
splk #0041h, SCSR1 ; CLKOUT=CLKIN*4
splk #00e8h, WDCR ; 不使能WDT
ldp #0
splk #0000h, IMR ; 不使能中断
splk #0ffffh, IFR ; 清除全部中断标志
ret
;*******************************************************
; SCI接口初始化程序
fSciInit:
ldp #0e1h
lacl MCRB
or #18h
sacl MCRB ; 配置串行口引脚为特殊功能:TXD、RXD
ldp #DP_PF1
splk #00fh, SCICCR ; 地址位唤醒模式,N,8,1
splk #007h, SCICTL1 ; 接收、发送、内部时钟使能,SLEEP=1
splk #002h, SCICTL2 ; 接收中断使能
splk #(BRR/256), SCIHBAUD
splk #(BRR & 0ffh), SCILBAUD ; 设置波特率寄存器
splk #023h, SCICTL1 ; 串口初始化完成
lar ar1, #SCIRXBUF ; 接收缓冲寄存器地址
lar ar2, #SCITXBUF ; 发送缓冲寄存器地址
lar ar3, #RxdPtr ; 接收的数据指针
lar ar4, #TxdPtr ; 发送的数据指针
ldp #0
splk #0001h, IMR ; 允许INT1中断
splk #0ffffh, IFR ; 清所有中断标志
clrc INTM ; 开总中断
ret
;*******************************************************
GIsr1:
; 优先级INT1中断入口
ldp #0e0h
lacc PIVR, 1 ; 读取外设中断向量寄存器,并左移一位
add #Pvect ; 加上外设中断入口地址
bacc ; 跳到相应的中断服务子程序
RxIsr:
; SCI接收中断服务程序
ldp #DP_PF1
mar *, AR1
bit SCICTL1, BIT2
ret
;*******************************************************
; 延时程序
fDelay:
mar *, ar4
lar ar4, #02ffeh
lar ar0, #00h
LoopDelay:
sbrk #1
nop
cmpr 00
bcnd LoopDelay, ntc
ret
;*******************************************************
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -