?? h08sci.asm
字號:
*------------------------------------------------------*
*文件描述:本文件包含了串行通信子程序,分別為: *
*(1)SCISend1:串行發(fā)送A中的1個字節(jié) *
*(2)SCISendN:串行發(fā)送N個字節(jié) *
*(3)SCIRe1:串行接收一個字節(jié)->A *
*(4)SCIReN:串行接收N個字節(jié) *
*------------------------------------------------------*
*[寄存器及相關(guān)位定義]
ReSendStatusR EQU SCS1 ;SCI狀態(tài)寄存器1
ReTestBit EQU 5 ;接收緩沖區(qū)滿標(biāo)志位
SendTestBit EQU 7 ;發(fā)送緩沖區(qū)空標(biāo)志位
ReSendDataR EQU SCDR ;SCI數(shù)據(jù)寄存器
*SCISend1:串行發(fā)送A中的1個字節(jié)-------------------------*
*功能描述:串行口發(fā)送A中的1個字節(jié)數(shù)據(jù) *
*入 口:A=待發(fā)送的數(shù)據(jù) *
*出 口:無 *
*堆棧深度:2 *
*------------------------------------------------------*
SCISend1:
BRCLR SendTestBit,ReSendStatusR,SCISend1
STA ReSendDataR
RTS
*SCISendN:串行發(fā)送N個字節(jié)------------------------------*
*功能描述:串行發(fā)送以HX為首地址的N個字節(jié)數(shù)據(jù) *
*入 口:A=字節(jié)個數(shù) HX=首地址 *
*出 口:無 *
*堆棧深度:2+2+1=5 *
*------------------------------------------------------*
SCISendN:
;在堆棧區(qū)開辟1個字節(jié)作臨時變量N
AIS #-!1
;若發(fā)送字節(jié)數(shù)為0,退出
STA !1,SP
CMP #!0
BEQ SCISendN_EXIT
SCISendN_1:
LDA ,X ;從存儲器中取出待發(fā)送的數(shù)據(jù)
JSR SCISend1
AIX #!1
DBNZ !1,SP,SCISendN_1 ;(N-1)不等于0轉(zhuǎn)
SCISendN_EXIT:
;釋放1個字節(jié)臨時變量
AIS #!1
RTS
*SCIRe1:串行接收一個字節(jié)->A----------------------------*
*功能描述:(1) 串行接收1個字節(jié)的數(shù)據(jù)放在A中 *
* (2) 約655350時鐘周期內(nèi)收不到數(shù)返回 *
* 若時鐘周期=0.4us 大約等待2.6S *
*入 口:無 *
*出 口:A=接收的數(shù)據(jù) C=是否收到數(shù)據(jù)標(biāo)志 0收到 1未收到*
*堆棧深度:2+2=4 *
*------------------------------------------------------*
SCIRe1:
PSHH
PSHX
;等待接收一個字節(jié)數(shù)據(jù)
LDHX #$FFFF ;循環(huán)次數(shù)
SCIRe1_1:
BRCLR ReTestBit,ReSendStatusR,SCIRe1_2 ;無數(shù)據(jù),轉(zhuǎn)
LDA ReSendDataR ;收到的數(shù)據(jù)放入A中
CLC ;C=0
BRA SCIRe1_3 ;收到數(shù)據(jù),退出
SCIRe1_2:
NOP
AIX #-$1
CPHX #$0000
BNE SCIRe1_1
;等待時間到,未收到數(shù)據(jù),令c=1,A=FF,返回
LDA #$FF
SEC ;C=1
SCIRe1_3:
PULX
PULH
RTS
*SCIReN:串行接收N個字節(jié)--------------------------------*
*功能描述:串行接收N個字節(jié)放在以HX為首地址的內(nèi)存中 *
*入 口:A=待接收數(shù)據(jù)的字節(jié)數(shù)N,HX=接收數(shù)據(jù)存放的首地址*
*出 口:C=是否收到數(shù)據(jù)標(biāo)志 0收到 1未收到 *
*堆棧深度:2+4+1=7 *
*內(nèi)部調(diào)用:SCIRe1 *
*------------------------------------------------------*
SCIReN:
;在堆棧區(qū)開辟1個字節(jié)作臨時變量
AIS #-!1
;若接受字節(jié)數(shù)為0,退出
STA !1,SP
CMP #!0
BEQ SCIReN_EXIT
SCIReN_1:
JSR SCIRe1 ;調(diào)用接收1個字節(jié)的子程序
BCS SCIReN_EXIT ;C=1未收到數(shù)據(jù),退出
STA ,X ;收到數(shù)據(jù),放入內(nèi)存
AIX #!1 ;HX+1->HX
DBNZ !1,SP,SCIReN_1
SCIReN_EXIT:
;釋放1個字節(jié)臨時變量
AIS #!1
RTS
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -