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

📄 m.lst

📁 08山东电子电子竞赛智能小车程序基于PIC+红外+电子罗盘ourdev551262 包含源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
01C4:  BCF    1F.3
.................... 	AD_result=0; 
01C6:  CLRF   24
01C8:  CLRF   23
.................... 	  
.................... } 
01CA:  GOTO   0306 (RETURN)
....................  
.................... //启动 
.................... void ADStart() 
.................... { 
....................  
.................... 	setup_adc (ADC_CLOCK_DIV_64); 
.................... 	enable_interrupts(INT_AD); 
.................... } 
.................... //停止 
.................... void AdStop() 
.................... { 
.................... 	setup_adc(ADC_OFF); 
.................... 	disable_interrupts(INT_AD); 
.................... }		 
....................  
.................... #include "c_FAD.h" 
.................... #define Fad_sck		HardL_LCD_4 
.................... #define Fad_Miso	HardL_LCD_5 
.................... #define Fad_Mosi	HardL_LCD_6 
.................... #define Fad_start	HardL_LCD_7 
....................  
.................... //用户原点 
.................... unsigned int16 NorthMy; 
.................... 	 
....................  
.................... //罗盘初始化 
.................... void init_spi() 
.................... { 
.................... output_high(Fad_start); 
*
0314:  BCF    F94.3
0316:  BSF    F8B.3
.................... output_low(Fad_Miso); 
0318:  BCF    F94.1
031A:  BCF    F8B.1
.................... output_low(Fad_Mosi); 
031C:  BCF    F94.2
031E:  BCF    F8B.2
.................... output_low(Fad_sck); 
0320:  BCF    F94.6
0322:  BCF    F8B.6
.................... } 
0324:  GOTO   09E4 (RETURN)
....................  
.................... //启动传输 
.................... void SpiStart() 
.................... { 
.................... output_low(Fad_start); 
*
042E:  BCF    F94.3
0430:  BCF    F8B.3
.................... } 
0432:  GOTO   04AC (RETURN)
.................... //结束传输 
.................... void SpiStop() 
.................... { 
.................... output_high(Fad_start); 
*
0484:  BCF    F94.3
0486:  BSF    F8B.3
.................... } 
0488:  GOTO   04CC (RETURN)
.................... //发送一字节 
.................... void SpiSend(unsigned char Sdata) 
.................... { 
....................    int8 i; 
....................    for(i=0; i<8; ++i) 
*
0436:  CLRF   46
0438:  MOVF   46,W
043A:  SUBLW  07
043C:  BNC   0458
....................    { 
....................       output_bit(Fad_Mosi, shift_left(&Sdata,1,0)); 
043E:  BCF    FD8.0
0440:  RLCF   45,F
0442:  BC    0448
0444:  BCF    F8B.2
0446:  BRA    044A
0448:  BSF    F8B.2
044A:  BCF    F94.2
....................       output_high(Fad_sck);                      
044C:  BCF    F94.6
044E:  BSF    F8B.6
....................       output_low(Fad_sck); 
0450:  BCF    F94.6
0452:  BCF    F8B.6
....................    } 
0454:  INCF   46,F
0456:  BRA    0438
.................... } 
0458:  GOTO   04B2 (RETURN)
.................... //接收一字节 
.................... unsigned char SpiGet() 
.................... { 
....................    BYTE flashData; 
....................    int i; 
....................    for(i=0; i<8; ++i)                        // Get 8 bits of data 
045C:  CLRF   46
045E:  MOVF   46,W
0460:  SUBLW  07
0462:  BNC   047E
....................    { 
....................       output_high(Fad_sck); 
0464:  BCF    F94.6
0466:  BSF    F8B.6
....................       shift_left(&flashData, 1, input(Fad_Miso)); 
0468:  BSF    F94.1
046A:  BTFSC  F82.1
046C:  BRA    0472
046E:  BCF    FD8.0
0470:  BRA    0474
0472:  BSF    FD8.0
0474:  RLCF   45,F
....................       output_low(Fad_sck); 
0476:  BCF    F94.6
0478:  BCF    F8B.6
....................    } 
047A:  INCF   46,F
047C:  BRA    045E
....................    return flashData; 
047E:  MOVFF  45,01
....................  
....................  
.................... } 
0482:  RETLW  00
....................  
....................  
.................... //硬磁补偿开始 
....................  
.................... unsigned char HardStart() 
.................... { 
.................... unsigned char ReData; 
.................... SpiStart(); 
.................... SpiSend(0xA0); 
.................... ReData=SpiGet(); 
.................... SpiStop(); 
.................... if (ReData==0xA0) 
.................... { 
.................... 	return 1; 
.................... } 
.................... else 
.................... { 
.................... 	return 0; 
.................... } 
....................  
.................... } 
.................... //硬磁补偿结束 
.................... unsigned char HardStop() 
....................  
.................... { 
.................... unsigned char ReData; 
.................... SpiStart(); 
.................... SpiSend(0xA1); 
.................... ReData=SpiGet(); 
.................... SpiStop(); 
.................... if (ReData==0xA1) 
.................... { 
.................... 	return 1; 
.................... } 
.................... else 
.................... { 
.................... 	return 0; 
....................  
.................... } 
....................  
.................... } 
....................  
....................  
....................  
.................... //正北校准 
.................... unsigned char North() 
.................... { 
.................... unsigned char ReData; 
.................... SpiStart(); 
.................... SpiSend(0xB0); 
.................... ReData=SpiGet(); 
.................... SpiStop(); 
.................... if (ReData==0xB0) 
.................... { 
.................... return 1; 
.................... } 
.................... else 
.................... { 
.................... return 0; 
.................... } 
....................  
.................... } 
....................  
....................  
....................  
....................  
.................... //读原始方位角 
.................... unsigned int16 GetNorth() 
....................  
.................... { 
.................... unsigned char ReData1; 
....................  
.................... unsigned char ReData2; 
....................  
.................... unsigned char ReData3; 
....................  
.................... unsigned char ReData4; 
....................  
....................  
....................  
.................... unsigned int16 Chk; 
....................  
.................... unsigned int16 ChkSelf; 
....................  
.................... SpiStart(); 
*
04AA:  BRA    042E
....................  
.................... SpiSend(0x5A); 
04AC:  MOVLW  5A
04AE:  MOVWF  45
04B0:  BRA    0436
....................  
....................  
....................  
.................... ReData1=SpiGet(); 
04B2:  RCALL  045C
04B4:  MOVFF  01,3D
.................... ReData2=SpiGet(); 
04B8:  RCALL  045C
04BA:  MOVFF  01,3E
.................... ReData3=SpiGet(); 
04BE:  RCALL  045C
04C0:  MOVFF  01,3F
.................... ReData4=SpiGet(); 
04C4:  RCALL  045C
04C6:  MOVFF  01,40
.................... SpiStop(); 
04CA:  BRA    0484
....................  
.................... return (ReData1+ReData2*256); 
04CC:  CLRF   47
04CE:  MOVFF  3E,46
04D2:  MOVLW  01
04D4:  MOVWF  49
04D6:  CLRF   48
04D8:  RCALL  048C
04DA:  MOVFF  02,03
04DE:  MOVF   01,W
04E0:  ADDWF  3D,W
04E2:  MOVWF  01
04E4:  MOVLW  00
04E6:  ADDWFC 03,F
04E8:  MOVFF  03,02
04EC:  BRA    0538
.................... //似乎没有校验 
.................... Chk=0x5A+ReData1+ReData2; 
04EE:  MOVLW  5A
04F0:  ADDWF  3D,W
04F2:  ADDWF  3E,W
04F4:  MOVWF  41
04F6:  CLRF   42
.................... ChkSelf=make16(ReData3,ReData4); 
04F8:  MOVFF  3F,44
04FC:  MOVFF  40,43
....................  
.................... if (Chk==ChkSelf) 
0500:  MOVF   43,W
0502:  SUBWF  41,W
0504:  BNZ   0530
0506:  MOVF   44,W
0508:  SUBWF  42,W
050A:  BNZ   0530
.................... { 
.................... return (ReData1+ReData2*256); 
050C:  CLRF   47
050E:  MOVFF  3E,46
0512:  MOVLW  01
0514:  MOVWF  49
0516:  CLRF   48
0518:  RCALL  048C
051A:  MOVFF  02,03
051E:  MOVF   01,W
0520:  ADDWF  3D,W
0522:  MOVWF  01
0524:  MOVLW  00
0526:  ADDWFC 03,F
0528:  MOVFF  03,02
052C:  BRA    0538
.................... } 
.................... else 
052E:  BRA    0538
.................... { 
.................... return  0xffff; 
0530:  MOVLW  FF
0532:  MOVWF  01
0534:  MOVWF  02
0536:  BRA    0538
.................... } 
....................  
.................... } 
0538:  RETLW  00
....................  
.................... //设置相对原点 
.................... void SetOrg(unsigned int16 myNorthTmp) 
.................... { 
.................... 	NorthMy=myNorthTmp;	 
053A:  MOVFF  3E,26
053E:  MOVFF  3D,25
.................... } 
0542:  RETLW  00
....................  
....................  
.................... //获得用户相对方位角 
.................... unsigned int16 GetNorthMy() 
.................... { 
.................... unsigned int16 Northtmp; 
.................... Northtmp=GetNorth(); 
*
07E4:  RCALL  04AA
07E6:  MOVFF  02,3C
07EA:  MOVFF  01,3B
....................  
.................... if (Northtmp<NorthMy) 
07EE:  MOVF   3C,W
07F0:  SUBWF  26,W
07F2:  BNC   0816
07F4:  BNZ   07FC
07F6:  MOVF   25,W
07F8:  SUBWF  3B,W
07FA:  BC    0816
.................... { 
.................... 	Northtmp=360+Northtmp-NorthMy; 
07FC:  MOVLW  68
07FE:  ADDWF  3B,W
0800:  MOVWF  3D
0802:  MOVLW  01
0804:  ADDWFC 3C,W
0806:  MOVWF  3E
0808:  MOVF   25,W
080A:  SUBWF  3D,W
080C:  MOVWF  3B
080E:  MOVF   26,W
0810:  SUBWFB 3E,W
0812:  MOVWF  3C
.................... }else 
0814:  BRA    081E
.................... { 
.................... 	Northtmp=Northtmp-NorthMy; 
0816:  MOVF   25,W
0818:  SUBWF  3B,F
081A:  MOVF   26,W
081C:  SUBWFB 3C,F
.................... }; 
.................... if (Northtmp>359) 
081E:  MOVF   3C,W
0820:  SUBLW  00
0822:  BC    0832
0824:  XORLW  FF
0826:  BNZ   082E
0828:  MOVF   3B,W
082A:  SUBLW  67
082C:  BC    0832
.................... { 
.................... 	Northtmp=0; 
082E:  CLRF   3C
0830:  CLRF   3B
.................... }		 
.................... return Northtmp; 
0832:  MOVFF  3B,01
0836:  MOVFF  3C,02
.................... } 
083A:  GOTO   0852 (RETURN)
....................  
....................  
.................... //显示方位 
.................... void dispNorth() 
.................... { 
.................... LCD_setpos(0,0); 
083E:  CLRF   42
0840:  CLRF   43
0842:  RCALL  0338
.................... LCD_disp_Putchar('N'); 
0844:  MOVLW  4E
0846:  MOVWF  3C
0848:  RCALL  0678
.................... LCD_disp_Putchar(':');	 
084A:  MOVLW  3A
084C:  MOVWF  3C
084E:  RCALL  0678
.................... //获得罗盘角度 
.................... NorthRad=GetNorthmy(); 
0850:  BRA    07E4
0852:  MOVFF  02,22
0856:  MOVFF  01,21
....................  
.................... LCD_disp_valueInt16(NorthRad); 
085A:  MOVFF  22,3E
085E:  MOVFF  21,3D
0862:  RCALL  05B2
.................... LCD_disp_Putchar(' '); 
0864:  MOVLW  20
0866:  MOVWF  3C
0868:  RCALL  0678
.................... LCD_disp_Putchar(' '); 
086A:  MOVLW  20
086C:  MOVWF  3C
086E:  RCALL  0678
.................... }	 
0870:  RETLW  00
....................  
.................... #include "c_lcm.h" 
....................  
.................... #define  LCM_SID HardL_LCD_19 
.................... #define  LCM_SCK HardL_LCD_18 
.................... #define  LCM_RST HardL_LCD_17 
....................  
.................... #define comm  0 
.................... #define dat   1 
....................  
.................... unsigned char LcmCurrX=0; 
....................  
....................  
.................... /*-------------------LCD写数据或指令------------------- 
.................... Data=1 数据 
.................... Data=0 指令 
.................... content       要写的内容 
.................... --------------------------------------------------------*/ 
.................... void LCD_Write(unsigned char Data,unsigned char content) 
.................... { 
.................... unsigned char a,i,j; 
.................... a=content; 
*
01F6:  MOVFF  49,4A
.................... //delay_us(500); 
.................... output_low(LCM_SCK); 
01FA:  BCF    F95.6
01FC:  BCF    F8C.6
.................... output_high(LCM_SID);; 

⌨️ 快捷键说明

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