📄 send.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 + -