⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sci.asm

📁 some some some some some some
💻 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 + -