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

📄 rxd_txd.asm

📁 基于台湾凌阳公司的61板开发的GPS定位系统,能够在LCD上显示UTC时间、日期和经纬度信息。此程序为完整版
💻 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 + -