pic16f84a, security access control

Discussion in 'Embedded Systems and Microcontrollers' started by Pooja Goel, Apr 26, 2010.

  1. Pooja Goel

    Thread Starter New Member

    Apr 26, 2010
    6
    0
    Hi
    i m new to this site and dont know where to post my questions.
    could u please help me with the debugging of a code of pic16f84a.

    thanks in advance
    m attaching my code
     
    Last edited: Apr 26, 2010
  2. bertus

    Administrator

    Apr 5, 2008
    15,648
    2,348
  3. retched

    AAC Fanatic!

    Dec 5, 2009
    5,201
    312
    OPs Code out of .doc file and tagged:

    Code ( (Unknown Language)):
    1.  
    2. ************************** SECURITY ACCESS CONTROL SYSTEM BY MITESH SHAH *******************
    3. PROCESSOR       16F84A
    4.  
    5.     ORG     RAM
    6.  
    7. DEL0    EQU     RAM+0
    8. DEL1    EQU     RAM+1
    9. DEL10   EQU     RAM+2
    10. SCANLN  EQU     RAM+3
    11. RETVAL  EQU     RAM+4
    12. RETLN   EQU     RAM+5
    13. KEY     EQU     RAM+6
    14. SCANKEY EQU     RAM+7
    15. NEWKEY  EQU     RAM+8
    16.  
    17. NCODE0  EQU     RAM+0BH
    18. NCODE1  EQU     RAM+0CH
    19. NCODE2  EQU     RAM+0DH
    20. NCODE3  EQU     RAM+0EH
    21. NCODE4  EQU     RAM+0FH
    22. NCODE5  EQU     RAM+10H
    23.  
    24. TRIES   EQU     RAM+11H
    25.  
    26. ;ARM     EQU     RAM+12H
    27.  
    28. ;LAST RAM LOCATATION = RAM + 23H
    29.  
    30.  
    31. RDEEPROM:
    32.         BSF     STATUS,RP0
    33.         BSF     EECON1,RD
    34.         BCF     STATUS,RP0
    35.  
    36.         RETURN
    37.  
    38. WREEPROM:
    39.  
    40.         BCF     INTCON,GIE      ;DISABLE INTS
    41.         BSF     STATUS,RP0      ;BANK 1
    42.        
    43.    
    44.         ;WRITE SEQUENCE
    45.  
    46.         MOVLW   55H
    47.         MOVWF   EECON2
    48.         MOVLW   0AAH
    49.         BSF     EECON1,WR        ;BEGIN WRITE
    50.  
    51. WAITWR:
    52.         BTFSC   EECON1,WR
    53.         GOTO    WAITWR          
    54.  
    55.         BCF     STATUS,RP0      ;BANK 0
    56.         BSF     INTCON,GIE      ;REENABLE INTS
    57.  
    58.         RETURN
    59.  
    60. NOSIG:
    61.        
    62.         CLRF    EEADR
    63.         MOVLW   1
    64.         MOVWF   EEDATA
    65. WRCOD:
    66.        
    67.        CALL    WREEPROM
    68.         INCF    EEDATA
    69.         INCF    EEADR
    70.         MOVLW   6
    71.         SUBWF   EEADR,W
    72.         JNZ     WRCOD
    73.  
    74.         ;CODE WRITTEN, WRITE SIGNATURE
    75.  
    76.         MOVLW   0AAH
    77.         MOVWF   EEDATA
    78.         CALL    WREEPROM
    79.         INCF    EEADR
    80.  
    81.         MOVLW   055H
    82.         MOVWF   EEDATA
    83.         CALL    WREEPROM
    84.         INCF    EEADR
    85.  
    86.         MOVLW   0CCH
    87.         MOVWF   EEDATA
    88.         CALL    WREEPROM
    89.  
    90.         RETURN
    91.  
    92. ;============================================
    93. ; BEEP
    94. ; BEEPS 50MS
    95. ;============================================
    96. BEEP:
    97.         BSF     PORTA,2
    98.  
    99.         MOVLW   .5
    100.         MOVWF   DEL10
    101.         CALL    DELAY10
    102.         BCF     PORTA,2
    103.  
    104.         RETURN
    105.  
    106. ;BEE:
    107.         BSF     PORTA,3
    108.         MOVLW   .5
    109.         MOVWF   DEL10
    110.         CALL    DELAY10
    111.         BCF     PORTA,3
    112.  
    113.         RETURN
    114.  
    115.  
    116.  
    117. ;============================================
    118. ; DELAY10
    119. ; DELAYS DEL10 X 10MS
    120. ;============================================
    121. DELAY10:
    122.         ;DELAYLOOP 10 MS
    123.         MOVLW   .40
    124.         MOVWF   DEL1
    125. DEC250U:
    126.         ;DELAYLOOP 250 US
    127.         MOVLW   .83
    128.         MOVWF   DEL0
    129. DEC1U:
    130.         DECFSZ  DEL0
    131.         GOTO    DEC1U
    132.  
    133.         DECFSZ  DEL1
    134.         GOTO    DEC250U
    135.  
    136.         DECFSZ  DEL10
    137.         GOTO    DELAY10
    138.  
    139.         RETURN
    140. ;============================================
    141. DELAY   MACRO   DLY00
    142.         MOVLW   DLY00
    143.         MOVWF   DEL10
    144.         CALL    DELAY10
    145.         ENDM
    146.  
    147. SCANKEYBOARD:
    148.  
    149.        
    150.  
    151.         MOVLW   0
    152.         MOVWF   PORTB
    153.         CLRF    SCANLN
    154.         BSF     PORTB,0
    155.         NOP
    156.         MOVF    PORTB,W
    157.         ANDLW   B'01111000'
    158.         JNZ     RETL
    159.         INCF    SCANLN
    160.         BSF     PORTB,1
    161.         NOP
    162.         MOVF    PORTB,W
    163.         ANDLW   B'01111000'
    164.         BSF     PORTB,2
    165.         NOP
    166.         MOVF    PORTB,W
    167.         ANDLW   B'01111000'
    168.         JNZ     RETL
    169.         GOTO    NOKEYP          ;NO KEYPRESS
    170.  
    171.         ;SCANLINE FOUND, FIND RETURNLINE
    172. RETL:
    173.         CLRF    RETLN
    174.         MOVF    PORTB,W
    175.         MOVWF   RETVAL
    176.         RRF     RETVAL
    177.         RRF     RETVAL
    178.         RRF     RETVAL
    179. NXTRL:
    180.         BCF     STATUS,CARRY
    181.         RRF     RETVAL
    182.         JC      KEYFOUND
    183.         INCF    RETLN
    184.         MOVLW   4
    185.         SUBWF   RETLN,W
    186.         JNZ     NXTRL
    187.  
    188.         ;NO (NEW) KEY PRESSED, EXIT
    189. NOKEYP:
    190.         MOVLW   NOKEY
    191.         MOVWF   SCANKEY
    192.         RETURN
    193.  
    194.  
    195. GETKEY:
    196.         CALL    SCANKEYBOARD
    197.         MOVF    SCANKEY,W
    198.         MOVWF   KEY
    199.         MOVLW   .2
    200.         MOVWF   DEL10
    201.         CALL    DELAY           ;DELAY 20MS
    202.         CALL    SCANKEYBOARD
    203.         MOVF    SCANKEY,W
    204.         SUBWF   KEY,W
    205.         JNZ     GETKEY
    206.  
    207.        
    208.         MOVLW   NOKEY
    209.         SUBWF   KEY,W
    210.         JNZ     EXITKEY
    211.         MOVLW   1
    212.         MOVWF   NEWKEY          ;NEXT KEY IS NEW
    213.         GOTO    PKEY
    214.  
    215. EXITKEY:
    216.         MOVLW   1
    217.         SUBWF   NEWKEY,W
    218.         JNZ     PKEY
    219.         CLRF    NEWKEY
    220.         RETURN
    221.  
    222. PKEY:   ;EXIT NOKEY
    223.         MOVLW   NOKEY
    224.         MOVWF   KEY
    225.         RETURN
    226.  
    227. READKEY:
    228.         CALL    GETKEY
    229.         MOVLW   NOKEY
    230.         SUBWF   KEY,W
    231.         JZ      READKEY
    232.         CALL    BEEP
    233.  
    234.         RETURN
    235.  
    236.  
    237. START:
    238.         CALL    INIT
    239.         CALL    BEEP
    240.  
    241. RDKEY:
    242.         CALL    READKEY         ;WAIT FOR KEY
    243.  
    244.         ;KEY PRESSED
    245.  
    246.         MOVLW   STERRETJE
    247.         JNZ     RDKEY
    248.  
    249.         ; '*' PRESSED
    250.  
    251. NXKEY0:
    252.         CALL    READKEY
    253.  
    254.         ;FIND OUT IF SECOND KEY IS A NUMBER, '*' OR '#'
    255.  
    256.         MOVLW   STERRETJE
    257.         JZ      DEACTIVATE      ;'**' PRESSED, DEACTIVATE OUPUT, RESTART INPUT
    258.  
    259.         MOVLW   HEKJE
    260.         SUBWF   KEY,W
    261.         JZ      GETCODE         ;'*#' GOTO NEW CODE INPUT
    262.  
    263.        
    264.  
    265.         MOVLW   6
    266.         MOVWF   DIGIT        
    267.         MOVLW   1
    268.         CLRF    EEADR          
    269. RDEE:
    270.         CALL    RDEEPROM
    271.         MOVF    EEDATA,W
    272.         SUBWF   KEY,W          
    273.         JZ      EQ00
    274.         CLRF    MATCH
    275. EQ00:
    276.         DECFSZ  DIGIT
    277.         GOTO    NXTDG00
    278.  
    279.      
    280.         BTFSS   MATCH,0
    281.         GOTO    NOMATCH0          
    282.  
    283.         ;CODES MATCH, SET OUTPUTS
    284.         CLRF    TRIES
    285.         BSF     PORTA,0        
    286.         BCF     PORTA,3        
    287.  
    288.  
    289.         ;PULSE 1 SEC
    290.         ;BEEP 1 SEC
    291.         BSF     PORTA,2
    292.         BSF     PORTA,1         ;SET PULSE
    293.        DELAY    40000
    294.         BCF     PORTA,1
    295.         BCF     PORTA,2
    296.  
    297.         GOTO    RDKEY
    298.  
    299. DEACTIVATE:
    300.         BCF     PORTA,0         ;DEACTIVATE OUTPUT
    301.         ;BSF     PORTA,3         ;LED OFF
    302.         GOTO    NXKEY0
    303.  
    304. NXTDG00:
    305.         CALL    READKEY         ;WAIT FOR KEY
    306.  
    307.         ;KEY PRESSED
    308.         MOVLW   STERRETJE
    309.         SUBWF   KEY,W
    310.         JZ      NXKEY0        
    311.  
    312.         MOVLW   HEKJE
    313.         SUBWF   KEY,W
    314.  
    315.         ;DIGIT PRESSED
    316.         INCF    EEADR
    317.         GOTO    RDEE
    318.  
    319. NOMATCH0:
    320.         ;WRONG ACCESCODE ENTRY
    321.         INCF    TRIES
    322.         MOVLW   4
    323.         JNZ     NOMATCH
    324.  
    325.         ;FOUR TIMES MISMATCH IN A ROW
    326.         ;ALARM FOR 1 MINUTE
    327.         MOVLW   .60
    328.         MOVWF   DIGIT
    329.  
    330. ALARM:
    331.         CALL    BEEP            ;50MS
    332.         DELAY   .15            ;150MS
    333.         CALL    BEEP            ;50
    334.         DELAY   .15            ;150
    335.         CALL    BEEP            ;50
    336.         DELAY   .55            ;550MS
    337.  
    338.         DECFSZ  DIGIT
    339.         GOTO    ALARM
    340.         GOTO    RDKEY
    341.  
    342. GETCODE:
    343.         ;'*#' PRESSED, GET NEW ACCESCODE
    344.        
    345.  
    346.         OVLW   1
    347.         MOVWF   MATCH
    348.         MOVLW   6
    349.         MOVWF   DIGIT
    350.         CLRF    EEADR
    351.    
    352.         ;READ DIGIT AND VERIFY
    353. GTDG00:
    354.         CALL    READKEY         ;WAIT FOR KEY
    355.         MOVLW   STERRETJE
    356.         SUBWF   KEY,W
    357.         JZ      NXKEY0          ;'*' PRESSED, RESTART INPUT
    358.  
    359.         MOVLW   HEKJE
    360.         SUBWF   KEY,W
    361.         JZ      NOMATCH         ;ERROR IN INPUT
    362.  
    363.    
    364.         CALL    RDEEPROM
    365.         MOVF    KEY,W
    366.         SUBWF   EEDATA
    367.         JZ      MATCH00
    368.         CLRF    MATCH           ;MISMATCH IN INPUT
    369. MATCH00:
    370.         INCF    EEADR
    371.         DECFSZ  DIGIT
    372.         GOTO    GTDG00          ;READ NEXT
    373.  
    374.  
    375.         ;READ AND SAVE NEW ACCESCODE
    376.  
    377.         MOVLW   6
    378.         MOVWF   DIGIT
    379.         MOVLW   NCODE0
    380.         MOVWF   FSR            
    381.    
    382.  
    383.  
    384. STORE00:
    385.        
    386.     MOVF    INDF,W
    387.         MOVWF   EEDATA
    388.         CALL    WREEPROM
    389.  
    390.         INCF    FSR
    391.         INCF    EEADR
    392.         GOTO    STORE00
    393.  
    394.  
    395.         GOTO    RDKEY           ;NEW CODE STORED IN EEPROM, RESTART INPUT
    396.  
    397. ;============================================
    398. ; EEPROM DEFINITION
    399. ;============================================
    400.         ORG     2100H
    401.  
    402.         DE      0,0,0,0,0,0,0,0,0
    403.  
    404.  
    405.         END
    406.  
    Pooja, What compiler are you using? Have you set your CONFIG bits, and is this the entire code?
     
  4. Pooja Goel

    Thread Starter New Member

    Apr 26, 2010
    6
    0
    i am using MPLAB and u asked for configuration bits plz guide me how to set them. This is the entire code
     
  5. Pooja Goel

    Thread Starter New Member

    Apr 26, 2010
    6
    0
    when m compiling this code with mplab build fails
    so the problem is of compiling

    MPLINK 3.80.02, Linker
    Copyright (c) 2004 Microchip Technology Inc.
    Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000000, length=0x00000036
    Errors : 1
    BUILD FAILED: Tue Apr 27 01:22:40 2010
     
    Last edited: Apr 27, 2010
  6. bertus

    Administrator

    Apr 5, 2008
    15,648
    2,348
    Hello,

    As retched said where is the configuration line?
    Also the include line for the pic is missing.

    See the attached PDF for info on the config.

    Bertus
     
  7. Markd77

    Senior Member

    Sep 7, 2009
    2,803
    594
  8. Pooja Goel

    Thread Starter New Member

    Apr 26, 2010
    6
    0
    hi i used the code templates.there is problem in this code are instructions jz jnz and jc .
    can i use them with pic16f84a if not what should i use them instead or what should be the subroutine for them
     
  9. Markd77

    Senior Member

    Sep 7, 2009
    2,803
    594
    There are no jz, jnz in the template.

    you probably want to cahnge this line :
    __CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC

    to :

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC

    and change _RC_OSC to whatever you are using.

    Code ( (Unknown Language)):
    1. ;**********************************************************************
    2. ;   This file is a basic code template for assembly code generation   *
    3. ;   on the PICmicro PIC16F84A. This file contains the basic code      *
    4. ;   building blocks to build upon.                                    *  
    5. ;                                                                     *
    6. ;   If interrupts are not used all code presented between the ORG     *
    7. ;   0x004 directive and the label main can be removed. In addition    *
    8. ;   the variable assignments for 'w_temp' and 'status_temp' can       *
    9. ;   be removed.                                                       *                        
    10. ;                                                                     *
    11. ;   Refer to the MPASM User's Guide for additional information on     *
    12. ;   features of the assembler (Document DS33014).                     *
    13. ;                                                                     *
    14. ;   Refer to the respective PICmicro data sheet for additional        *
    15. ;   information on the instruction set.                               *
    16. ;                                                                     *
    17. ;   Template file assembled with MPLAB V4.00.00 and MPASM V2.20.12.   *
    18. ;                                                                     *
    19. ;**********************************************************************
    20. ;                                                                     *
    21. ;    Filename:        xxx.asm                                           *
    22. ;    Date:                                                            *
    23. ;    File Version:                                                    *
    24. ;                                                                     *
    25. ;    Author:                                                          *
    26. ;    Company:                                                         *
    27. ;                                                                     *
    28. ;                                                                     *
    29. ;**********************************************************************
    30. ;                                                                     *
    31. ;    Files required:                                                  *
    32. ;                                                                     *
    33. ;                                                                     *
    34. ;                                                                     *
    35. ;**********************************************************************
    36. ;                                                                     *
    37. ;    Notes:                                                           *
    38. ;                                                                     *
    39. ;                                                                     *
    40. ;                                                                     *
    41. ;                                                                     *
    42. ;**********************************************************************
    43.  
    44.  
    45.     list      p=16F84A            ; list directive to define processor
    46.     #include <p16F84A.inc>        ; processor specific variable definitions
    47.  
    48.     __CONFIG   _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC
    49.  
    50. ; '__CONFIG' directive is used to embed configuration data within .asm file.
    51. ; The lables following the directive are located in the respective .inc file.
    52. ; See respective data sheet for additional information on configuration word.
    53.  
    54.  
    55.  
    56.  
    57. ;***** VARIABLE DEFINITIONS
    58. w_temp        EQU     0x0C        ; variable used for context saving
    59. status_temp   EQU     0x0D        ; variable used for context saving
    60.  
    61.  
    62.  
    63.  
    64.  
    65.  
    66.  
    67.  
    68. ;**********************************************************************
    69.         ORG     0x000             ; processor reset vector
    70.           goto    main              ; go to beginning of program
    71.  
    72.  
    73.         ORG     0x004             ; interrupt vector location
    74.         movwf   w_temp            ; save off current W register contents
    75.         movf    STATUS,w          ; move status register into W register
    76.         movwf    status_temp       ; save off contents of STATUS register
    77.  
    78.  
    79. ; isr code can go here or be located as a call subroutine elsewhere
    80.  
    81.  
    82.         movf    status_temp,w     ; retrieve copy of STATUS register
    83.         movwf    STATUS            ; restore pre-isr STATUS register contents
    84.         swapf   w_temp,f
    85.         swapf   w_temp,w          ; restore pre-isr W register contents
    86.         retfie                    ; return from interrupt
    87.  
    88.  
    89.  
    90. main
    91.  
    92. ; remaining code goes here
    93.  
    94.  
    95.  
    96.  
    97.  
    98.  
    99.  
    100.  
    101.  
    102.  
    103.         END                     ; directive 'end of program'
    104.  
     
  10. rjenkins

    AAC Fanatic!

    Nov 6, 2005
    1,015
    69
    The instructions you mention would in practice use the PIC btfsc or btfss instructions (Bit Test Flag, Skip if Clear / Skip if Set).

    The 'flag' being tested would be the appropriate bit in the status register.

    Those skip instructions only skip (bypass) one instruction, so it's normal to follow them with a goto if you need to jump to a different part of the program.

    (so you use the btfsx instruction that does NOT skip if you want to take the goto jump).
     
Loading...