Can someone held me insert this code into my project please

Discussion in 'Embedded Systems and Microcontrollers' started by Daemon, Jun 23, 2011.

  1. Daemon

    Thread Starter Active Member

    Jun 20, 2009
    33
    0
    Hi guys
    I have been getting some assistance on creating a project and I want to insert he code from the following location into my software.
    I can't seem to make it work because of the definitions in the included msecdelay4MHz.inc

    I also cannot work out how to easily remove the double click code from the code.

    Can someone please have a look for me and tell me the best way to put it in to my code?

    My code is here

    Code ( (Unknown Language)):
    1.  
    2. ;****************************************************
    3. ;SimpleTimer.asm                                     *
    4. ;
    5. ;14-6-2011                                          *
    6. ;****************************************************
    7. ;
    8.     list    p=12F683
    9.     radix    dec
    10.     include    "p12f683.inc"
    11.    
    12.         errorlevel    -224    ; Don't complain about tris
    13.         errorlevel    -302    ; Don't complain about BANK 1 Registers
    14.  
    15.  
    16.     __CONFIG    _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT  ;Internal osc.
    17.  
    18. ;_MCLRE_OFF  - master clear must be off for gp3 to work as input pin
    19.  
    20. ;****************************************************************
    21. ; variables - names and files
    22. ;****************************************************************
    23.  
    24. temp1        equ 20h    ;
    25. temp2        equ    21h    ;
    26. pushes        equ    22h    
    27. flashes        equ    23h
    28. on_time     equ 24h
    29. off_time    equ 25h
    30. minutes     equ 26h
    31. loops       equ 27h
    32. A_Dvalue    equ 28h
    33. delA        equ    29h
    34. delB        equ    30h
    35. ;****************************************************************
    36. ;Equates
    37. ;****************************************************************
    38. status        equ    0x03
    39. rp1            equ    0x06
    40. rp0            equ    0x05
    41. option_reg    equ 81h
    42.  
    43.  
    44.  
    45. Setup            bsf        STATUS, RP0     ;Bank 1            
    46.                    movlw    b'11111100'        ;Set TRIS  GP0,1 out   GP2(AN2), 3,4,5 input
    47.                 movwf    TRISIO    
    48.                 movlw    b'01010100'
    49.                 movwf    ANSEL        ;A/D Clock FOSC/16, AN2(GP2) Set as analogue
    50.      
    51.                 BCF        STATUS, RP0        ;bank 0
    52.                 movlw   07h             ;turn off Comparator ports
    53.                 movwf   CMCON0           ;must be placed in bank 0  
    54.                 movlw    b'00001001'
    55.                 movwf    ADCON0        ;Result left justified, Ref Vdd, Select AN2, ADC on
    56.        
    57.  
    58.                            
    59.                     ;read 3 locations in EEPROM                    
    60.        
    61.         bsf        status,rp0            
    62.         clrf    EEADR            ;EEPROM location 0 for flashes of LED                
    63.         bsf        EECON1,0        ;to show number of 5 mins                        
    64.         movf    EEDATA,w    
    65.         bcf        STATUS,RP0    
    66.         movwf    flashes            ;EEPROM 0 into flashes                
    67.        
    68.         bsf        STATUS,RP0            
    69.         incf    EEADR        ;EEPROM location 1 for on_time                    
    70.         bsf        EECON1,0    ;starts EEPROM read operation storing result in EEDATA                        
    71.         movf    EEDATA,w    ;move read data into w
    72.         bcf        STATUS,RP0    
    73.         movwf    on_time     ;EEPROM 1 into on_time
    74.        
    75.         bsf        STATUS,RP0            
    76.         incf    EEADR        ;EEPROM location 2 for off_time                        
    77.         bsf        EECON1,0                            
    78.         movf    EEDATA,w    
    79.         bcf        STATUS,RP0    
    80.         movwf    off_time    ;EEPROM 2 into off_time
    81.         goto     Main    
    82.        
    83.        
    84.        
    85.        
    86. ;********************
    87. ;* Delays             *
    88. ;********************
    89.  
    90. _50uS  movlw   .15
    91.        movwf   delA
    92.        decfsz     delA,f
    93.        goto     $-1
    94.        retlw     00
    95.  
    96.  
    97. _327mS    goto    $+1
    98.         decfsz     delA,f
    99.         goto     $-2
    100.         decfsz     delB,f
    101.         goto     $-4    
    102.         retlw     00        
    103.                    
    104.        
    105. ;****************************
    106. ;* Sub Routines             *
    107. ;****************************
    108.            
    109. SwA_Pressed
    110.        
    111.         incf    flashes,f            
    112.         movlw   07
    113.         xorwf   flashes,w     ;if flashes=7
    114.         btfss   STATUS,Z  ;z=1 if flashes=7
    115.         goto    $+3
    116.         clrf    flashes
    117.         goto    $-6    
    118.                    
    119.                     ;put flashes into EEPROM 0
    120.        
    121.         movf    flashes,w    ;put flashes into w    
    122.         bsf        STATUS,RP0    ;select bank1    
    123.         movwf    EEDATA            
    124.         clrf    EEADR            
    125.         bcf        STATUS,RP0    ;select bank0
    126.         call     write
    127.        
    128.                    ;put same value into EEPROM 1 for on_time
    129.                    
    130.         movf    flashes,w    ;put flashes into w    
    131.         bsf        STATUS,RP0    ;select bank1    
    132.         movwf    EEDATA            
    133.         incf    EEADR,1            
    134.         bcf        STATUS,RP0    ;select bank0
    135.         call     write
    136.        
    137.                 ;flash LED 1-5 times
    138.        
    139.         movf    flashes,w
    140.         movwf    temp1     ;save flashes in temp1 for decrementing
    141.         bsf        GPIO,0   ;turn on LED    
    142.         call    _327mS
    143.         bcf        GPIO,0   ;turn off LED    
    144.         call    _327mS
    145.         decfsz  temp1,f
    146.         goto    $-5        
    147.         btfss    GPIO,5    ;loop until SwA is released
    148.         goto    $-1
    149.         retlw    00
    150.        
    151.                   ;SwB = minutes = off_time
    152. SwB_Pressed
    153.        
    154.         incf    minutes,f            
    155.         movlw   06
    156.         xorwf   minutes,w     ;if minutes=6
    157.         btfss   STATUS,Z  ;z=1 if minutes=6
    158.         goto    $+3
    159.         clrf    minutes
    160.         goto    $-6    
    161.                    
    162.                     ;put minutes into EEPROM 2 as off_time
    163.        
    164.         movf    minutes,w    ;put minutes into w    
    165.         bsf        STATUS,RP0    ;select bank1    
    166.         movwf    EEDATA    
    167.         movlw   2        
    168.         movwf    EEADR            
    169.         bcf        STATUS,RP0    ;select bank0
    170.         call     write
    171.        
    172.                ;flash LED 1-5 times
    173.        
    174.         movf    minutes,w
    175.         movwf    temp1     ;save minutes in temp1 for decrementing
    176.         bsf        GPIO,0   ;turn on LED    
    177.         call    _327mS
    178.         bcf        GPIO,0   ;turn off LED    
    179.         call    _327mS
    180.         decfsz  temp1,f
    181.         goto    $-5        
    182.         btfss    GPIO,4    ;loop until SwB is released
    183.         goto    $-1
    184.         retlw    00        
    185.        
    186.  
    187.        
    188.        
    189.        
    190.         ;microcontroller loops this sub-routine producing ON time
    191.         ;as stored in EEPROM location 1        
    192.         ;look for sw press every 327mS
    193.        
    194. time_on
    195.         movlw    1
    196.         bsf        STATUS,RP0            
    197.         movwf    EEADR                                    
    198.         bsf        EECON1,0    ;starts EEPROM read operation. Result in EEDATA                        
    199.         movf    EEDATA,w    ;move read data into w
    200.         bcf        STATUS,RP0
    201.         movwf    on_time     ;will be 1-5
    202.                             ;convert each value of "on_time" to 5 minutes
    203.                             ;327mS x 16 x 58 = 5 minutes
    204.         swapf      on_time,f    ;rlf x 4 = 16 = swap nibbles    
    205.         movlw   .58
    206.         movwf    loops                    
    207.         bsf        GPIO,1        ;turn on relay
    208.         call    _327mS
    209.         btfss    GPIO,5        ;test switchA
    210.         goto    SwA_Pressed
    211.         btfss    GPIO,4        ;test switchB
    212.         goto    SwB_Pressed
    213.         decfsz  loops,f
    214.         goto    $-6          
    215.         decfsz  on_time,f
    216.         goto    $-.09
    217.         retlw   00
    218.        
    219.         ;microcontroller loops this sub-routine producing OFF time
    220.         ;as stored in EEPROM location 2
    221.         ;look for sw press every 327mS        
    222.        
    223.  
    The link to the button code is here
    http://pcbheaven.com/picpages/A_Clever_Button/
    I want it to work like so, Switch A short press calls SwAPressed.
    Switch A Held for 1 second or more calls LVC_Setting
    Switch B short press calls SwBPressed

    Also, after I set my low voltage cutoff setting how can I return to my program without powering off the circuit?
    Thanks
    Steve
     
  2. Daemon

    Thread Starter Active Member

    Jun 20, 2009
    33
    0
    Sorry, post was too long. Here is the last of the current code

    Code ( (Unknown Language)):
    1.  
    2. time_off
    3.         movlw    2
    4.         bsf        STATUS,RP0            
    5.         movwf    EEADR                                    
    6.         bsf        EECON1,0    ;starts EEPROM read operation. Result in EEDATA                        
    7.         movf    EEDATA,w    ;move read data into w
    8.         bcf        STATUS,RP0
    9.         movwf    off_time    ;will be 1-5
    10.                             ;327mS x 3 = 1 second                          
    11.         addwf    off_time,f  ; multiply by 3    
    12.         addwf    off_time,f        
    13.         movlw   .60
    14.         movwf    loops                                            
    15.         bcf        GPIO,1        ;turn off relay
    16.         call    _327mS
    17.         btfss    GPIO,5        ;test switchA
    18.         goto    SwA_Pressed
    19.         btfss    GPIO,4        ;test switchB
    20.         goto    SwB_Pressed
    21.         decfsz  loops,f
    22.         goto    $-6      
    23.         decfsz  off_time,f
    24.         goto    $-.11
    25.         retlw   00        
    26.        
    27.    
    28. write    bsf        STATUS,RP0    ;select bank1    
    29.         bsf        EECON1,WREN    ;enable write        
    30.         movlw    55h         ;unlock codes
    31.         movwf    EECON2
    32.         movlw    0aah
    33.         movwf    EECON2
    34.         bsf        EECON1,WR    ;write begins
    35.         bcf        STATUS,RP0    ;select bank0        
    36.         btfss    PIR1,EEIF    ;wait for write to complete
    37.         goto    $-1
    38.         bcf        PIR1,EEIF
    39.         bsf        STATUS,RP0    ;select bank1
    40.         bcf        EECON1,WREN    ;disable other writes
    41.         bcf        STATUS,RP0    ;select bank0                    
    42.         retlw    00                
    43.                        
    44. ;************************
    45. ;* Main                 *
    46. ;************************
    47.  
    48. Main        
    49.         call    time_on
    50.         call    time_off
    51.        
    52. LVC_Setting
    53.         bsf        ADCON0,GO        ;GO = bit 1 = Start A/D conversion
    54.  
    55.         btfsc    ADCON0,GO    
    56.         goto    $-1            ;Wait until A/D conversion is complete
    57.  
    58.         bsf        STATUS,RP0        ;Switch to Bank1
    59.         movf    ADRESL,W        ;Move A/D conversion result to w
    60.         bcf        STATUS,RP0        ;Switch to Bank0
    61.         movwf    A_Dvalue       ;save A/D value in A_Dvalue
    62.         goto    Main
    63.                
    64. ;************************
    65. ;*EEPROM                 *
    66. ;************************
    67.                                
    68.         org        2100h            
    69.         de      1,  2, 3        ;1=flashes   2=time_on   3=time _off    
    70.                            
    71.         END
    72.  
    73. Thanks
    74.  
     
Loading...