📄 m.lst
字号:
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 + -