📄 rxd_txd.asm
字号:
//============================================================
// 文件名称:rxd_txd.asm
// 实现功能:接收GPS信息
// 日期: 2003/6/9
//============================================================
.INCLUDE hardware.inc
.RAM
.CODE
//=============================================================
// 函数名称: _main
// 功能描述: 接收GPS信息
// 语法格式: _main
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
.PUBLIC _main;
_main:
L_UART_INIT:
int off;
r1 = 0x0000; //未使能任何中断
[P_INT_Ctrl] = r1;
r1 = 0x0480; //设置IOB7为输入IOB10为输出
[P_IOB_Attrib] =r1;
r1 = 0x0400;
[P_IOB_Dir] = r1;
r1 = 0x0000;
[P_IOB_Data] = r1;
r1 = 0x0000; //设置波特率为4800bps
[P_UART_BaudScalarLow] = r1;
r1 = 0x000a;
[P_UART_BaudScalarHigh] = r1;
r1 = 0x0000;
r4 = 0x00C0; //使能输入和输出
[P_UART_Command1] = r1;
[P_UART_Command2] = r4;
L_ReSendData:
GPS_LOOP1: //收到$
CALL F_UART_RECV
cmp r1,0x0024
jne GPS_LOOP1
GPS_LOOP2: //收到G
CALL F_UART_RECV
cmp r1,0x0047
jne GPS_LOOP1
GPS_LOOP3: //收到P
CALL F_UART_RECV
cmp r1,0x0050
jne GPS_LOOP1
GPS_LOOP4: //收到G
CALL F_UART_RECV
cmp r1,0x0047
jne GPS_LOOP1
GPS_LOOP5: //收到L
CALL F_UART_RECV
cmp r1,0x004c
jne GPS_LOOP1
GPS_LOOP6: //收到L
CALL F_UART_RECV
cmp r1,0x004c
jne GPS_LOOP1
GPS_LOOP7: //收到,
CALL F_UART_RECV
cmp r1,0x002c
jne GPS_LOOP1
CALL WJ_LOOP //接收纬度
CALL F_UART_RECV //收到,
cmp r1,0x002c
jne WJ_LOOP //?
SN_LOOP: //S OR N *********************************
CALL F_UART_RECV
CALL WJ_LOOP //接收经度
EW_LOOP:
CALL F_UART_RECV //E OR W *********************************
jmp L_ReSendData;
F_UART_RECV:
PUSH R2,R3 TO [SP]
L_Check_RxRDY:
r1 = 0x0001
[P_Watchdog_Clear] = r1 //清看门狗
r2 = [P_UART_Command2]; //检测是否有数据接收
r2 &= 0x0080;
JZ L_Check_RxRDY;
R1 = [P_UART_Data]; //接收数据
POP R2,R3 FROM [SP]
RETF
WJ_LOOP: //接收纬/经度
R2=0
R2=R2 LSL 4
CALL F_UART_RECV
R1=R1 LSL 4
R1=R1 LSL 4
R3=R1
R3=R3 AND 0xFF00
R2=0
R2=R2 LSL 4 //R3存纬/经度数据的高16位
CALL F_UART_RECV
R1=R1 AND 0x00FF
R3=R3 OR R1
R2=0
R2=R2 LSL 4
CALL F_UART_RECV
R1=R1 LSL 4
R1=R1 LSL 4
R4=R1
R4=R3 AND 0xFF00
R2=0
R2=R2 LSL 4
CALL F_UART_RECV
R1=R1 AND 0x00FF
R4=R4 OR R1
R2=0
R2=R2 LSL 4 //R4存纬/经度数据的低16位
RETF
write:.proc
R3=0x0001
[P_Watchdog_Clear]=r3
sub:
r2=[P_IOB_Data] //判断是否是工作状态
r2&=0x0001
cmp r2,0
jne sub
[P_IOA_Data]=r1 //否则输出数据,是就循环判断
r2=0xffff
[P_IOB_Data]=r2 //res置一,发出请求信号
he:
r2=[P_IOB_Data] //判断是否已经进入工作状态
cmp r2,0xffff
jne he //否就循环判断,
r2=0xfffd
[P_IOB_Data]=r2 //是就把RES置零
retf
.endp
//*****************************************************************************/
// main.asm 结束
//*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -