?? sci.asm
字號:
;=====================================================
.include "2407.h" ;頭文件,2407寄存器的設置
.include "intx.h" ;頭文件,中斷向量表的設置
.include "varx.h" ;頭文件,變量的定義
.include "conx.h" ;頭文件,常量的定義
;=====================================================
.def _c_int0
;===========================================
.text
;===========================================
_c_int0:
CALL SYSINIT ;系統初始化
CALL IOINIT ;IO初始化
CALL SCI_INIT ;SCI初始化
LDP #05H
; SPLK #01H,SCI_FLAG ;發送標志位賦初值,test
SPLK #0H,SCI_FLAG ;清發送標志位
; SPLK #055H,TXD_PTR
SPLK #0ffH,TXD_PTR
;////////////////////////////////////////////
WAIT:
CALL SCI_RX
CALL SCI_TX
B WAIT
;========================================================
;系統初始化子程序
;////////////////////////////////////////////////////////
SYSINIT:
SETC INTM ;禁止所有可屏蔽中斷
CLRC SXM ;禁止符號擴展
CLRC OVM ;累加器結果正常溢出
CLRC CNF ;配置B0為數據存儲空間
LDP #0E0H
SPLK #81FEH,SCSR1 ;4倍頻,24M,DEMO板用的是6M時鐘
SPLK #0E8H,WDCR ;關看門狗
LDP #0H
SPLK #0H,IMR ;關閉所有可屏蔽中斷,test
; SPLK #01H,IMR ;打開中斷1
SPLK #0FFFFH,IFR ;清所有中斷標志位
; CLRC INTM ;開總中斷,test
RET
;=========================================================
IOINIT:
LDP #0E1H
LACL MCRA ;配置IOPA0和IOPA1口為串行口,TXD,RXD
OR #03H
SACL MCRA
RET
;=========================================================
SCI_INIT:
LDP #0E0H
SPLK #0FH,SCICCR ;地址位喚醒模式,8位數據,1位停止位,無奇偶校驗
SPLK #07H,SCICTL1 ;接收、發送、內部時鐘使能,SLEEP=1
SPLK #0H,SCICTL2 ;接收中斷使能,test
; SPLK #02H,SCICTL2 ;接收中斷使能
SPLK #01H,SCIHBAUD ;波特率=9600
SPLK #038H,SCILBAUD ;波特率=9600
SPLK #027H,SCICTL1 ;串口初始化完成
; LAR AR1,#SCIRXBUF ;接收緩沖寄存器地址7057h
; LAR AR2,#SCITXBUF ;發送緩沖寄存器地址7059h
; LAR AR3,#RXD_PTR ;接收數據指針
; LAR AR4,#TXD_PTR ;發送數據指針
RET
;=========================================================
SCI_RX: ;接收子程序
; LDP #00H ;TEST
; SPLK #01H,SCI_FLAG ;TEST
LDP #0E0H
BIT SCIRXST,BIT6 ;查詢方式,判斷SCI是否接到新信息7055H
BCND SCI_RX_OK,NTC ;1表示接到,0表示未接到
LACL SCIRXBUF ;讀接收緩沖器中的數據
LDP #05H
SACL RXD_PTR ;保存在接收變量中,028DH起始地址
; SUB #0AAH ;TEST
SUB #0bbH
BCND SCI_RX_OK,NEQ ;TEST
LDP #05H
SPLK #01H,SCI_FLAG
; LACL SCI_FLAG
; ADD #01H
; AND #0FH
; SACL SCI_FLAG
;/////////////////////////////////////////////////////////
SCI_RX_OK:
RET
;=========================================================
SCI_TX: ;SCI發送子程序
;/////////////////////////////////////////////////////////
;以下是SCI發送子程序用到的輔助寄存器初始化定義
LAR AR1,#SCIRXBUF ;接收緩沖寄存器地址7057h
LAR AR2,#SCITXBUF ;發送緩沖寄存器地址7059h
LAR AR3,#RXD_PTR ;接收數據指針
LAR AR4,#TXD_PTR ;發送數據指針
;/////////////////////////////////////////////////////////
LDP #05H
LACL SCI_FLAG
; LACL #01H ;TEST
BCND SCI_TX_OK,EQ ;若SCI_FLAG=1,則發送數據
; BCND SCI_TX_OK,NEQ ;若SCI_FLAG=0,則發送數據
;////////////////////////////////////////////////////////
;以下是發送數據程序
MAR *,AR0 ;SCI_FLAG.0=1,發送數據
LAR AR0,#TXD_PTR ;285h
ADRK #02H ;N+1,發送N個數據,TEST發送1個數據,AR0=287H
MAR *,AR4
TXD_DATA:
LACC *+ ;讀數據
CMPR 00
BCND TXD_DATA_END,TC
MAR *,AR2
SACL *,AR4 ;數據送發送緩沖寄存器
XMIT_RDY: ;發送N個數據的程序
LDP #0E0H
BIT SCICTL2,BIT7
BCND XMIT_RDY,NTC ;判斷發送器是否空,0表示緩沖器滿
B TXD_DATA
TXD_DATA_END: ;數據發送結束
LDP #05H
SPLK #0H,SCI_FLAG
; SPLK #01H,SCI_FLAG ;發送標志位賦初值TEST
;//////////////////////////////////////////////////////////
SCI_TX_OK:
RET
;=========================================================
;=========================================================
GISR1: ;接收中斷入口
LDP #0E0H
LACC PIVR,1
ADD #PVECTORS
BACC
;/////////////////////////////////////////////////////////
SCI_RX_ISR: ;接收中斷服務程序
;/////////////////////////////////////////////////////////
;仿照查詢方式的發送部分,AR1-4應在此定義!!!!!!
;/////////////////////////////////////////////////////////
LDP #0E0H
MAR *,AR1 ;接收緩沖寄存器地址
BIT SCICTL1,BIT2 ;測試休眠位狀態
BCND RXD_DATA,NTC ;SLEEP=0,數據已經被接收到緩沖器里了
LACC * ;休眠位=1,SCI待命,準備接收地址
SUB #0AAH
BCND TXD_FLAG,EQ ;AA表示上位機已準備好,請求下位機發送信息
SUB #01H
BCND SCI_RX_END,NEQ ;接收到的信息若不是AB,表示下位機忙
SPLK #033H,SCICTL1 ;接收到的信息是AB,SCI置位,禁止休眠
B SCI_RX_END
TXD_FLAG:
LDP #05H
SPLK #01H,SCI_FLAG ;置發送標志
B SCI_RX_END
RXD_DATA:
LACC *,AR3
SACL *+,AR0
LAR AR0,#RXD_PTR
ADRK #01h ;N個數,test N=1
MAR *,AR3
CMPR 00
BCND SCI_RX_END,NTC ;NTC表示未接收完,AR3暫不要恢復初值
LAR AR3,#RXD_PTR ;接收完畢,恢復接收數據指針
SPLK #037H,SCICTL1 ;置SLEEP=1,表示準備接收
;/////////////////////////////////////////////////////////
SCI_RX_END: ;接收中斷返回
CLRC INTM ;開總中斷
RET
;=========================================================
;假中斷子程序
PHANTOM:
KICK_DOG
RET
;=========================================================
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -