本帖最后由 zhoushiqun 于 2014-3-20 20:09 编辑
程序哪儿有问题,请高手指点一二。
_c_int0
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #43FEH,SCSR1 ;CLKIN=15M,CLKOUT=15M
SPLK #0E8h,WDCR ;关看门狗
CALL SCI_INIT ;调串口初始化程
TXD_LOOP:
LDP #5H
BIT SCI_FLAG,BIT0
BCND TXD_DATA,TC ;SCI_FLAG.0=1则发送数据
B WAIT
TXD_DATA: ;发送N个数据程序
MAR *,AR0
BCND TXD_DATA_END,TC;判数据发送完?
MAR *,AR2
SACL *,AR4 ;数据送SCITXBUF寄存器
XMIT_RDY:
LDP #DP_PF1
BIT SCICTL2,BIT7
BCND XMIT_RDY,NTC ;判发送器是否空?
B TXD_DATA
TXD_DATA_END:
MAR *, AR1
LACC *,AR2
SACL *
LDP #5H
SPLK #00H,SCI_FLAG ;清发送软件标志位
WAIT: NOP
B TXD_LOOP
;(3)串行通信初始化程序:
SCI_INIT:
LDP #0E1H
LACL MCRA
OR #03H
SACL MCRA ;配置串行口引脚为特殊功能:TXD、RXD
LDP #DP_PF1
SPLK #000FH,SCICCR ;地址位唤醒模式,8位数据,1位停止位,无奇偶校验
SPLK #0013H,SCICTL1 ;接收、发送、内部时钟使能 ,SLEEP=0
SPLK #0002H,SCICTL2 ;接收中断使能
SPLK #0000H,SCIHBAUD
SPLK #00C2H,SCILBAUD ;波特率为9600
SPLK #0027H,SCICTL1 ;串口初始化完成
LAR AR1,#SCIRXBUF ;接收缓冲寄存器地址
LAR AR2,#SCITXBUF ;发送缓冲寄存器地址
LDP #0
SPLK #0FFFFh,IFR ;清所有中断标志
SPLK #0001h,IMR ;允许INT1中断
CLRC INTM ;开总中断
RET
GISR1: ;优先级INT1中断人口
;保护现场
LDP #0E0H
LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外设中断人口地址
BACC ;跳到相应的中断服务子程序
SCI_RX_ISR: ;接收中断服务程序
LDP #DP_PF1
BIT SCIRXST,BIT6
BCND RXD_DATA,TC
RXD_DATA:
MAR *,AR1
LACC *
LDP #5H
SPLK #01H,SCI_FLAG ;置发送标志
B SCI_RX_END
SCI_RX_END: ;中断返回
;恢复现场
CLRC INTM
;开总中断,因为一进中断就自动关闭总中断
RET
;(5)假中断程序
PHANTOM
KICK_DOG ;复位看门狗
RET
END |