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

📄 send.asm

📁 2005年全国大学生电子设计竞赛论文集
💻 ASM
字号:

.INCLUDE	hardware.inc
.DEFINE 	UART_DATA_SIZE		0x0005;
.DEFINE     P_WatchDog_Clear	0x7012	
.external _v	
.DATA   								//发送的数据
//C_SendData:	.DW 0x0201,0xffed,0x1818,0x3344,0x66bb
.ISRAM
C_RecData: 	.DW  5 dup(0); 
.VAR 		C_SendNum        				//发送数据个数 
.VAR 		C_SendFlag;      				//1,发送高8位,0,发送低8位
.CODE
//========================================================================
//主程序
//========================================================================
.PUBLIC _UART_TxINIT		
_UART_TxINIT:
	r1=[P_IOB_Attrib]
	r1|= 0x0700;		    			//设置IOB7为输入IOB10为输出
	r1&=0xff7f
	[P_IOB_Attrib] = r1;
	r1=[P_IOB_Dir]
	r1|= 0x0700;		    			//设置IOB7为输入IOB10为输出
	r1&=0xff7f
	[P_IOB_Dir] = r1;
//	r1 = 0x0000;	
//	[P_IOB_Data] = r1;

	r1 = 0x006b;		    			//设置波特率 114.84KHz(~=115.2KHz)
	[P_UART_BaudScalarLow] = r1;
	r1 = 0x0000;
	[P_UART_BaudScalarHigh] = r1;	
	
	r1 = 0x0000;         
	[P_UART_Command1] = r1; 			//开接收发送中断
	r1 = 0x0040;         
	[P_UART_Command2] = r1; 			//使能RX和TX
	                     
	r1 = 0x0000;		   
	[C_SendNum] = r1;          			//初始化发送数据个数
	r1 = 0x0001 ;   
    [C_SendFlag] = r1;        			//初始化发送位标识
    retf
   
.public _UART_SENDLow
_UART_SENDLow:
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x04
    r4=[bp]				
	r2=[P_IOB_Data]
	r2|=0x0100
	[P_IOB_Data]=r2
	r2=[P_IOB_Data]
	r2&=0xfeff
	[P_IOB_Data]=r2
     r2 = [C_SendFlag];
     r2 ^= 0x0001          
     [C_SendFlag] = r2;      			//发送位标识取反
     
     r1 = 0xf000;
     r1 = r1+r4
     r1 = [r1]              			//取发送数据                         
L_TxRDY1:
     r2=0x0040
     test r2,[P_UART_Command2]
     jz L_TxRDY1	
     [P_UART_Data] = r1 ;   			//发送数据      
    POP BP,BP FROM [SP]
    retf
    


.public _UART_SENDHigh
_UART_SENDHigh:
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x04
    r4=[bp]				
	r2=[P_IOB_Data]
	r2|=0x0100
	[P_IOB_Data]=r2
	r2=[P_IOB_Data]
	r2&=0xfeff
	[P_IOB_Data]=r2
     r2 = [C_SendFlag];
     r2 ^= 0x0001          
     [C_SendFlag] = r2;      			//发送位标识取反
     
     r1 = 0xf000;
     r1 = r1+r4
     r1 = [r1]              			//取发送数据                         
     r1 = r1 lsr 4;
     r1 = r1 lsr 4; 
L_TxRDY2:
     r2=0x0040
     test r2,[P_UART_Command2]
     jz L_TxRDY2
	
     [P_UART_Data] = r1 ;   			//发送数据      

    POP BP,BP FROM [SP]
    retf
    


.public _UART_SENDLow1
_UART_SENDLow1:
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x04
    r4=[bp]				
	r2=[P_IOB_Data]
	r2|=0x0200
	[P_IOB_Data]=r2
	r2=[P_IOB_Data]
	r2&=0xfdff
	[P_IOB_Data]=r2     
     //r1 = 0xf000;
    // r1 = r1+r4
     r1 = [r4]    
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
L_TxRDY3:
     r2=0x0040
     test r2,[P_UART_Command2]
     jz L_TxRDY3	
     [P_UART_Data] = r1 ;   			//发送数据      
    POP BP,BP FROM [SP]
    retf
    


.public _UART_SENDHigh1
_UART_SENDHigh1:
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x04
    r4=[bp]				
	r2=[P_IOB_Data]
	r2|=0x0200
	[P_IOB_Data]=r2
	r2=[P_IOB_Data]
	r2&=0xfdff
	[P_IOB_Data]=r2
     r2 = [C_SendFlag];
     r2 ^= 0x0001          
     [C_SendFlag] = r2;      			//发送位标识取反
     
    // r1 = 0xf000;
     //r1 = r1+r4
     r1 = [r4]              			//取发送数据                         
     r1 = r1 lsr 4;
     r1 = r1 lsr 4; 
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
     nop          			//取发送数据                         
L_TxRDY4:
     r2=0x0040
     test r2,[P_UART_Command2]
     jz L_TxRDY4
	
     [P_UART_Data] = r1 ;   			//发送数据      

    POP BP,BP FROM [SP]
    retf
  

   
    	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -