ASSEMBLY PROGRAMIMA YARDIM

Başlatan sercan52, 13 Aralık 2009, 16:39:36

sercan52

arkadaşlar bu program neden hata veriyor bilgilerinizi paylaşabiirmisiniz?










*********************************************************************

   list        p=16f876a   ; list directive to define processor
   #include    <p16f876a.inc>  ; processor specific variable definitions
   
   __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

;***** VARIABLE DEFINITIONS (examples)

;BANK SEÇMEKSİZİN KULLANILABİLEN DEĞİŞKENLER (MAX 16 ADET)
INT_VAR     UDATA_SHR      
w_temp      RES     1       ; variable used for context saving
status_temp RES     1       ; variable used for context saving
pclath_temp RES     1       ; variable used for context saving

; example of using Uninitialized Data Section
TEMP_VAR    UDATA           ; explicit address specified is not required
temp_count  RES     1       ; temporary variable (example)
;***************************************************************



;bir bank a ait değişkenler
; in this example both variables are assigned the same GPR location by linker
G_DATA      UDATA_OVR       ; explicit address can be specified
flag        RES   2       ; temporary variable (shared locations - G_DATA)
;**************************************************************************
FILTER:      UDATA   0x30                                     ;*   
N           res    8      ;//  bank 1 de 0x30 adresinden başlayan toplamda
TOPLAM      res     2      ;//11 adet değişken tanımladık (filitre işlemi için)         
SONUC      RES     1                                                
;**************************************************************************
G_DATA      UDATA_OVR  
count       RES     2       ; temporary variable (shared locations - G_DATA)

;**********************************************************************
RESET_VECTOR    CODE    0x0000  ; processor reset vector
   nop                         ; nop for icd
   pagesel start
   goto    start               ; go to beginning of program

INT_VECTOR      CODE    0x0004  ; interrupt vector location

INTERRUPT
;KESMEDEN ÖNCE SİSTEM ÇALIŞMASI BOZULMAMASI İÇİN
;W REGISTER, STATUS, VE PROGRAM COUNTER VE PROGRAM COUNTER
; YÜKSEK BYTE GEÇİCİ DEĞİŞKENLERDE SAKLANIR
   movwf   w_temp          ; save off current W register contents
   movf    STATUS,w        ; move status register into W register
   movwf   status_temp     ; save off contents of STATUS register
   movf    PCLATH,w        ; move pclath register into w register
   movwf   pclath_temp     ; save off contents of PCLATH register

; isr code can go here or be located as a call subroutine elsewhere

;KESME İŞLEMİ****************************************************
BANKSEL PIR1            ;PIR1 Register bankını seç            
   BTFSS PIR1,ADIF         ; ADC kesme bayrağını kontrol et   
   GOTO adc_kesme_yok      ;ADC bayrağı aktif değilse diğer kesmelere atla
   CALL DIGITAL_FILTER     ;adc kesmesi aktif filitre programına git
;****************************************************************  

adc_kesme_yok:
; diğer kesme işlemleri

; KESME İŞLEMİ BİTTİ PROGRAM AKIŞINA GERİ DÖN  
 
   movf    pclath_temp,w       ; retrieve copy of PCLATH register
   movwf   PCLATH          ; restore pre-isr PCLATH register contents
   movf    status_temp,w       ; retrieve copy of STATUS register
   movwf   STATUS          ; restore pre-isr STATUS register contents
   swapf   w_temp,f
   swapf   w_temp,w        ; restore pre-isr W register contents
   retfie              ; return from interrupt

;======================================================
;ANA PROGRAM
;======================================================
MAIN_PROG       CODE

start
   call adc_ayar
   movlw b'11000000'
   movwf INTCON
TEKRAR:
   call sinyal_cikis
;
;DİĞER YAPACAĞIN DİĞER İŞLEMLER
;    
   goto TEKRAR
   
   
   
;====================================================  
sinyal_cikis  
banksel SONUC
movf SONUC,w
banksel PORTB
MOVWF PORTB
RETURN
   
   
;*******************************************************  
;filitre alt programı
;
;=======================================================    
;NOT: sürekli tekrarlanan işlemler programın daha kısa sürede bitmesini
;sağlamak için düngüsüz olarak yazılmıştır isteğe bağlı olarak döngü içerisine
;yazılabilir
;ALT PROGRAM FİLİTRELEME İŞLEMİNİ TAMAMLAYIP ELDE EDİLEN DEĞERİ
; "SONUC" DEĞİŞKENİNE ATAR İSTENİLEN İŞLEMLER "SONUC"
;DEĞİŞKENİ KOPYALANARAK YAPILABİLİR
;=======================================================
DIGITAL_FILTER:


            ;____________________________________
              ;N8 <= N7 <= N6 ... N1<= N0 <= ADRESH
              ;____________________________________
              nop
            BANKSEL N      ; FILTER değişkenlerinin buluntuğu bank seçildi
           
            ;N8=N7
            MOVF N+6,w
              MOVWF N+7
              ;N7=N6
            MOVF N+5,w
              MOVWF N+6
              ;N6=N5
            MOVF N+4,w
              MOVWF N+5
            ;N5=N4
            MOVF N+3,w
              MOVWF N+4
            ;N4=N3
            MOVF N+2,w
              MOVWF N+3
              ;N3=N2
            MOVF N+1,w
              MOVWF N+2
              ;N2=N1
            MOVF N+0,w
              MOVWF N+1
              ;N0=N1
            MOVF ADRESH,w
              MOVWF N+0
;========================================================
; TOPLAM =N1+N2+...N8
 
 CLRF TOPLAM      ; TOPLAM(LOW BYTE)
 CLRF TOPLAM+1    ; TOPLAM(HIGH BYTE)
;_________

 MOVF N+0 ,w        
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,f
;
  MOVF N+1 ,w        
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,F

;
  MOVF N+2 ,w        
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,f

;
  MOVF N+3  ,w        
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,f



;      
 MOVF N+4 ,w        
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,f

;      
 MOVF N+5  ,w        
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,f

;      
 MOVF N+6   ,w      
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,f

;      
 MOVF N+7 ,w        
 ADDWF TOPLAM,F
BTFSC STATUS,C
INCF TOPLAM+1,f


;========================================================
;______________________
;SONUC =TOPLAM /8
;8'bölme işlemi 3 kere sağa shift yapılarakta elde edilebilir
;______________________
BCF STATUS,C
RRF TOPLAM+1,f
RRF TOPLAM,f    
;______________________
BCF STATUS,C
RRF TOPLAM+1,f
RRF TOPLAM,f  
;______________________
BCF STATUS,C
RRF TOPLAM+1,f
RRF TOPLAM,f  
;---------------------
MOVF TOPLAM,w
MOVWF SONUC

BANKSEL ADCON0
BSF ADCON0,GO_DONE
BANKSEL PIR1
BCF PIR1,ADIF
RETURN ; geri dön  


;========================================================
 ;adc ayarları
 
;========================================================
adc_ayar:
   banksel TRISA       ;TRISA NIN BANKINI SEÇ
   BSF TRISA,0         ;PORTA,0 GİRİŞ
   CLRF TRISB          ; PORTB CIKIŞ

BANKSEL ADCON0          ; pic16f876a DATA SHEET ten bitlerin anlamlarını öğrenebilirsin
   MOVLW B'10000001'   ;ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON
   MOVWF ADCON0  

BANKSEL ADCON1
  MOVLW B'00001110'         ;ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0  
  MOVWF ADCON1

banksel PIE1
   BSF PIE1,ADIE
BANKSEL PIR1  
   BCF PIR1,ADIF
BANKSEL ADCON0
BSF ADCON0,GO_DONE  
  return
 
   END                       ; directive 'end of program'

ipek

http://rapidshare.com/files/320441415/filter.rar.html

dosyada bir hata yok linker scrpt oluşturmamışsın  projene 16f876a_g.lkr de ilave et

sercan52

çok sağolun ayrıca be den dolayı da özür "bu" yazacaktım yalnış olmuş hemen düzeltiyorum