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

📄 pbp_interput2.lst

📁 使用PIC Basic Pro语言开发PIC单片机应用程序时使用Timer中断的应用实例
💻 LST
📖 第 1 页 / 共 5 页
字号:
MPASM 03.80 Released                        PBP_INTERPUT2.ASM   6-15-2008  11:45:37         PAGE  1


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001 
                      00002 ; PicBasic Pro Compiler 2.46, (c) 1998, 2005 microEngineering Labs, Inc. All Rights Reserved.  
  00000001            00003 MPASMWIN_USED                   EQU     1
                      00004 
                      00005         INCLUDE "C:\PBP246\16F877A.INC"
                      00001 ;****************************************************************
                      00002 ;*  16F877A.INC                                                 *
                      00003 ;*                                                              *
                      00004 ;*  By        : Leonard Zerman, Jeff Schmoyer                   *
                      00005 ;*  Notice    : Copyright (c) 2003 microEngineering Labs, Inc.  *
                      00006 ;*              All Rights Reserved                             *
                      00007 ;*  Date      : 11/06/03                                        *
                      00008 ;*  Version   : 2.45                                            *
                      00009 ;*  Notes     :                                                 *
                      00010 ;****************************************************************
                      00019         LIST
                      00020         LIST p = 16F877A, r = dec, w = -302
                      00021         INCLUDE "P16F877A.INC"  ; MPASM  Header
                      00001         LIST
                      00002 ; P16F877A.INC  Standard Header File, Version 1.00    Microchip Technology, Inc.
                      00398         LIST
2007   3F7D           00022         __config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF
                      00025         LIST
                      00006 
                      00007 
                      00008 ; Define statements.
                      00009 ; C:\PBP246\16F877A.BAS         00018   DEFINE  CODE_SIZE 8
                      00010 #define         CODE_SIZE                8
                      00011 
  00000020            00012 RAM_START                       EQU     00020h
  000001EF            00013 RAM_END                         EQU     001EFh
  00000004            00014 RAM_BANKS                       EQU     00004h
  00000020            00015 BANK0_START                     EQU     00020h
  0000007F            00016 BANK0_END                       EQU     0007Fh
  000000A0            00017 BANK1_START                     EQU     000A0h
  000000EF            00018 BANK1_END                       EQU     000EFh
  00000110            00019 BANK2_START                     EQU     00110h
  0000016F            00020 BANK2_END                       EQU     0016Fh
  00000190            00021 BANK3_START                     EQU     00190h
  000001EF            00022 BANK3_END                       EQU     001EFh
  00002100            00023 EEPROM_START                    EQU     02100h
  000021FF            00024 EEPROM_END                      EQU     021FFh
                      00025 
                      00026 ; C:\PBP246\PBPPIC14.RAM        00012   R0      VAR     WORD BANK0 SYSTEM       ' System Register
  00000020            00027 R0                              EQU     RAM_START + 000h
                      00028 ; C:\PBP246\PBPPIC14.RAM        00013   R1      VAR     WORD BANK0 SYSTEM       ' System Register
  00000022            00029 R1                              EQU     RAM_START + 002h
                      00030 ; C:\PBP246\PBPPIC14.RAM        00014   R2      VAR     WORD BANK0 SYSTEM       ' System Register
  00000024            00031 R2                              EQU     RAM_START + 004h
                      00032 ; C:\PBP246\PBPPIC14.RAM        00015   R3      VAR     WORD BANK0 SYSTEM       ' System Register
  00000026            00033 R3                              EQU     RAM_START + 006h
                      00034 ; C:\PBP246\PBPPIC14.RAM        00016   R4      VAR     WORD BANK0 SYSTEM       ' System Register
  00000028            00035 R4                              EQU     RAM_START + 008h
