📄 adc1.lst
字号:
CCS PCM C Compiler, Version 4.018, 15888 01-Jul-07 00:20
Filename: D:\PIC\CODE\ADC\ADC1.lst
ROM used: 1108 words (14%)
Largest free fragment is 2048
RAM used: 42 (11%) at main() level
65 (18%) worst case
Stack: 2 locations
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 347
0003: NOP
.................... ///////////////////////////////////////////////////////////////////////////////
.................... // MPLAB IDE V7.11 + CCS C3.18
.................... // Use 16F877A ADC and Rs232 for EasyPIC
.................... //
.................... // by Thi阯 Minh electronics www.tme.com.vn
.................... // 2007/06/26
.................... ///////////////////////////////////////////////////////////////////////////////
.................... #include <16F877A.h> // PIC16F877 header file
.................... //////// Standard Header file for the PIC16F877A device ////////////////
.................... #device PIC16F877A
.................... #list
....................
.................... #device 16f877*=16, ADC=10 // 10 bits ADC
.................... #use delay(clock=8000000) // for 8Mhz crystal
0331: MOVLW 41
0332: MOVWF 04
0333: BCF 03.7
0334: MOVF 00,W
0335: BTFSC 03.2
0336: GOTO 344
0337: MOVLW 02
0338: MOVWF 78
0339: CLRF 77
033A: DECFSZ 77,F
033B: GOTO 33A
033C: DECFSZ 78,F
033D: GOTO 339
033E: MOVLW 97
033F: MOVWF 77
0340: DECFSZ 77,F
0341: GOTO 340
0342: DECFSZ 00,F
0343: GOTO 337
0344: BCF 0A.3
0345: BCF 0A.4
0346: GOTO 44C (RETURN)
.................... #fuses HS, NOWDT, NOPROTECT, NOLVP // for debug mode
.................... #use rs232(baud=9600, xmit=PIN_C7, rcv=PIN_C6, stream=MYPC)
*
0049: BCF 20.7
004A: MOVF 20,W
004B: BSF 03.5
004C: MOVWF 07
004D: BCF 03.5
004E: BCF 07.7
004F: MOVLW 08
0050: MOVWF 78
0051: GOTO 052
0052: NOP
0053: BSF 78.7
0054: GOTO 063
0055: BCF 78.7
0056: RRF 42,F
0057: BTFSC 03.0
0058: BSF 07.7
0059: BTFSS 03.0
005A: BCF 07.7
005B: BSF 78.6
005C: GOTO 063
005D: BCF 78.6
005E: DECFSZ 78,F
005F: GOTO 056
0060: GOTO 061
0061: NOP
0062: BSF 07.7
0063: MOVLW 3F
0064: MOVWF 04
0065: DECFSZ 04,F
0066: GOTO 065
0067: NOP
0068: BTFSC 78.7
0069: GOTO 055
006A: BTFSC 78.6
006B: GOTO 05D
006C: RETLW 00
006D: BSF 20.6
006E: MOVF 20,W
006F: BSF 03.5
0070: MOVWF 07
0071: BCF 03.5
0072: BTFSC 07.6
0073: GOTO 072
0074: MOVLW 08
0075: MOVWF 77
0076: CLRF 40
0077: BSF 77.7
0078: GOTO 087
0079: BCF 77.7
007A: GOTO 087
007B: BCF 03.0
007C: BTFSC 07.6
007D: BSF 03.0
007E: RRF 40,F
007F: BSF 77.6
0080: GOTO 087
0081: BCF 77.6
0082: DECFSZ 77,F
0083: GOTO 07B
0084: MOVF 40,W
0085: MOVWF 78
0086: GOTO 092
0087: MOVLW 3F
0088: BTFSC 77.7
0089: MOVLW 11
008A: MOVWF 78
008B: DECFSZ 78,F
008C: GOTO 08B
008D: BTFSC 77.7
008E: GOTO 079
008F: BTFSC 77.6
0090: GOTO 081
0091: GOTO 07B
0092: BCF 0A.3
0093: BCF 0A.4
0094: GOTO 37B (RETURN)
*
0358: MOVLW FF
0359: BCF 03.5
035A: MOVWF 20
.................... // rs232 setting
....................
.................... #define DO_NOTHING 0
.................... #define DO_START_ADC 1
.................... #define DO_END_ADC 2
....................
....................
.................... /*===========================================================================*/
.................... void main(void)
.................... {
*
0347: CLRF 04
0348: BCF 03.7
0349: MOVLW 1F
034A: ANDWF 03,F
034B: BCF 20.7
034C: MOVF 20,W
034D: BSF 03.5
034E: MOVWF 07
034F: BCF 03.5
0350: BSF 07.7
0351: BSF 03.5
0352: BSF 1F.0
0353: BSF 1F.1
0354: BSF 1F.2
0355: BCF 1F.3
0356: MOVLW 07
0357: MOVWF 1C
.................... int16 int_volt;
.................... int8 str_volt[21];
.................... float flt_volt;
.................... int8 do_what = DO_NOTHING;
*
035D: CLRF 3E
.................... int8 tmp;
.................... printf( "S: Start ADC\n\r");
035E: CLRF 40
035F: MOVF 40,W
0360: CALL 004
0361: INCF 40,F
0362: MOVWF 77
0363: MOVWF 42
0364: CALL 049
0365: MOVLW 0E
0366: SUBWF 40,W
0367: BTFSS 03.2
0368: GOTO 35F
.................... Printf( "Q: END ADC\n\r");
0369: CLRF 40
036A: MOVF 40,W
036B: CALL 017
036C: INCF 40,F
036D: MOVWF 77
036E: MOVWF 42
036F: CALL 049
0370: MOVLW 0C
0371: SUBWF 40,W
0372: BTFSS 03.2
0373: GOTO 36A
.................... while(1){
.................... // if rs232 get char
.................... if(0 != kbhit())
0374: MOVLW 00
0375: BTFSS 07.6
0376: MOVLW 01
0377: XORLW 00
0378: BTFSC 03.2
0379: GOTO 3BF
.................... {
.................... tmp = fgetc(MYPC);
037A: GOTO 06D
037B: MOVF 78,W
037C: MOVWF 3F
.................... switch(tmp)
.................... {
037D: MOVF 3F,W
037E: XORLW 53
037F: BTFSC 03.2
0380: GOTO 38B
0381: XORLW 20
0382: BTFSC 03.2
0383: GOTO 38B
0384: XORLW 22
0385: BTFSC 03.2
0386: GOTO 3AC
0387: XORLW 20
0388: BTFSC 03.2
0389: GOTO 3AC
038A: GOTO 3BB
.................... case 'S':
.................... case 's':
.................... printf( "S: Start ADC\n\r" );
038B: CLRF 40
038C: MOVF 40,W
038D: CALL 004
038E: INCF 40,F
038F: MOVWF 77
0390: MOVWF 42
0391: CALL 049
0392: MOVLW 0E
0393: SUBWF 40,W
0394: BTFSS 03.2
0395: GOTO 38C
.................... do_what = DO_START_ADC;
0396: MOVLW 01
0397: MOVWF 3E
....................
.................... // init pic16f877a adc
.................... setup_adc_ports(RA0_RA1_RA3_ANALOG);
0398: BSF 03.5
0399: BCF 1F.0
039A: BCF 1F.1
039B: BSF 1F.2
039C: BCF 1F.3
.................... setup_adc(ADC_CLOCK_INTERNAL);
039D: BCF 1F.6
039E: BCF 03.5
039F: BSF 1F.6
03A0: BSF 1F.7
03A1: BSF 03.5
03A2: BSF 1F.7
03A3: BCF 03.5
03A4: BSF 1F.0
.................... set_adc_channel(3);
03A5: MOVLW 18
03A6: MOVWF 78
03A7: MOVF 1F,W
03A8: ANDLW C7
03A9: IORWF 78,W
03AA: MOVWF 1F
.................... break;
03AB: GOTO 3BF
.................... case 'Q':
.................... case 'q':
.................... printf( "Q:EndADC\n\r" );
03AC: CLRF 40
03AD: MOVF 40,W
03AE: CALL 028
03AF: INCF 40,F
03B0: MOVWF 77
03B1: MOVWF 42
03B2: CALL 049
03B3: MOVLW 0A
03B4: SUBWF 40,W
03B5: BTFSS 03.2
03B6: GOTO 3AD
.................... do_what = DO_END_ADC;
03B7: MOVLW 02
03B8: MOVWF 3E
....................
.................... // adc off
.................... setup_adc(ADC_OFF);
03B9: BCF 1F.0
.................... break;
03BA: GOTO 3BF
.................... default : // rs232 get other char
.................... putc(tmp);
03BB: MOVF 3F,W
03BC: MOVWF 42
03BD: CALL 049
.................... break;
03BE: GOTO 3BF
.................... }//end switch(tmp)
.................... }//end if(kbhit())
....................
.................... switch(do_what)
.................... {
03BF: MOVF 3E,W
03C0: XORLW 01
03C1: BTFSC 03.2
03C2: GOTO 3CA
03C3: XORLW 03
03C4: BTFSC 03.2
03C5: GOTO 44F
03C6: XORLW 02
03C7: BTFSC 03.2
03C8: GOTO 450
03C9: GOTO 451
.................... case DO_START_ADC:
.................... // start adc and send result to PC
.................... int_volt = read_adc();
03CA: BSF 1F.2
03CB: BTFSC 1F.2
03CC: GOTO 3CB
03CD: BSF 03.5
03CE: MOVF 1E,W
03CF: BCF 03.5
03D0: MOVWF 23
03D1: MOVF 1E,W
03D2: MOVWF 24
.................... flt_volt = 5.0 * int_volt / 0x3ff;
03D3: MOVF 24,W
03D4: MOVWF 41
03D5: MOVF 23,W
03D6: MOVWF 40
03D7: GOTO 095
03D8: CLRF 51
03D9: CLRF 50
03DA: MOVLW 20
03DB: MOVWF 4F
03DC: MOVLW 81
03DD: MOVWF 4E
03DE: MOVF 7A,W
03DF: MOVWF 55
03E0: MOVF 79,W
03E1: MOVWF 54
03E2: MOVF 78,W
03E3: MOVWF 53
03E4: MOVF 77,W
03E5: MOVWF 52
03E6: CALL 0B4
03E7: MOVF 77,W
03E8: MOVWF 40
03E9: MOVF 78,W
03EA: MOVWF 41
03EB: MOVF 79,W
03EC: MOVWF 42
03ED: MOVF 7A,W
03EE: MOVWF 43
03EF: MOVWF 47
03F0: MOVF 79,W
03F1: MOVWF 46
03F2: MOVF 78,W
03F3: MOVWF 45
03F4: MOVF 77,W
03F5: MOVWF 44
03F6: CLRF 4B
03F7: MOVLW C0
03F8: MOVWF 4A
03F9: MOVLW 7F
03FA: MOVWF 49
03FB: MOVLW 88
03FC: MOVWF 48
03FD: GOTO 129
03FE: MOVF 7A,W
03FF: MOVWF 3D
0400: MOVF 79,W
0401: MOVWF 3C
0402: MOVF 78,W
0403: MOVWF 3B
0404: MOVF 77,W
0405: MOVWF 3A
.................... sprintf(str_volt, "ADC: %1.3fV\n\r", flt_volt);
*
035B: CLRF 21
035C: CLRF 22
*
0406: CLRF 22
0407: MOVLW 25
0408: MOVWF 21
0409: CLRF 40
040A: MOVF 40,W
040B: CALL 037
040C: INCF 40,F
040D: MOVWF 77
040E: MOVWF 4E
040F: CALL 1F5
0410: MOVLW 05
0411: SUBWF 40,W
0412: BTFSS 03.2
0413: GOTO 40A
0414: MOVLW 89
0415: MOVWF 04
0416: MOVF 3D,W
0417: MOVWF 44
0418: MOVF 3C,W
0419: MOVWF 43
041A: MOVF 3B,W
041B: MOVWF 42
041C: MOVF 3A,W
041D: MOVWF 41
041E: MOVLW 03
041F: MOVWF 45
0420: GOTO 265
0421: MOVLW 56
0422: MOVWF 4E
0423: CALL 1F5
0424: MOVLW 0A
0425: MOVWF 4E
0426: CALL 1F5
0427: MOVLW 0D
0428: MOVWF 4E
0429: CALL 1F5
.................... printf(str_volt);
042A: MOVLW 25
042B: MOVWF 04
042C: BCF 03.7
042D: MOVLW 00
042E: IORWF 00,W
042F: BTFSC 03.2
0430: GOTO 441
0431: CLRF 41
0432: MOVF 04,W
0433: MOVWF 40
0434: BCF 41.0
0435: BTFSC 03.7
0436: BSF 41.0
0437: MOVF 00,W
0438: MOVWF 42
0439: CALL 049
043A: MOVF 40,W
043B: MOVWF 04
043C: BCF 03.7
043D: BTFSC 41.0
043E: BSF 03.7
043F: INCF 04,F
0440: GOTO 42D
.................... printf( "\n\r" );
0441: MOVLW 0A
0442: MOVWF 42
0443: CALL 049
0444: MOVLW 0D
0445: MOVWF 42
0446: CALL 049
.................... delay_ms(500);
0447: MOVLW 02
0448: MOVWF 40
0449: MOVLW FA
044A: MOVWF 41
044B: GOTO 331
044C: DECFSZ 40,F
044D: GOTO 449
.................... break;
044E: GOTO 452
.................... case DO_END_ADC:
.................... // you want to do
.................... break;
044F: GOTO 452
.................... case DO_NOTHING:
.................... // you want to do
.................... break;
0450: GOTO 452
.................... default:
.................... break;
0451: GOTO 452
.................... }//end switch(do_what)
....................
.................... }//end while(1)
0452: GOTO 374
.................... }//end main()
....................
0453: SLEEP
Configuration Fuses:
Word 1: 3F72 HS NOWDT PUT NODEBUG NOPROTECT BROWNOUT NOLVP NOCPD NOWRT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -