derleme sorunu için yardım...

Başlatan maxmetalizm, 04 Nisan 2014, 17:26:01

maxmetalizm

Merhabalar.
İnternette bulduğum step motor sürücü devresi ve pic16f628a için kodu verilmiş. Devreyi ares ile simule etmek için kodları hex olarak derlemem gerekiyor. Fakat mplab ile sürekli hata verdi. Nerede hata yaptığımı söyleyebilirmisiniz acaba. Kod aşağıdaki gibidir.


list p= 16 f 628      ; list directive to define processor
#include <p 16 f 628. inc>      ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _ER_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF
COUNT   equ    0 x 20   
DUMMY 1   equ    0 x 21   
DUMMY 2   equ    0 x 22   
org    0 x 000   ; Reset Vetor Address
bsf   STATUS,RP 0   ; Set RB 4- RB 7 For Drive Stepper Motor
movlw   b' 00001111 '   
movwf   PORTB   
bcf   STATUS,RP 0   
Begin   movlw   .12   ; Loop 12 Time For 7.5 Degree/Step
; 4x12x7.5 = 360
movwf   COUNT   
Loop   movlw   b' 00010000 '   ; 1 Phase Full Step
movwf   PORTB   
call   Delay   ; Change Delay For Change Speed
movlw   b' 00100000 '   
movwf   PORTB   
call   Delay   
movlw   b' 01000000 '   
movwf   PORTB   
call   Delay   
movlw   b' 10000000 '   
movwf   PORTB   
call   Delay   
decfsz   COUNT,f   ; Check Loop = 12 Time ?
goto    Loop   ; If Not Loop Again
movlw   .12   ; Reverse Move 12 Time
movwf   COUNT   
Loop 2   movlw   b' 01000000 '   
movwf   PORTB   
call   Delay   
movlw   b' 00100000 '   
movwf   PORTB   
call   Delay   
movlw   b' 00010000 '   
movwf   PORTB   
call   Delay   
movlw   b' 10000000 '   
movwf   PORTB   
call   Delay   
decfsz   COUNT,f   ; Check Loop = Time ?
goto   Loop 2   
goto   Begin   ; If Yes Start Again
Delay   movlw    0 x 20   ; Delay Between Step
movwf   DUMMY 1   
Delay 1   clrf   DUMMY 2   
decfsz   DUMMY 2 ,f   
goto   
$-1
decfsz   DUMMY 1 ,f   
goto   Delay 1   
return      
END   ; end of program

Kabil ATICI

mplap kullanım kurallarını bir incele... Özellikle yazım ile ilgili olanları
programı aşağıdaki gibi düzenle... Yoksa derleyici neyin ne olduğunu nasıl bilecek..
   list p=16f628      ; list directive to define processor
   #include <p16f628.inc>      ; processor specific variable definitions
   __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _ER_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF
   COUNT   equ    0x20   
   DUMMY1   equ    0x21   
   DUMMY2   equ    0x22   
   org    0x000   ; Reset Vetor Address
   bsf   STATUS,RP0   ; Set RB 4- RB 7 For Drive Stepper Motor
   movlw   b'00001111'   
   movwf   PORTB   
   bcf   STATUS,RP0   
Begin   movlw   .12   ; Loop 12 Time For 7.5 Degree/Step
; 4x12x7.5 = 360
   movwf   COUNT   
Loop   movlw   b'00010000'   ; 1 Phase Full Step
   movwf   PORTB   
   call   Delay   ; Change Delay For Change Speed
   movlw   b'00100000'   
   movwf   PORTB   
   call   Delay   
   movlw   b'01000000'   
   movwf   PORTB   
   call   Delay   
   movlw   b'10000000'   
   movwf   PORTB   
   call   Delay   
   decfsz   COUNT,f   ; Check Loop = 12 Time ?
   goto    Loop   ; If Not Loop Again
   movlw   .12   ; Reverse Move 12 Time
   movwf   COUNT   
Loop2   movlw   b'01000000'   
   movwf   PORTB   
   call   Delay   
   movlw   b'00100000'   
   movwf   PORTB   
   call   Delay   
   movlw   b'00010000'   
   movwf   PORTB   
   call   Delay   
   movlw   b'10000000'   
   movwf   PORTB   
   call   Delay   
   decfsz   COUNT,f   ; Check Loop = Time ?
   goto   Loop2   
   goto   Begin   ; If Yes Start Again
Delay   movlw    0x20   ; Delay Between Step
   movwf   DUMMY1   
Delay1   clrf   DUMMY2   
   decfsz   DUMMY2 ,f   
   goto $-1
   decfsz   DUMMY1 ,f   
   goto   Delay1   
   return     
   END   ; end of program
ambar7