MPASM 03.80 Released                        PBP_INTERPUT2.ASM   6-15-2008  11:45:37         PAGE  2


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00036 ; C:\PBP246\PBPPIC14.RAM        00017   R5      VAR     WORD BANK0 SYSTEM       ' System Register
  0000002A            00037 R5                              EQU     RAM_START + 00Ah
                      00038 ; C:\PBP246\PBPPIC14.RAM        00018   R6      VAR     WORD BANK0 SYSTEM       ' System Register
  0000002C            00039 R6                              EQU     RAM_START + 00Ch
                      00040 ; C:\PBP246\PBPPIC14.RAM        00019   R7      VAR     WORD BANK0 SYSTEM       ' System Register
  0000002E            00041 R7                              EQU     RAM_START + 00Eh
                      00042 ; C:\PBP246\PBPPIC14.RAM        00020   R8      VAR     WORD BANK0 SYSTEM       ' System Register
  00000030            00043 R8                              EQU     RAM_START + 010h
                      00044 ; C:\PBP246\PBPPIC14.RAM        00026   FLAGS   VAR     BYTE BANK0 SYSTEM       ' Static flags
  00000032            00045 FLAGS                           EQU     RAM_START + 012h
                      00046 ; C:\PBP246\PBPPIC14.RAM        00025   GOP     VAR     BYTE BANK0 SYSTEM       ' Gen Op Parameter
  00000033            00047 GOP                             EQU     RAM_START + 013h
                      00048 ; C:\PBP246\PBPPIC14.RAM        00022   RM1     VAR     BYTE BANK0 SYSTEM       ' Pin 1 Mask
  00000034            00049 RM1                             EQU     RAM_START + 014h
                      00050 ; C:\PBP246\PBPPIC14.RAM        00024   RM2     VAR     BYTE BANK0 SYSTEM       ' Pin 2 Mask
  00000035            00051 RM2                             EQU     RAM_START + 015h
                      00052 ; C:\PBP246\PBPPIC14.RAM        00021   RR1     VAR     BYTE BANK0 SYSTEM       ' Pin 1 Register
  00000036            00053 RR1                             EQU     RAM_START + 016h
                      00054 ; C:\PBP246\PBPPIC14.RAM        00023   RR2     VAR     BYTE BANK0 SYSTEM       ' Pin 2 Register
  00000037            00055 RR2                             EQU     RAM_START + 017h
                      00056 ; D:\MCD\PRACTISE\PBP_INTERPUT2.BAS     00001       loops   VAR WORD 
  00000038            00057 _loops                          EQU     RAM_START + 018h
                      00058 ; C:\PBP246\16F877A.BAS         00022   PORTL   VAR     PORTB
  00000006            00059 _PORTL                          EQU      PORTB
                      00060 ; C:\PBP246\16F877A.BAS         00023   PORTH   VAR     PORTC
  00000007            00061 _PORTH                          EQU      PORTC
                      00062 ; C:\PBP246\16F877A.BAS         00024   TRISL   VAR     TRISB
  00000086            00063 _TRISL                          EQU      TRISB
                      00064 ; C:\PBP246\16F877A.BAS         00025   TRISH   VAR     TRISC
  00000087            00065 _TRISH                          EQU      TRISC
                      00066 #define _PORTC_0                 PORTC, 000h
                      00067 #define _PORTC_3                 PORTC, 003h
                      00068 #define _PORTC_2                 PORTC, 002h
                      00069         INCLUDE "PBP_INTERPUT2.MAC"
                      00001 
                      00121         LIST
                      00070         INCLUDE "C:\PBP246\PBPPIC14.LIB"
                      00001 ;******************************************************************
                      00002 ;*  PBPPIC14.LIB                                                  *
                      00003 ;*                                                                *
                      00004 ;*  By        : Leonard Zerman, Jeff Schmoyer                     *
                      00005 ;*  Notice    : Copyright (c) 2004 microEngineering Labs, Inc.    *
                      00006 ;*              All Rights Reserved                               *
                      00007 ;*  Date      : 12/20/04                                          *
                      00008 ;*  Version   : 2.46                                              *
                      00009 ;*  Notes     :                                                   *
                      00010 ;******************************************************************
                      00045   LIST
                      00046 ; Oscillator is 4MHz
                      01110   LIST
0000                  01111     ORG 0                       ; Reset vector at 0
                      01125   LIST
0000   283E           01126         goto    INIT            ; Finish initialization
MPASM 03.80 Released                        PBP_INTERPUT2.ASM   6-15-2008  11:45:37         PAGE  3


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      01165   LIST
0004                  01166     ORG 4                       ; Interrupt vector at 4
0004   0008           01167         return                  ; Return from interrupt without setting GIE
                      06136   LIST
0005   01A3           06137 PAUSE   clrf    R1 + 1
0006   00A2           06138 PAUSEL  movwf   R1
0007   30FF           06139 pauseloop movlw -1              ; 1 (9)
0008   07A2           06140         addwf   R1, F           ; 1
0009   1C03           06141         btfss   STATUS, C       ; 1 / 2
000A   07A3           06142         addwf   R1 + 1, F       ; 1 / 0
000B   1C03           06143         btfss   STATUS, C       ; 2
000C   2839           06144         goto    DONE
000D   3003           06145         movlw   (PAUSE_DELAY) >> 8      ; 1
000E   00A1           06146         movwf   R0 + 1          ; 1
000F   30DF           06147         movlw   low (PAUSE_DELAY)       ; 1
0010   2013           06148         call    PAUSEUSL        ; -2 (PAUSEUSL gives you 2 less than you ask for)
0011   2807           06149         goto    pauseloop       ; 2
                      06193   LIST
0012   01A1           06194 PAUSEUS clrf    R0 + 1          ; 1
0013   3EE8           06195 PAUSEUSL addlw  -24             ; 1 Subtract overhead
0014   00A0           06196         movwf   R0              ; 1
0015   09A1           06197         comf    R0 + 1, F       ; 1
0016   30FC           06198         movlw   -4              ; 1
0017   1C03           06199         btfss   STATUS, C       ; 1 / 2
0018   281C           06200         goto    pauseush        ; 2 / 0
0019   07A0           06201 pauseusloop addwf R0, F         ; 1
001A   1803           06202         btfsc   STATUS, C       ; 1 / 2
001B   2819           06203         goto    pauseusloop     ; 2 / 0
001C   07A0           06204 pauseush addwf  R0, F           ; 1 Do an extra countdown
                      06205         CLRWDT?NOP              ; 1 Keep Watchdog clear
                          M     ifndef NO_CLRWDT
001D   0064               M         clrwdt
                          M     else
                          M         nop
                          M     endif
001E   0FA1           06206         incfsz  R0 + 1, F       ; 1 / 2
001F   2819           06207         goto    pauseusloop     ; 2 / 0
0020   1820           06208         btfsc   R0, 0           ; 1 / 2
0021   2822           06209         goto    $ + 1           ; 2 / 0 Burn an extra cycle
0022   1CA0           06210         btfss   R0, 1           ; 1 / 2
0023   2826           06211         goto    pauseusdone     ; 2 / 0
0024   0000           06212         nop                     ; 1
0025   2826           06213         goto    $ + 1           ; 2 Burn an extra 2 cycles
0026   0008           06214 pauseusdone return              ; 2 + 3 (call + setup)
                      07004   LIST
0027   00A2           07005 CMPNE   movwf   R1
0028   3005           07006         movlw   5               ; Mask for < >
                      07007 ;       goto    CMP             ; Fall through
                      07023   LIST
0029   00A8           07024 CMP     movwf   R4              ; Save compare state
002A   0823           07025         movf    R1 + 1, W       ; Flags = MSB(R0) - MSB(R1)
002B   0221           07026         subwf   R0 + 1, W
002C   1D03           07027         btfss   STATUS, Z       ; If unequal then done
MPASM 03.80 Released                        PBP_INTERPUT2.ASM   6-15-2008  11:45:37         PAGE  4


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

002D   2830           07028         goto    cmpnoteq
002E   0822           07029         movf    R1, W           ; Flags = LSB(R0) - LSB(R1)
002F   0220           07030         subwf   R0, W
0030   3004           07031 cmpnoteq movlw  4               ; W = 4 if R0 < R1
0031   1803           07032         btfsc   STATUS, C
0032   3001           07033         movlw   1               ; W = 1 if R0 > R1
0033   1903           07034         btfsc   STATUS, Z
0034   3002           07035         movlw   2               ; W = 2 if R0 == R1
0035   0528           07036         andwf   R4, W           ; Mask for compare state
0036   1D03           07037         btfss   STATUS, Z
0037   30FF           07038         movlw   -1
0038   2839           07039         goto    DONE
                      07401   LIST
0039   1383           07402 DONE    bcf     STATUS, IRP     ; 1 Set FSR to bank 0/1
003A   1303           07403         bcf     STATUS, RP1     ; 1 Show direct bank 0
003B   1283           07404         bcf     STATUS, RP0     ; 1
                      07405         CLRWDT?NOP              ; 1 Hit Watchdog timer
                          M     ifndef NO_CLRWDT
003C   0064               M         clrwdt
                          M     else
                          M         nop
                          M     endif
003D   0008           07406 DONERET return                  ; 2 Done
                      07430   LIST
003E                  07431 INIT
                      07469   LIST
003E                  07470 main
                      00071 
                      00072 
                      00073 ; C:\PBP246\16F877A.BAS         00012   BANK0   $0020, $007F
                      00074 ; C:\PBP246\16F877A.BAS         00013   BANK1   $00A0, $00EF
                      00075 ; C:\PBP246\16F877A.BAS         00014   BANK2   $0110, $016F
                      00076 ; C:\PBP246\16F877A.BAS         00015   BANK3   $0190, $01EF
                      00077 ; C:\PBP246\16F877A.BAS         00016   EEPROM  $2100, $21FF
                      00078 ; C:\PBP246\16F877A.BAS         00017   LIBRARY "PBPPIC14"
                      00079 ; C:\PBP246\16F877A.BAS         00018   DEFINE  CODE_SIZE 8
                      00080 
                      00081 ; C:\PBP246\16F877A.BAS         00020           include "PIC14EXT.BAS"
                      00082 
                      00083 ; C:\PBP246\16F877A.BAS         00027           include "PBPPIC14.RAM"
                      00084 
                      00085 ; D:\MCD\PRACTISE\PBP_INTERPUT2.BAS     00002       loops   =   0    
                      00086         MOVE?CW 000h, _loops
                          M         CHK?RP  _loops
                          M     if (((_loops) & 180h) == 0)
                          M       if (PREV_BANK == 1)
                          M         bcf     STATUS, RP0
                          M       endif
                          M       if (PREV_BANK == 2)
                          M         bcf     STATUS, RP1
                          M       endif
                          M       if (PREV_BANK == 3)
                          M         bcf     STATUS, RP0
MPASM 03.80 Released                        PBP_INTERPUT2.ASM   6-15-2008  11:45:37         PAGE  5


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                          M         bcf     STATUS, RP1
                          M       endif
  00000000                M PREV_BANK = 0
                          M     endif
                          M 
                          M     if (((_loops) & 180h) == 80h)
                          M       if (PREV_BANK == 0)
                          M         bsf     STATUS, RP0
                          M       endif
                          M       if (PREV_BANK == 2)
                          M         bsf     STATUS, RP0
                          M         bcf     STATUS, RP1

⌨️ 快捷键说明

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