ايران ويج

نسخه‌ی کامل: کمک در تحلیل برنامه اسمبلی
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان کسی هست منو در تحلیل این برنامه اسمبلی کمک کنه؟
کد:
; PROGRAM TIL STYRING AF PULSER TIL PI DETEKTOR
; REV. 4.0
; REV. 13/06-98
; AF MARK PAULS
;
; Ved opstart allerf?rste gang holdes RA4 (port A.4) h?j og
; derved intialiseres rec, puls, wait tiden i EE prommen.
; Hvis RA4 er lav under start afl?ses EE prommen istedet.
; Bem?rk at RA4 har dobbelt funktion idet den ved h?j (efter
; start kan bruges (via RA0,RA1) til justering af antal pulser
; HUSK at s?tte lav igen inden n?ste ON/OFF.
;
;
;
;    LIST  P=16C84, F=INHX8M


    include "p16c84.inc" ;
; uP PIC16C84 include modul ver. 1.00

;----------------- DIV -----------------
  
      ORG      0            ;Dummy origin
      goto     INIT;        ;hop til INIT

;-------------Constanter--------------

d1         equ  .20         ; pulstid i us
d2         equ  .10         ; (wait before rec.) vent p? respons i us
d3         equ  .5          ; modtag i ms
d4         equ  .40         ; (ms wait before next) vent ms inden n‘ste puls
delay      equ  .6;         ; delay til 1 ms timer
loop       equ  0Ch         ; RAM 0C
xus        equ  10h         ; RAM 10
xms        equ  11h         ; RAM 11
puls_time  equ  15h         ; RAM 15
w_b_r      equ  16h         ; RAM 16
rec_time   equ  17h         ; RAM 17
w_b_n      equ  18h         ; RAM 18


; RAM 11        ;benyttes af x ms timer
; RAM 12,13     ;benyttes af   us timer
; RAM 14        ;8 flag, F0..F7
; RAM 15        ;puls_time
; RAM 16        ;w_b_r
; RAM 17        ;rec_time
; RAM 18        ;w_b_n
;
; EEADR 00      ;s‘ttes 0 ved opstart

;---------------- TIMER ------------------
wait_1us;                  ; ca 1us wait
         nop;
    return

wait_xus                   ;vent x mikrosek.
J4
    call     wait_1us  
    decfsz   xus,1        ;T‘l xus-1
    goto     J4
    return

wait_1ms;    ;1 ms timer
    movlw    .5           ;antal gennemloeb for 1 ms
    movwf    13           ;flyt w til RAM 13
J2     movlw    delay;       ;w = delay (korrigering)
    movwf    12           ;flyt w til RAM 12
J1     decfsz   12,1         ;T‘l RAM12-1 eller fors‘t
    goto     J1           ;repeat
    decfsz   13           ;T‘l RAM13-1 eller slut
    goto     J2           ;repeat
    return    

wait_xms;                  ;Vent x millisek
J3         call     wait_1ms  
         decfsz   xms,1        ;T‘l xms-1
         goto     J3
    return

;----------- EEPROM MODUL TIL PIC16C84
;Rev 1.00
;d.27/07-95
; note: use timer

wadr               equ 2Fh           ; adresse i RAM 2F
value             equ 2Eh           ; Data i RAM 2E

WR_EEPROM                       ; skriv EEPROM (data i RAM 2E+adr i RAM 2E)
         movf     wadr,W             ; w=adr
         movwf    EEADR             ; EEADR=w
         movf     value,W            ; w=data
         movwf    EEDATA            ; EEDATA=w
         ; --- write sequnce
         bsf      STATUS,RP0        ; EEPROM write enable
    bcf      INTCON,GIE       ; disable interupts
    movlw    0x55              ; w=55h
    movwf    EECON2            ; EECON2=w
    movlw    0xAA              ; w=AAh
    movwf    EECON2            ; EECON2=w
    bsf      EECON1,WR         ; EECON1=write
    movlw    .100              ;load tid skrivning
    movwf    xms               ;flyt w til xms
    call     wait_xms          ;vent i ms
    ; --- end
;return

RD_EEPROM                       ; adr.skal v‘re i RAM 2F
    movf      wadr,W     ; data afleveres i RAM 2E
    movwf     EEADR         ; EEADR=w (adr)
    bsf      STATUS,RP0    ; bank 1
    bsf       EECON1,RD     ; set RD bit (slukker selv)
    bcf      STATUS,RP0    ; bank 0
    movf      EEDATA,W      ; w=data
    movwf     value         ; data=w
   ; --- end
    return    
;-------------- END EEPROM MODUL


;------------ DATA ?NDRINGER -----------
Update
    btfsc    5,4        ;tjek f?rst bit 4
    goto     pulsjust        ;juster antal pulser
    btfsc    5,0               ;Hvis bit 0 er sat
    incf     rec_time,1        ;"step up" rec. time + 1
    btfsc    5,1               ;Hvis bit 1 er sat
    decfsz   rec_time,1        ;"step down" rec. time - 1
    btfsc    5,2               ;Hvis bit 2 er sat
    incf     w_b_r,1           ;"step up" wait before rec + 1
    btfsc    5,3               ;Hvis bit 3 er sat
    decfsz   w_b_r,1           ;"step down" wait before - 1
    goto slut                  ;ellers slut    

    ;hvis 5.4
pulsjust
    btfsc    5,0               ;Hvis bit 0 og 4 er sat
    incf     puls_time,1       ;"step up" puls + 1
    btfsc    5,1               ;Hvis bit 1 og 4 er sat
    decfsz   puls_time,1       ;"step down" puls - 1
    GOTO     slut        ;hop til slut

slut
    ;ops?t adresse + data til EEPROM ?ndring
    ;gem antal pulser
    movf     puls_time,W    ;flyt til W
    movwf    value        ;value = rec_time
    movwf    wadr           ;set adresse
    movlw    01h        ;til 01 hex i EE
    CALL     WR_EEPROM    ;skriv i EE  
    ;gem ventetid f?r modtagning
    movf     w_b_r,W    ;flyt til W
    movwf    value        ;value = rec_time
    movwf    wadr             ;set adresse
    movlw    02h        ;til 02 hex i EE
    CALL     WR_EEPROM    ;skriv i EE
    ;gem modtager tid
    movf     rec_time,W    ;flyt til W
    movwf    value        ;value = rec_time
    movwf    wadr           ;set adresse
    movlw    03h        ;til 03 hex i EE
    CALL     WR_EEPROM    ;skriv i EE  

    ;timer start  
    movlw    04h
    movwf    loop              ;s?t 2 i RAM 0C
T_1                        
    nop                        ;VENT 1 sek
    movlw   .255;              ;1/4 sek load
    movwf    xms               ;flyt w til xms
    call     wait_xms          ;vent i w_b_n ms
    decfsz   loop,1            ;loop
    goto T_1
    ;end
    return

DEFAULT
    movlw      d1              ; w= delay 1
    movwf      puls_time       ; Puls tid  = w
    movwf      d2              ; w= delay 2
    movwf      w_b_r           ; wait before receive
    movwf      value           ; data (EE) = w
    movlw      d3              ; w= delay 3
    movwf      rec_time        ; record time
    movwf      value           ; data (EE) = w
    movlw      d4              ; w= delay 4
    movwf      w_b_n           ; ventetid (slettes sidenhen)
    CALL    Update        ; skriv til EE
    goto MAIN  


;--------------INIT-------------------
INIT
    ;output init
    movlw    B'11111111'      ;set w= 0D
    movwf    PORTB           ;flyt w til port B
    movlw    B'00000000'      ;set w= 00
    tris     PORTB           ;set alle I/O retning til ud
    ;input init
    movlw    B'11111'         ;set bit 0..4 til input
    tris     PORTA           ;s?t port A
    ;init RAM/EEPROM
    btfsc      PORTA,4      ;Hvis port A bit 0 l?s default
    goto       DEFAULT
    movlw      01h;        ;w=01h
    movwf      wadr        ;adr=w
    call       RD_EEPROM   ;L?s EE
    movf       value,W     ;w=data fra EEPROM
    movwf      puls_time   ;puls=w
    movlw      02h;        ;w=02h
    movwf      wadr        ;adr=w
    call       RD_EEPROM   ;L?s EE
    movf       value,W     ;w=data fra EEPROM
    movwf      w_b_r       ;wait before receive
    movlw      03h;        ;w=03h
    movwf      wadr        ;adr=w
    call       RD_EEPROM   ;L?s EE
    movf       value,W     ;w=data fra EEPROM
    movwf      rec_time    ;record time
    movlw      d4          ;w=d4     (slettes sidenhen)
    movwf      w_b_n       ;ventetid (slettes sidenhen)
    goto     MAIN;            ;HOP TIL HOVEDL?KKE





;---------------- PULS -------------------
puls
    bcf      PORTB,0          ;s‘t bit 3 = 0 (output)
    movf     puls_time,0       ;flyt puls_time til w
    movwf    xus               ;flyt tid til RAM11
    call     wait_xus          ;vent i x us
    bsf      PORTB,0
    return

;--------------- MODTAG ------------------
Receiver
    bcf      PORTB,3          ;s‘t bit 0 = 0 (modtager ?bner)
    movf     rec_time,0        ;flyt tid i us til w
    movwf    xus                ;flyt tid i RAM16
    call     wait_xus          ;vent i x us
    bsf      PORTB,3          ;luk modtager
    return


;-----------------MAIN--------------
MAIN
    ; Puls
    call     puls         ;kald puls rutine
    ; vent
    movf     w_b_r,W      ;load w med ventetid
    movwf    xus          ;flyt w til xus
    call     wait_xus     ;vent i w_b_r us
    ; modtag  
    call     Receiver     ;?ben modtager
    ; vent    
    movf     w_b_n,W      ;load tid til n?ste puls
    movwf    xms          ;flyt w til xms
    call     wait_xms     ;vent i w_b_n ms
    ; afl?s input
    btfsc    5,0          ;hvis up aktiv
    call     Update       ;kald update
    btfsc    5,1          ;hvis down aktiv
    call     Update       ;kald update
    btfsc    5,2          ;hvis up aktiv
    call     Update       ;kald update
    btfsc    5,3          ;hvis down aktiv
    call     Update       ;kald update
    ; repeat
    goto     MAIN
    end
;SLUT