📄 h08sci.asm
字号:
*------------------------------------------------------*
*文件描述:本文件包含了串行通信子程序,分别为: *
*(1)SCISend1:串行发送A中的1个字节 *
*(2)SCISendN:串行发送N个字节 *
*(3)SCIRe1:串行接收一个字节->A *
*(4)SCIReN:串行接收N个字节 *
*------------------------------------------------------*
*[寄存器及相关位定义]
ReSendStatusR EQU SCS1 ;SCI状态寄存器1
ReTestBit EQU 5 ;接收缓冲区满标志位
SendTestBit EQU 7 ;发送缓冲区空标志位
ReSendDataR EQU SCDR ;SCI数据寄存器
*SCISend1:串行发送A中的1个字节-------------------------*
*功能描述:串行口发送A中的1个字节数据 *
*入 口:A=待发送的数据 *
*出 口:无 *
*堆栈深度:2 *
*------------------------------------------------------*
SCISend1:
BRCLR SendTestBit,ReSendStatusR,SCISend1
STA ReSendDataR
RTS
*SCISendN:串行发送N个字节------------------------------*
*功能描述:串行发送以HX为首地址的N个字节数据 *
*入 口:A=字节个数 HX=首地址 *
*出 口:无 *
*堆栈深度:2+2+1=5 *
*------------------------------------------------------*
SCISendN:
;在堆栈区开辟1个字节作临时变量N
AIS #-!1
;若发送字节数为0,退出
STA !1,SP
CMP #!0
BEQ SCISendN_EXIT
SCISendN_1:
LDA ,X ;从存储器中取出待发送的数据
JSR SCISend1
AIX #!1
DBNZ !1,SP,SCISendN_1 ;(N-1)不等于0转
SCISendN_EXIT:
;释放1个字节临时变量
AIS #!1
RTS
*SCIRe1:串行接收一个字节->A----------------------------*
*功能描述:(1) 串行接收1个字节的数据放在A中 *
* (2) 约655350时钟周期内收不到数返回 *
* 若时钟周期=0.4us 大约等待2.6S *
*入 口:无 *
*出 口:A=接收的数据 C=是否收到数据标志 0收到 1未收到*
*堆栈深度:2+2=4 *
*------------------------------------------------------*
SCIRe1:
PSHH
PSHX
;等待接收一个字节数据
LDHX #$FFFF ;循环次数
SCIRe1_1:
BRCLR ReTestBit,ReSendStatusR,SCIRe1_2 ;无数据,转
LDA ReSendDataR ;收到的数据放入A中
CLC ;C=0
BRA SCIRe1_3 ;收到数据,退出
SCIRe1_2:
NOP
AIX #-$1
CPHX #$0000
BNE SCIRe1_1
;等待时间到,未收到数据,令c=1,A=FF,返回
LDA #$FF
SEC ;C=1
SCIRe1_3:
PULX
PULH
RTS
*SCIReN:串行接收N个字节--------------------------------*
*功能描述:串行接收N个字节放在以HX为首地址的内存中 *
*入 口:A=待接收数据的字节数N,HX=接收数据存放的首地址*
*出 口:C=是否收到数据标志 0收到 1未收到 *
*堆栈深度:2+4+1=7 *
*内部调用:SCIRe1 *
*------------------------------------------------------*
SCIReN:
;在堆栈区开辟1个字节作临时变量
AIS #-!1
;若接受字节数为0,退出
STA !1,SP
CMP #!0
BEQ SCIReN_EXIT
SCIReN_1:
JSR SCIRe1 ;调用接收1个字节的子程序
BCS SCIReN_EXIT ;C=1未收到数据,退出
STA ,X ;收到数据,放入内存
AIX #!1 ;HX+1->HX
DBNZ !1,SP,SCIReN_1
SCIReN_EXIT:
;释放1个字节临时变量
AIS #!1
RTS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -