| Home Pic in Greek Παραδείγματα χρήσης Pic Πινακίδα Ι Λίστα εντολών προγράμματος |
Πινακίδα Ι - Λίστα εντολών προγράμματος
Source code file of signboard Αποθήκευση αρχείου στον σκληρό δίσκο R
    001
    002
    003
    004
    005
    006
    007
    008
    009
    010
    011
    012
    013
    014
    015
    016
    017
    018
    019
    020
    021
    022
    023
    024
    025
    026
    027
    028
    029
    030
    031
    032
    033
    034
    035
    036
    037
    038
    039
    040
    041
    042
    043
    044
    045
    046
    047
    048
    049
    050
    051
    052
    053
    054
    055
    056
    057
    058
    059
    060
    061
    062
    063
    064
    065
    066
    067
    068
    069
    070
    071
    072
    073
    074
    075
    076
    077
    078
    079
    080
    081
    082
    083
    084
    085
    086
    087
    088
    089
    090
    091
    092
    093
    094
    095
    096
    097
    098
    099
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    ;********************************************************
    ;
    ;             The signboard control processing
    ;
    ;                                 Author : Seiichi Inoue
    ;********************************************************

            list            p=pic16f84a
            include         p16f84a.inc
           __config _hs_osc & _wdt_off & _pwrte_on & _cp_off

    ;****************  Label Definition  ********************
    lpcnt   equ     0c              ;Screen loop counter adr
    scrnidx equ     0d              ;Screen data index adr
    w_save  equ     0e              ;W register save adr
    s_save  equ     0f              ;STATUS reg save adr
    scrnhd  equ     10              ;Screen table head adr
    tm_cnt  equ     20              ;Time adjust counter adr
    e_adr   equ     21              ;EEPROM data adr
    e_check equ     22              ;EEPROM end check cnt adr
    s_loop  equ     23              ;Screen data loop cnt adr
    s_index equ     24              ;Screen table index adr
    s_work  equ     25              ;Screen data work area

    ;************************
    ;*     Time adjust      *
    ;************************
    ;This data decides a scroll speed. Basic rate is 26msec.
    tm_adj  equ     0c              ;Time adjust(26msec x 12)

    ;************************
    ;*   EEPROM data size   *
    ;************************
    ;If the data size is 30 bytes, then simply set d'30'.
    e_size  equ    d'32'            ;EEPROM data size

    ;***************  EEPROM Data Definition  ***************
            org     h'2100'
            de      b'11111111'
            de      b'11111111'
            de      b'11100111'
            de      b'11000011'
            de      b'10000001'
            de      b'10000001'
            de      b'11000011'
            de      b'11100111'
            de      b'11111111'
            de      b'11111111'
            de      b'01111110'
            de      b'00000000'
            de      b'01111110'
            de      b'11111111'
            de      b'11110111'
            de      b'00000111'
            de      b'11110111'
            de      b'00000111'
            de      b'11111111'
            de      b'00000111'
            de      b'01110111'
            de      b'00000111'
            de      b'11111111'
            de      b'00000111'
            de      b'01111111'
            de      b'00000111'
            de      b'11111111'
            de      b'00000111'
            de      b'01010111'
            de      b'01000111'
            de      b'11111111'
            de      b'11111111'

    ;****************  Program Start  ***********************
            org     0               ;Reset Vector
            goto    init
            org     4               ;Interrupt Vector
            goto    int

    ;****************  Initial Process  *********************
            org     5
    init    bsf     status,rp0      ;Change to Bank1
            clrf    trisa           ;Set PORTA to Output mode
            clrf    trisb           ;Set PORTB to Output mode
            movlw   h'07'           ;TOCS=0,PSA=0,PS2/1/0=111
            movwf   option_reg      ;Set timer condition
            bcf     status,rp0      ;Change to Bank0
            movlw   h'00'           ;Set timer value
            movwf   tmr0            ;TMR0 = 0 (255 counts)
            movlw   tm_adj          ;Set time adjust value
            movwf   tm_cnt          ;Save time adjust
            clrf    e_adr           ;Clear EEPROM data adr
            movlw   e_size          ;Set EEPROM data size
            movwf   e_check         ;Save EEPROM end check
            movlw   h'a0'           ;GIE=1,TOIE=1
            movwf   intcon          ;Interruption enable

    ;**************  Screen Load Process  *******************
    screen  bsf     intcon,gie      ;Interrupt enable
            movlw   d'16'           ;Set loop count
            movwf   lpcnt           ;Save loop count
            movlw   h'0f'           ;Set screen index
            movwf   scrnidx         ;Save index
            bcf     intcon,gie      ;Interrupt disable
    scrnlp  movlw   h'ff'           ;Set LED OFF data
            movwf   portb           ;Output Data
            movf    scrnidx,w       ;Set Position
            movwf   porta           ;Output Position
            movlw   scrnhd          ;Set Table head address
            addwf   scrnidx,w       ;Head + Index
            movwf   fsr             ;Set Table address
            movf    indf,w          ;Read Data
            movwf   portb           ;Output Data
            decf    scrnidx,f       ;Index - 1
            decfsz  lpcnt,f         ;Loop end ?
            goto    scrnlp          ;No. Next line
            goto    screen          ;Yes. Next screen

    ;************  Begin Interruption Process  **************
    int     movwf   w_save          ;Save W register
            movf    status,w        ;Read STATUS reg
            movwf   s_save          ;Save STATUS reg
            btfsc   intcon,t0if     ;Time out interruption ?
            goto    timer_int       ;Jump to Timer process
            goto    init            ;Reset(Illegal interrupt)

    ;************  END of Interruption Process **************
    int_end movf    s_save,w        ;Read saved STATUS reg
            movwf   status          ;Recover STATUS reg
            swapf   w_save,f        ;Read saved W register
            swapf   w_save,w        ;Recover W register
            retfie

    ;***********  Time-out interruption Process  ************
    timer_int
            bcf     intcon,t0if     ;Clear timer int flag
            movlw   h'00'           ;Set timer value
            movwf   tmr0            ;TMR0 = 0 (255 counts)
            decfsz  tm_cnt,f        ;Time over ?
            goto    int_end         ;No. Retry
            movlw   tm_adj          ;Set time adjust value
            movwf   tm_cnt          ;Save time adjust

    ;************  Screen data shift Process  ***************
            movlw   d'15'           ;Set loop count
            movwf   s_loop          ;Save loop count
            movlw   scrnhd          ;Set screen head adr
            movwf   s_index         ;Set screen adr
    loop    incf    s_index,w       ;Inclement index
            movwf   fsr             ;Set read addres
            movf    indf,w          ;Read data
            movwf   s_work          ;Save data
            movf    s_index,w       ;Read index
            movwf   fsr             ;Set write address
            movf    s_work,w        ;Recover data
            movwf   indf            ;Write data
            incf    s_index,f       ;Inclement index
            decfsz  s_loop,f        ;All shifted ?
            goto    loop            ;No. Continue.

    ;**************  New data write Process  ****************
            movf    s_index,w       ;Read index
            movwf   fsr             ;Set write address
            movf    e_adr,w         ;Read EEPROM address
            movwf   eeadr           ;Set EEPROM address
            bsf     status,rp0      ;Change to Bank1
            bsf     eecon1,rd       ;Start EEPROM reading
            bcf     status,rp0      ;Change to Bank0
            movf    eedata,w        ;Read EEPROM data
            movwf   indf            ;Write new data
            incf    e_adr,f         ;Inclement data address
            decfsz  e_check,f       ;End of EEPROM data ?
            goto    int_end         ;No. Return
            clrf    e_adr           ;Clear EEPROM data adr
            movlw   e_size          ;Set EEPROM data size
            movwf   e_check         ;Save EEPROM end check
            goto    int_end         ;Return

    ;********************************************************
    ;          END of signboard control processing
    ;********************************************************

            end
Listing file of signboard
    MPASM 02.40 Released             SIGN.ASM   6-3-2000  17:01:23         PAGE  1

    LOC  OBJECT CODE     LINE SOURCE TEXT
      VALUE

                          00001 ;********************************************************
                          00002 ;
                          00003 ;             The signboard control processing
                          00004 ;
                          00005 ;                                 Author : Seiichi Inoue
                          00006 ;********************************************************
                          00007
                          00008         LIST            P=PIC16F84A
                          00009         INCLUDE         P16F84A.INC
                          00001         LIST
                          00002 ; P16F84A.INC  Standard Header File, Version 2.00(modify)
                          00134         LIST
    2007   3FF2           00010        __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
                          00011
                          00012 ;****************  Label Definition  ********************
      0000000C            00013 LPCNT   EQU     0C              ;Screen loop counter adr
      0000000D            00014 SCRNIDX EQU     0D              ;Screen data index adr
      0000000E            00015 W_SAVE  EQU     0E              ;W register save adr
      0000000F            00016 S_SAVE  EQU     0F              ;STATUS reg save adr
      00000010            00017 SCRNHD  EQU     10              ;Screen table head adr
      00000020            00018 TM_CNT  EQU     20              ;Time adjust counter adr
      00000021            00019 E_ADR   EQU     21              ;EEPROM data adr
      00000022            00020 E_CHECK EQU     22              ;EEPROM end check cnt adr
      00000023            00021 S_LOOP  EQU     23              ;Screen data loop cnt adr
      00000024            00022 S_INDEX EQU     24              ;Screen table index adr
      00000025            00023 S_WORK  EQU     25              ;Screen data work area
                          00024
                          00025 ;************************
                          00026 ;*     Time adjust      *
                          00027 ;************************
                          00028 ;This data decides a scroll speed. Basic rate is 26msec.
      0000000C            00029 TM_ADJ  EQU     0C              ;Time adjust(26msec x 12)
                          00030
                          00031
                          00032 ;************************
                          00033 ;*   EEPROM data size   *
                          00034 ;************************
                          00035 ;If the data size is 30 bytes, then simply set d'30'.
      00000020            00036 E_SIZE  EQU    D'32'            ;EEPROM data size
                          00037
                          00038 ;***************  EEPROM Data Definition  ***************
    2100                  00039         ORG     H'2100'
    2100   00FF           00040         DE      B'11111111'
    2101   00FF           00041         DE      B'11111111'
    2102   00E7           00042         DE      B'11100111'
    2103   00C3           00043         DE      B'11000011'
    2104   0081           00044         DE      B'10000001'
    2105   0081           00045         DE      B'10000001'
    2106   00C3           00046         DE      B'11000011'
    2107   00E7           00047         DE      B'11100111'
    2108   00FF           00048         DE      B'11111111'
    2109   00FF           00049         DE      B'11111111'
    210A   007E           00050         DE      B'01111110'
    MPASM 02.40 Released             SIGN.ASM   6-3-2000  17:01:23         PAGE  2

    LOC  OBJECT CODE     LINE SOURCE TEXT
      VALUE

    210B   0000           00051         DE      B'00000000'
    210C   007E           00052         DE      B'01111110'
    210D   00FF           00053         DE      B'11111111'
    210E   00F7           00054         DE      B'11110111'
    210F   0007           00055         DE      B'00000111'
    2110   00F7           00056         DE      B'11110111'
    2111   0007           00057         DE      B'00000111'
    2112   00FF           00058         DE      B'11111111'
    2113   0007           00059         DE      B'00000111'
    2114   0077           00060         DE      B'01110111'
    2115   0007           00061         DE      B'00000111'
    2116   00FF           00062         DE      B'11111111'
    2117   0007           00063         DE      B'00000111'
    2118   007F           00064         DE      B'01111111'
    2119   0007           00065         DE      B'00000111'
    211A   00FF           00066         DE      B'11111111'
    211B   0007           00067         DE      B'00000111'
    211C   0057           00068         DE      B'01010111'
    211D   0047           00069         DE      B'01000111'
    211E   00FF           00070         DE      B'11111111'
    211F   00FF           00071         DE      B'11111111'
                          00072
                          00073 ;****************  Program Start  ***********************
    0000                  00074         ORG     0               ;Reset Vector
    0000   2805           00075         GOTO    INIT
    0004                  00076         ORG     4               ;Interrupt Vector
    0004   2827           00077         GOTO    INT
                          00078
                          00079 ;****************  Initial Process  *********************
    0005                  00080         ORG     5
    0005   1683           00081 INIT    BSF     STATUS,RP0      ;Change to Bank1
    0006   0185           00082         CLRF    TRISA           ;Set PORTA to Output mode
    0007   0186           00083         CLRF    TRISB           ;Set PORTB to Output mode
    0008   3007           00084         MOVLW   H'07'           ;TOCS=0,PSA=0,PS2/1/0=111
    0009   0081           00085         MOVWF   OPTION_REG      ;Set timer condition
    000A   1283           00086         BCF     STATUS,RP0      ;Change to Bank0
    000B   3000           00087         MOVLW   H'00'           ;Set timer value
    000C   0081           00088         MOVWF   TMR0            ;TMR0 = 0 (255 counts)
    000D   300C           00089         MOVLW   TM_ADJ          ;Set time adjust value
    000E   00A0           00090         MOVWF   TM_CNT          ;Save time adjust
    000F   01A1           00091         CLRF    E_ADR           ;Clear EEPROM data adr
    0010   3020           00092         MOVLW   E_SIZE          ;Set EEPROM data size
    0011   00A2           00093         MOVWF   E_CHECK         ;Save EEPROM end check
    0012   30A0           00094         MOVLW   H'a0'           ;GIE=1,TOIE=1
    0013   008B           00095         MOVWF   INTCON          ;Interruption enable
                          00096
                          00097 ;**************  Screen Load Process  *******************
    0014   178B           00098 SCREEN  BSF     INTCON,GIE      ;Interrupt enable
    0015   3010           00099         MOVLW   D'16'           ;Set loop count
    0016   008C           00100         MOVWF   LPCNT           ;Save loop count
    0017   300F           00101         MOVLW   H'0f'           ;Set screen index
    0018   008D           00102         MOVWF   SCRNIDX         ;Save index
    0019   138B           00103         BCF     INTCON,GIE      ;Interrupt disable
    MPASM 02.40 Released             SIGN.ASM   6-3-2000  17:01:23         PAGE  3

    LOC  OBJECT CODE     LINE SOURCE TEXT
      VALUE

    001A   30FF           00104 SCRNLP  MOVLW   H'ff'           ;Set LED OFF data
    001B   0086           00105         MOVWF   PORTB           ;Output Data
    001C   080D           00106         MOVF    SCRNIDX,W       ;Set Position
    001D   0085           00107         MOVWF   PORTA           ;Output Position
    001E   3010           00108         MOVLW   SCRNHD          ;Set Table head address
    001F   070D           00109         ADDWF   SCRNIDX,W       ;Head + Index
    0020   0084           00110         MOVWF   FSR             ;Set Table address
    0021   0800           00111         MOVF    INDF,W          ;Read Data
    0022   0086           00112         MOVWF   PORTB           ;Output Data
    0023   038D           00113         DECF    SCRNIDX,F       ;Index - 1
    0024   0B8C           00114         DECFSZ  LPCNT,F         ;Loop end ?
    0025   281A           00115         GOTO    SCRNLP          ;No. Next line
    0026   2814           00116         GOTO    SCREEN          ;Yes. Next screen
                          00117
                          00118 ;************  Begin Interruption Process  **************
    0027   008E           00119 INT     MOVWF   W_SAVE          ;Save W register
    0028   0803           00120         MOVF    STATUS,W        ;Read STATUS reg
    0029   008F           00121         MOVWF   S_SAVE          ;Save STATUS reg
    002A   190B           00122         BTFSC   INTCON,T0IF     ;Time out interruption ?
    002B   2832           00123         GOTO    TIMER_INT       ;Jump to Timer process
    002C   2805           00124         GOTO    INIT            ;Reset(Illegal interrupt)
                          00125
                          00126 ;************  END of Interruption Process **************
    002D   080F           00127 INT_END MOVF    S_SAVE,W        ;Read saved STATUS reg
    002E   0083           00128         MOVWF   STATUS          ;Recover STATUS reg
    002F   0E8E           00129         SWAPF   W_SAVE,F        ;Read saved W register
    0030   0E0E           00130         SWAPF   W_SAVE,W        ;Recover W register
    0031   0009           00131         RETFIE
                          00132
                          00133 ;***********  Time-out interruption Process  ************
    0032                  00134 TIMER_INT
    0032   110B           00135         BCF     INTCON,T0IF     ;Clear timer int flag
    0033   3000           00136         MOVLW   H'00'           ;Set timer value
    0034   0081           00137         MOVWF   TMR0            ;TMR0 = 0 (255 counts)
    0035   0BA0           00138         DECFSZ  TM_CNT,F        ;Time over ?
    0036   282D           00139         GOTO    INT_END         ;No. Retry
    0037   300C           00140         MOVLW   TM_ADJ          ;Set time adjust value
    0038   00A0           00141         MOVWF   TM_CNT          ;Save time adjust
                          00142
                          00143 ;************  Screen data shift Process  ***************
    0039   300F           00144         MOVLW   D'15'           ;Set loop count
    003A   00A3           00145         MOVWF   S_LOOP          ;Save loop count
    003B   3010           00146         MOVLW   SCRNHD          ;Set screen head adr
    003C   00A4           00147         MOVWF   S_INDEX         ;Set screen adr
    003D   0A24           00148 LOOP    INCF    S_INDEX,W       ;Inclement index
    003E   0084           00149         MOVWF   FSR             ;Set read addres
    003F   0800           00150         MOVF    INDF,W          ;Read data
    0040   00A5           00151         MOVWF   S_WORK          ;Save data
    0041   0824           00152         MOVF    S_INDEX,W       ;Read index
    0042   0084           00153         MOVWF   FSR             ;Set write address
    0043   0825           00154         MOVF    S_WORK,W        ;Recover data
    0044   0080           00155         MOVWF   INDF            ;Write data
    0045   0AA4           00156         INCF    S_INDEX,F       ;Inclement index
    MPASM 02.40 Released             SIGN.ASM   6-3-2000  17:01:23         PAGE  4

    LOC  OBJECT CODE     LINE SOURCE TEXT
      VALUE

    0046   0BA3           00157         DECFSZ  S_LOOP,F        ;All shifted ?
    0047   283D           00158         GOTO    LOOP            ;No. Continue.
                          00159
                          00160 ;**************  New data write Process  ****************
    0048   0824           00161         MOVF    S_INDEX,W       ;Read index
    0049   0084           00162         MOVWF   FSR             ;Set write address
    004A   0821           00163         MOVF    E_ADR,W         ;Read EEPROM address
    004B   0089           00164         MOVWF   EEADR           ;Set EEPROM address
    004C   1683           00165         BSF     STATUS,RP0      ;Change to Bank1
    004D   1408           00166         BSF     EECON1,RD       ;Start EEPROM reading
    004E   1283           00167         BCF     STATUS,RP0      ;Change to Bank0
    004F   0808           00168         MOVF    EEDATA,W        ;Read EEPROM data
    0050   0080           00169         MOVWF   INDF            ;Write new data
    0051   0AA1           00170         INCF    E_ADR,F         ;Inclement data address
    0052   0BA2           00171         DECFSZ  E_CHECK,F       ;End of EEPROM data ?
    0053   282D           00172         GOTO    INT_END         ;No. Return
    0054   01A1           00173         CLRF    E_ADR           ;Clear EEPROM data adr
    0055   3020           00174         MOVLW   E_SIZE          ;Set EEPROM data size
    0056   00A2           00175         MOVWF   E_CHECK         ;Save EEPROM end check
    0057   282D           00176         GOTO    INT_END         ;Return
                          00177
                          00178 ;********************************************************
                          00179 ;          END of signboard control processing
                          00180 ;********************************************************
                          00181
                          00182         END
    MPASM 02.40 Released             SIGN.ASM   6-3-2000  17:01:23         PAGE  5

    SYMBOL TABLE
      LABEL                             VALUE

    C                                 00000000
    DC                                00000001
    EEADR                             00000009
    EECON1                            00000008
    EECON2                            00000009
    EEDATA                            00000008
    EEIE                              00000006
    EEIF                              00000004
    E_ADR                             00000021
    E_CHECK                           00000022
    E_SIZE                            00000020
    F                                 00000001
    FSR                               00000004
    GIE                               00000007
    INDF                              00000000
    INIT                              00000005
    INT                               00000027
    INTCON                            0000000B
    INTE                              00000004
    INTEDG                            00000006
    INTF                              00000001
    INT_END                           0000002D
    IRP                               00000007
    LOOP                              0000003D
    LPCNT                             0000000C
    NOT_PD                            00000003
    NOT_RBPU                          00000007
    NOT_TO                            00000004
    OPTION_REG                        00000001
    PCL                               00000002
    PCLATH                            0000000A
    PORTA                             00000005
    PORTB                             00000006
    PS0                               00000000
    PS1                               00000001
    PS2                               00000002
    PSA                               00000003
    RBIE                              00000003
    RBIF                              00000000
    RD                                00000000
    RP0                               00000005
    RP1                               00000006
    SCREEN                            00000014
    SCRNHD                            00000010
    SCRNIDX                           0000000D
    SCRNLP                            0000001A
    STATUS                            00000003
    S_INDEX                           00000024
    S_LOOP                            00000023
    S_SAVE                            0000000F
    S_WORK                            00000025
    T0CS                              00000005
    T0IE                              00000005
    MPASM 02.40 Released             SIGN.ASM   6-3-2000  17:01:23         PAGE  6

    SYMBOL TABLE
      LABEL                             VALUE

    T0IF                              00000002
    T0SE                              00000004
    TIMER_INT                         00000032
    TMR0                              00000001
    TM_ADJ                            0000000C
    TM_CNT                            00000020
    TRISA                             00000005
    TRISB                             00000006
    W                                 00000000
    WR                                00000001
    WREN                              00000002
    WRERR                             00000003
    W_SAVE                            0000000E
    Z                                 00000002
    _CP_OFF                           00003FFF
    _CP_ON                            0000000F
    _HS_OSC                           00003FFE
    _LP_OSC                           00003FFC
    _PWRTE_OFF                        00003FFF
    _PWRTE_ON                         00003FF7
    _RC_OSC                           00003FFF
    _WDT_OFF                          00003FFB
    _WDT_ON                           00003FFF
    _XT_OSC                           00003FFD
    __16F84A                          00000001

    MEMORY USAGE MAP ('X' = Used,  '-' = Unused)

    0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
    0040 : XXXXXXXXXXXXXXXX XXXXXXXX-------- ---------------- ----------------
    2000 : -------X-------- ---------------- ---------------- ----------------
    2100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ---------------- ----------------

    All other memory blocks unused.

    Program Memory Words Used:    85
    Program Memory Words Free:   939

    Errors   :     0
    Warnings :     0 reported,     0 suppressed
    Messages :     0 reported,     0 suppressed