📄 sci.asm
字号:
.include "F2407REGS.H" ;引用头部文件
.def _c_int0
.data
SCI_FLAG: .word 1 ;SCI标志寄存器
;TXD_PTR: .word '1','2','3','4'
; .word '5','6','7','8' ;发送的数据存放区
TXD_PTR: .word 55h,55h,55h,55h
.word 55h,55h,55h,55h ;发送的数据存放区
RXD_PTR .word 0,0,0,0,0,0,0,0 ;接收到的数据存放区
.sect ".vectors" ;定义主向量段
RSVECT B _c_int0 ;PM 0 Reset Vector 1
INT1 B GISR1 ;PM 2 Int level 1 4
INT2 B PHANTOM ;PM 4 Int level 2 5
INT3 B PHANTOM ;PM 6 Int level 3 6
INT4 B PHANTOM ;PM 8 Int level 4 7
INT5 B PHANTOM ;PM A 中断优先级 5 8
INT6 B PHANTOM ;PM C Int level 6 9
RESERVED B PHANTOM ;PM E (Analysis Int) 10
SW_INT8 B PHANTOM ;PM 10 User S/W int -
SW_INT9 B PHANTOM ;PM 12 User S/W int -
SW_INT10 B PHANTOM ;PM 14 User S/W int -
SW_INT11 B PHANTOM ;PM 16 User S/W int -
SW_INT12 B PHANTOM ;PM 18 User S/W int -
SW_INT13 B PHANTOM ;PM 1A User S/W int -
SW_INT14 B PHANTOM ;PM 1C User S/W int -
SW_INT15 B PHANTOM ;PM 1E User S/W int -
SW_INT16 B PHANTOM ;PM 20 User S/W int -
TRAP B PHANTOM ;PM 22 Trap vector -
NMI B PHANTOM ;PM 24 Non maskable Int 3
EMU_TRAP B PHANTOM ;PM 26 Emulator Trap 2
SW_INT20 B PHANTOM ;PM 28 User S/W int -
SW_INT21 B PHANTOM ;PM 2A User S/W int -
SW_INT22 B PHANTOM ;PM 2C User S/W int -
SW_INT23 B PHANTOM ;PM 2E User S/W int -
SW_INT24 B PHANTOM ;PM 30 User S/W int -
SW_INT25 B PHANTOM ;PM 32 User S/W int -
SW_INT26 B PHANTOM ;PM 34 User S/W int -
SW_INT27 B PHANTOM ;PM 36 User S/W int -
SW_INT28 B PHANTOM ;PM 38 User S/W int -
SW_INT29 B PHANTOM ;PM 3A User S/W int -
SW_INT30 B PHANTOM ;PM 3C User S/W int -
SW_INT31 B PHANTOM ;PM 3E User S/W int -
.sect ".pvecs" ;定义子向量段
PVECTORS
B PHANTOM ;Reserved pvector addr offset-0000h
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-0005h
B SCI_RX_ISR ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-000ah
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-0010h
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-0015h
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-001Ah
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-0020h
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-0025h
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-0027h T1PINT中断
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-002Ah
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;pvector addr offset 0x02f - T3PINT
B PHANTOM ;Reserved pvector addr offset-0030h
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-0035h
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-003Ah
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset
B PHANTOM ;Reserved pvector addr offset-003Fh
B PHANTOM ;保留向量地址偏移量0040h CAN接收中断
B PHANTOM ;Reserved pvector addr offset-0041h
.text
N .set 1 ;每次发送的数据个数(可根据缓冲大小设置)
_c_int0
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #81FEH, SCSR1 ;CLKIN=10 M, CLKOUT=40 M
SPLK #0E8h, WDCR ;关看门狗
CALL SCI_INIT ;调串口初始化程序
LDP #5H
SPLK #00H, SCI_FLAG ;清发送软件标志位
TXD_LOOP:
;LDP #5H
;BIT SCI_FLAG, BIT0
;BCND TXD_DATA, TC ;SCI_FLAG.0=1则发送数据
;B WAIT
TXD_DATA: ;发送N个数据程序
MAR *, AR0 ;将当前辅助寄存器设置为AR0
LAR AR0, #TXD_PTR ;AR0 = TXD_PTR(发送数据缓冲起始地址)
ADRK #N+1 ;发送N个数据
MAR *, AR4 ;AR4开始等于TXD_PTR
LACC *+ ;读数据: ACC=*(AR4),AR4++
CMPR 00 ;当前辅助寄存器AR4=AR0
BCND TXD_DATA_END, TC ;判数据发送完
MAR *, AR2
SACL *, AR4 ;数据送SCITXBUF寄存器
;将ACC中数据写到当前辅助寄存器所指的存储单元
;并将当前辅助寄存器设置为AR4
;注:AR2固定为 SCITXBUF
XMIT_RDY:
LDP #DP_PF1
BIT SCICTL2, BIT7
BCND XMIT_RDY, NTC ;判发送器是否空?
B TXD_DATA
TXD_DATA_END:
MAR *, AR4
LAR AR4, #TXD_PTR ;恢复发送的数据指针
LDP #5H
SPLK #00H, SCI_FLAG ;清发送软件标志位
WAIT: NOP
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
B TXD_LOOP
SCI_INIT:
LDP #DP_PF2
LACL MCRA
OR #03H
SACL MCRA ;配置串行口引脚为特殊功能: TXD、RXD
LDP #DP_PF1
SPLK #000FH, SCICCR ;地址位唤醒模式, 8位数据,
;1位停止位, 无奇偶校验
SPLK #0007H, SCICTL1 ;接收、发送、内部时钟使能 , SLEEP=1
SPLK #0002H, SCICTL2 ;接收中断使能
SPLK #0003H, SCIHBAUD
SPLK #000dH, SCILBAUD ;波特率为9600
SPLK #0027H, SCICTL1 ;串口初始化完成
LAR AR1, #SCIRXBUF ;接收缓冲寄存器地址
LAR AR2, #SCITXBUF ;发送缓冲寄存器地址
LAR AR3, #RXD_PTR ;接收的数据指针
LAR AR4, #TXD_PTR ;发送的数据指针
LDP #0
SPLK #0001h, IMR ;允许INT1中断
SPLK #0FFFFh, IFR ;清所有中断标志
CLRC INTM ;开总中断
RET
GISR1: ;优先级INT1中断人口
;保护现场
LDP #0E0H
LACC PIVR, 1 ;读取外设中断向量寄存器(PIVR), 并左移一位
ADD #PVECTORS ;加上外设中断人口地址
BACC ;跳到相应的中断服务子程序
SCI_RX_ISR: ;接收中断服务程序
LDP #DP_PF1
MAR *, AR1
BIT SCICTL1, BIT2
BCND RXD_DATA, NTC ;SLEEP=0, 接收数据
LACC * ;读入地址
SUB #031H
BCND TXD_FLAG, EQ ;接收到的地址为'1', 则发送数据
SUB #0001H
BCND SCI_RX_END, NEQ ;地址错误, 退出中断
SPLK #032H, SCICTL1 ;地址为'2', 则清SLEEP=0
;表示准备接收数据
B SCI_RX_END
TXD_FLAG: ;置发送标志
LDP #5H
SPLK #01H, SCI_FLAG
B SCI_RX_END
RXD_DATA: ;接收N个数据
LACC *, AR3 ;读入数据
SACL *+, AR0 ;保存数据
LAR AR0, #RXD_PTR
ADRK #N
MAR *, AR3
CMPR 00
BCND SCI_RX_END, NTC ;判是否接收完
LAR AR3, #RXD_PTR ;恢复接收的数据指针
SPLK #0037H, SCICTL1 ;置SLEEP=1表示准备接收地址
SCI_RX_END: ;中断返回
;恢复现场
CLRC INTM ;开总中断, 因为一进中断就
;自动关闭总中断
RET
DELAY: MAR *, AR4
LAR AR4, #0FFFFH
LAR AR0, #00H
DELAY1: SBRK #1
RPT #0FFH
NOP
RPT #0FFH
NOP
RPT #0FFH
NOP
CMPR 00
BCND DELAY1, NTC
PHANTOM
;KICK_DOG ;复位看门狗
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -