📄 com.src
字号:
;H8/Tiny(3664)梡捠怣儌僕儏乕儖
.CPU 300HN ;Tiny H8偼僲乕儅儖儌乕僪偺傒摦嶌偡傞
;-----僔儞儃儖偺愝掕-----
RDR .EQU H'FFAD ;儗僔乕僽僨乕僞儗僕僗僞
TDR .EQU H'FFAB ;僩儔儞僗儈僢僩僨乕僞儗僕僗僞
SMR .EQU H'FFA8 ;僔儕傾儖儌乕僪儗僕僗僞
SCR3 .EQU H'FFAA ;僔儕傾儖僐儞僩儘乕儖儗僕僗僞
RIE .BEQU 6,SCR3
TIE .BEQU 7,SCR3
PMR1 .EQU H'FFE0 ;億乕僩儌乕僪儗僕僗僞侾
TXD .BEQU 1,PMR1
SSR .EQU H'FFAC ;僔儕傾儖僗僥乕僞僗儗僕僗僞
TDRE .BEQU 7,SSR
RDRF .BEQU 6,SSR
TEND .BEQU 2,SSR
OER .BEQU 5,SSR
FER .BEQU 4,SSR
PER .BEQU 3,SSR
BRR .EQU H'FFA9 ;價僢僩儗乕僩儗僕僗僞
.SECTION BASM,CODE,ALIGN=2
RBUF_SZ .EQU 32 ;庴怣儕儞僌僶僢僼傽僒僀僘
SBUF_SZ .EQU 64 ;憲怣儕儞僌僶僢僼傽僒僀僘
RBUF: .RES.B RBUF_SZ ;庴怣儕儞僌僶僢僼傽
SBUF: .RES.B SBUF_SZ ;憲怣儕儞僌僶僢僼傽
SWptr: .RES.W 1 ;憲怣彂崬傒億僀儞僞
SRptr: .RES.W 1 ;憲怣撉崬傒億僀儞僞
RWptr: .RES.W 1 ;庴怣彂崬傒億僀儞僞
RRptr: .RES.W 1 ;庴怣撉崬傒億僀儞僞
.SECTION PASM,CODE,ALIGN=2
;-----SCI弶婜壔張棟-----
;CALL宍幃: void SCI_Init( unsigned char BRRValue );
;堷悢偼BRR儗僕僗僞偵戙擖偡傞抣
.EXPORT _SCI_Init
_SCI_Init:
MOV.B R0L,@BRR ;BRR偺愝掕
;億僀儞僞偺弶婜壔
MOV.L #SBUF,ER0
MOV.W R0,@SWptr
MOV.W R0,@SRptr
MOV.L #RBUF,ER0
MOV.W R0,@RWptr
MOV.W R0,@RRptr
;
XOR.B R0L,R0L
MOV.B R0L,@SCR3 ;TE=0, RE=0, CKE1=0, CKE0=0
MOV.B R0L,@SMR ;SMR= 0000 0000 (n=0)
; MOV.B #25,R0L ;BRR偺愝掕
; MOV.B R0L,@BRR ;BRR偺愝掕
;
MOV.W #280,R0 ;僟儈乕偺儖乕僾
SCI_INIT_WAIT:
DEC.W #1,R0
BNE SCI_INIT_WAIT
MOV.B #H'30,R0L
MOV.B R0L,@SCR3 ;SCR3=0011 0000 (RIE=1,TE=1,RE=1)
BSET TXD
MOV.B @SSR,R0L ;Dummy Read
MOV.B #H'80,R0L
MOV.B R0L,@SSR ;Clear Error Flag (TDRE=1)
BSET RIE ;庴怣妱崬傒偺嫋壜
RTS
;-----妱傝崬傒張棟-----
.EXPORT _SCI_Int
_SCI_Int:
BTST.B RDRF ;庴怣妱崬傒偺妋擣
BEQ SCI_Int_1
BSR RX_Int
SCI_Int_1:
BTST.B TDRE ;憲怣妱崬傒偺妋擣
BEQ SCI_Int_2
BSR TX_Int
SCI_Int_2:
BTST.B OER ;僄儔乕偺応崌偺張棟
BEQ SCI_Int_END
MOV.B @RDR,R0H ;暥帤偺庢崬傒
MOV.B @SSR,R0L
AND.B #H'CF,R0L
MOV.B R0L,@SSR ;Clear Error Flag (TDRE=1)
SCI_Int_END:
RTS ;妱傝崬傒偐傜偺暅婣
;-----庴怣妱崬傒張棟-----
RX_Int:
BCLR RIE ;妱傝崬傒掆巭
BCLR RDRF ;RDRFbit偺僋儕傾
MOV.B @RDR,R0H ;暥帤偺庢崬傒
;庴怣僶僢僼傽偵嬻偒偑桳傞帠傪妋擣偟傕偟嬻偒偑柍偗傟偽廔椆偡傞丅
MOV.W @RWptr,R1 ;彂崬傒億僀儞僞偲
MOV.W R1,E0 ;尰嵼偺彂崬傒億僀儞僞傪曐懚
MOV.W @RRptr,E1 ;撉崬傒億僀儞僞傪庢摼偟
INC.W #1,R1 ;彂崬傒億僀儞僞傪僀儞僋儕儊儞僩偟偰
CMP.W #(RBUF + RBUF_SZ),R1 ;儕儞僌僶僢僼傽偺嵟屻偵払偟偰偄傞偐傪敾抐
BNE RX_Int_1 ;払偟偰偄側偄帪偼RX_1偵僕儍儞僾
MOV.W #RBUF,R1 ;払偟偰偄偨帪偼僶僢僼傽偺愭摢傾僪儗僗偵愝掕
RX_Int_1:
CMP.W R1,E1 ;偙偺擇偮傪斾妑
BEQ RX_Int_END ;撉崬傒億僀儞僞偵捛偄偮偄偨帪偼壗傕偣偢偵廔椆
MOV.W R1,@RWptr ;彂崬傒億僀儞僞傪曐懚
MOV.W E0,R1 ;曐懚偟偰偍偄偨彂崬傒億僀儞僞偵僨乕僞傪曐懚
MOV.B R0H,@ER1 ;彂崬傒億僀儞僞偺帵偡傾僪儗僗偵庴怣僨乕僞傪奿擺
RX_Int_END:
BSET RIE ;妱傝崬傒嵞奐
RTS ;廔椆
;-----憲怣妱崬傒張棟-----
TX_Int:
BCLR TIE ;妱傝崬傒掆巭
MOV.W @SWptr,E1 ;彂崬傒億僀儞僞偲
MOV.W @SRptr,R1 ;撉崬傒億僀儞僞傪庢摼偟
CMP.W E1,R1 ;僨乕僞偑懚嵼偟偰偄傞偐傪妋擣偡傞
BEQ TX_Int_END ;摨偠傾僪儗僗摨巑偺帪偼懚嵼偟偰偄側偄
MOV.B @ER1,R0L ;憲怣僶僢僼傽偐傜1byte庢摼
INC.W #1,R1 ;撉崬傒億僀儞僞傪僀儞僋儕儊儞僩偡傞
CMP.W #(SBUF + SBUF_SZ),R1 ;儕儞僌僶僢僼傽偺嵟屻傪妋擣
BNE TX_Int_2 ;嵟屻偵払偟偰偄側偗傟偽TX_Int_2偵僕儍儞僾
MOV.W #SBUF,R1 ;儕儞僌僶僢僼傽偺嵟弶偵栠偡
TX_Int_2:
MOV.W R1,@SRptr ;撉崬傒億僀儞僞偺峏怴
MOV.B R0L,@TDR ;憲怣
TX_Int_3:
BTST.B TEND ;憲怣姰椆傑偱懸偮
BEQ TX_Int_3
BCLR TEND ;TENDbit偺僋儕傾
BSET TIE ;憲怣妱崬傒傪嫋壜
TX_Int_END:
RTS
;-----堦暥帤憲怣張棟-----
;CALL宍幃: int SCI_Putc( char c );
;堷悢偼憲怣暥帤
;傕偟憲怣僶僢僼傽偵嬻偒偑桳傟偽憲怣僶僢僼傽偵曐懚偟丄憲怣妱崬傒傪嫋壜偡傞
;扐偟僶僢僼傽僼儖偺帪偼栠傝抣偵-1傪曉偟丄惓忢偵彂偒崬傔偨傜0傪曉偡丅
.EXPORT _SCI_Putc
_SCI_Putc:
PUSH.L ER1
BCLR TIE ;憲怣妱崬傒傪嬛巭
MOV.W @SWptr,R1 ;彂崬傒億僀儞僞偲
MOV.W R1,E0 ;尰嵼偺彂崬傒億僀儞僞傪曐懚
MOV.W @SRptr,E1 ;撉崬傒億僀儞僞傪庢摼偟
INC.W #1,R1 ;彂崬傒億僀儞僞傪僀儞僋儕儊儞僩偟偰
CMP.W #(SBUF + SBUF_SZ),R1 ;儕儞僌僶僢僼傽偺嵟屻偵払偟偰偄傞偐傪敾抐
BNE SCI_Putc_1 ;払偟偰偄側偄帪偼SCI_Putc_1偵僕儍儞僾
MOV.W #SBUF,R1 ;払偟偰偄偨帪偼僶僢僼傽偺愭摢傾僪儗僗偵愝掕
SCI_Putc_1:
CMP.W R1,E1 ;偙偺擇偮傪斾妑
BEQ SCI_Putc_2 ;撉崬傒億僀儞僞偵捛偄偮偄偨帪偼僶僢僼傽僼儖
MOV.W R1,@SWptr ;彂崬傒億僀儞僞傪曐懚
MOV.W E0,R1 ;曐懚偟偰偍偄偨彂崬傒億僀儞僞偵僨乕僞傪曐懚
MOV.B R0L,@ER1 ;彂崬傒億僀儞僞偺帵偡傾僪儗僗偵庴怣僨乕僞傪奿擺
XOR.W R0,R0 ;惓忢廔椆
SCI_Putc_END:
BSET TIE ;憲怣妱崬傒傪嫋壜
POP.L ER1
RTS
SCI_Putc_2:
MOV.W #H'FFFF,R0 ;僶僢僼傽僼儖
BRA SCI_Putc_END
;-----堦暥帤庴怣張棟-----
;CALL宍幃: int SCI_Getc( void );
;栠傝抣偼16bit偺撪壓埵偵庴怣僨乕僞丄忋埵偼僶僢僼傽偵僨乕僞偑懚嵼偟偨帪0丄僨乕僞偑柍偄帪偼-1
.EXPORT _SCI_Getc
_SCI_Getc:
MOV.W @RWptr,E1 ;彂崬傒億僀儞僞偲
MOV.W @RRptr,R1 ;撉崬傒億僀儞僞傪庢摼偟
CMP.W E1,R1 ;僨乕僞偑懚嵼偟偰偄傞偐傪妋擣偡傞
BEQ SCI_Getc_2 ;摨偠傾僪儗僗摨巑偺帪偼懚嵼偟偰偄側偄
MOV.B @ER1,R0L ;庴怣僶僢僼傽偐傜1byte庢摼偟丄栠傝抣偵戙擖
XOR.B R0H,R0H ;栠傝抣偺忋埵傪僋儕傾
INC.W #1,R1 ;撉崬傒億僀儞僞傪僀儞僋儕儊儞僩偡傞
CMP.W #(RBUF + RBUF_SZ),R1 ;儕儞僌僶僢僼傽偺嵟屻傪妋擣
BNE SCI_Getc_3 ;嵟屻偵払偟偰偄側偗傟偽SCI_Getc_3偵僕儍儞僾
MOV.W #RBUF,R1 ;儕儞僌僶僢僼傽偺嵟弶偵栠偡
SCI_Getc_3:
MOV.W R1,@RRptr ;撉崬傒億僀儞僞偺峏怴
SCI_Getc_END:
RTS
SCI_Getc_2:
MOV.W #H'FFFF,R0 ;栠傝抣偵-1傪戙擖
BRA SCI_Getc_END
;-----暥帤楍憲怣張棟-----
;CALL宍幃: void SCI_Puts( char * );
;堷悢偱梌偊傜傟傞暥帤楍偺億僀儞僞偐傜NULL傑偱傪憲怣偡傞丅
;拲堄両憲怣僶僢僼傽偑堦攖側帪偼僶僢僼傽偵彂崬傔傞傑偱懸偭偰偟傑偆丅
.EXPORT _SCI_Puts
_SCI_Puts:
PUSH.L ER1
PUSH.L ER2
MOV.L ER0,ER2 ;億僀儞僞傪堏摦
SCI_Puts_1:
MOV.B @ER2+,R1L ;ER2偱梌偊傜傟傞暥帤楍偺億僀儞僞偐傜堦暥帤傪庢摼
OR.B R1L,R1L ;NULL偱側偄帠傪妋擣偡傞
BEQ SCI_Puts_END ;傕偟NULL側傜偽廔椆
SCI_Puts_2:
MOV.B R1L,R0L ;
BSR _SCI_Putc ;堦暥帤憲怣張棟傪屇傃弌偡
OR.W R0,R0 ;曉傝抣傪挷傋傞
BNE SCI_Puts_2 ;傕偟曉傝抣偑0偱側偄帪偼憲怣僶僢僼傽偑堦攖側偺偱儕僩儔僀
BRA SCI_Puts_1 ;嵟弶偵栠偭偰堦暥帤憲怣傪孞傝曉偡
SCI_Puts_END:
POP.L ER2
POP.L ER1
RTS
;-----庴怣暥帤悢庢摼張棟-----
;CALL宍幃: unsigned int RecByteSize( void );
;栠傝抣偵尰嵼偺庴怣僶僢僼傽撪偵巆偭偰偄傞暥帤悢傪曉偡
.EXPORT _RecByteSize
_RecByteSize:
MOV.W @RWptr,R0 ;彂崬傒億僀儞僞偲
MOV.W @RRptr,E0 ;撉崬傒億僀儞僞傪庢摼偟
CMP.W E0,R0 ;擇偮偺億僀儞僞傪斾妑
BGE RcvSize_1 ;彂崬傒億僀儞僞偺曽偑戝偒偄帪偼RcvSize_1偵僕儍儞僾
SUB.W #RBUF_SZ,E0 ;彂崬傒億僀儞僞偑彫偝偄応崌儕儞僌僶僢僼傽偺億僀儞僞偑夞偭偰偄傞偺偱
;僶僢僼傽僒僀僘暘僆僼僙僢僩偡傞
RcvSize_1:
SUB.W E0,R0
RTS
;-----僜乕僗僾儘僌儔儉偺廔椆-----
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -