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

📄 adc1.lst

📁 Write by CCS for P铆c6F877a
💻 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 + -