امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
کمک در تحلیل برنامه اسمبلی
نویسنده پیام
tracer آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 1
تاریخ عضویت: شهریور ۱۳۹۲

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
کمک در تحلیل برنامه اسمبلی
سلام دوستان کسی هست منو در تحلیل این برنامه اسمبلی کمک کنه؟
کد:
; 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
(آخرین ویرایش در این ارسال: ۱۸-مهر-۱۳۹۳, ۱۳:۳۸:۴۶، توسط behzady.)
۱۸-مهر-۱۳۹۳, ۱۳:۲۷:۴۱
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آلتراسونیک با 8051 و زبان اسمبلی hooman70 1 2,312 ۱۷-دى-۱۳۹۱, ۰۲:۰۹:۱۷
آخرین ارسال: salmon2

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS