PİC ASSEMBLY ÜZERİNE BAZI ÖNEMLİ NOTLAR

Başlatan XNHCX, 08 Şubat 2004, 23:28:06

XNHCX

WDT ZAMNLAYICISI

(WATCHDOG TIMER)


Pic içerisinde bulunan bir diğer zamanlayıcıdır. Bu zamanlayıcının sinyal kaynağı , Pic içindeki bir

osilatördür.
Pic'in önceden belirlenen sürede yapması gereken işi zamanında yapamadıysa , bir diğer deyişle program controlden çıkıp da kilitlendiyse , WDT devreye girer ve PIC'e reset

atar.

WDT , bir de SLEEP -uyuma- moduna girmiş PIC'İ uyandırarak yeniden çalışmaya devam etmesini sağlar.


Bu zamanlayıcının uygulama alanına bir örnek

verelim.

Sözgelimi ,seri üretim yapan bir fabrikadakaki bir bant üzerinden geçen ürünlerin montajını yapan robotu bir PIC kontrol etsin.Herhangi bir problem yok ise ,ürünlerin montajı

robot  başka bir deyişle Pic tarafından yapılmaya devam edecektir.Bant üzerinde herhangi bir problem oluştuğunda ürün geçişi duracağından bir gecikme meydana gelecektir.Bu gecikme WDT’nin

ayarlanan zaman aşımı süresini geçerse , bu zamanlayıcı- WDT -  devreye girecek ve programa reset atarak , programın baştan çalışmasını sağlayacaktır.

XNHCX

Bu faydalı resim , döküman , üyemiz elektromer'e

aittir.



Teşekkürler

elektromer

XNHCX

Bu faydalı döküman da Sevgili

elektromer 'e aittir.

EEProm Yazma ve Okuma

Programı


;****************************************************************************;
; PROGRAM ADI      :   EEProm Yazma ve Okuma

Programı
; DOSYA ADI      :   eeprom.asm
; YAZAN         :   
; TARİH         :    01 Ocak 2004   
; TARİH         :    04:33   
; İŞLEMCİ      :   PIC

16F84
; SAAT HIZI (XTAL) :   3.2768 MHz
;****************************************************************************;
;   NOT : Buradaki şablon benim genelde kullandığım formatı

gösterir,
;         ve ağırlıkla programlarımı TMR0 kesmesi kullanarak yazarim.
;   Bu dosya yeni başlayacak arkadaşlara fikir vermesi amacıyla

hazırlanmıştır.
;****************************************************************************;

   LIST   P=

16F84A,   R=HEX,   C=80
   ERRORLEVEL   -302
   #INCLUDE   "f84.inc"
   LIST

   __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &

_XT_OSC

;****************************************************************************;
;   RAM

tanımlamaları
;****************************************************************************;
   CBLOCK   0x0C
   e_data1         ;
   e_data2         ;



   ENDC

;*****************************************************************************;
;   Ana Program

Başlangıcı
;*****************************************************************************;
   org   0x00
   clrw         ;
   movwf   porta      ;
   movwf   portb      ;


   goto   BASLA      ; Başlangıç Etiketine git.

;*****************************************************************************;
BASLA   call   TANIM      ; Port

tanimlamalari.

;*****************************************************************************;
;   1.EPROM  datamız = 0x33     Adresimiz = 0x00
;   Eprom Adresi  0x00 ile 0x3F

dahil arası olabilir.
;*****************************************************************************;
   movlw   0x33      ; W'ye 0x33 değerini al.
   movwf   eedata      ; eedata1

yazmacına kopyala. (1. EEPROM datası)
   movlw   0x00      ; W'ye 0x00 değerini al.
   movwf   eeadr      ; eeadr yazmacına kopyala. (1. EEPROM adresi)
   call   E_YAZ      ;

Eproma yazdir.

;*****************************************************************************;
;   2.EPROM  datamız = 0xDC     Adresimiz = 0x2F
;   Eprom Adresi  0x00 ile

0x3F dahil arası olabilir.
;*****************************************************************************;
   movlw   0xDC      ; W'ye 0xDC değerini al.
   movwf   eedata      ; eedata

yazmacına kopyala. (2. EEPROM datası)
   movlw   0x2F      ; W'ye 0x2F değerini al.
   movwf   eeadr      ; eeadr yazmacına kopyala. (2. EEPROM adresi)
   call   E_YAZ      ;

Eproma yazdir.

;*****************************************************************************;
;   Şimdide   0x00 Eeprom adresindeki datayı
;   e_data1 yazmacına

kopyalayalım.
;   Eprom Adresi  0x00 ile 0x3F dahil arası olabilir.
;*****************************************************************************;
   movlw   0x00      ; W'ye 0x00

değerini al.
   movwf   eeadr      ; eeadr yazmacına kopyala. (1. EEPROM adresi)
   call   E_OKU      ; Epromu

oku.
   movwf   e_data1

;*****************************************************************************;
;   Şimdide   0x2F Eeprom adresindeki datayı
;   e_data2 yazmacına

kopyalayalım.
;   Eprom Adresi  0x00 ile 0x3F dahil arası olabilir.
;*****************************************************************************;
   movlw   0x2F      ; W'ye 0x00

değerini al.
   movwf   eeadr      ; eeadr yazmacına kopyala. (1. EEPROM adresi)
   call   E_OKU      ; Epromu oku.
   movwf   e_data2

SON   goto   SON      ;



;*****************************************************************************;
;   Micro Kontrolor icin tanimlamalar
;   Port tanımlarken, çıkış olacak bitleri 0, giriş olacaklari 1

yap.
;*****************************************************************************;
TANIM   bsf   _rp0      ; BANK 1'e geç.
   movlw   b'00000000'   ; RA0-4

Cikis
   movwf   trisa      ; TRISA'ya kopyala
   movlw   b'11110001'   ; RB1-3 Giris, RB0,4-7 Cikis
   movwf   trisb      ; TRISB'ya kopyala
   bcf   _rp0      ; BANK

0'e geç.
   return         ;

;*****************************************************************************;
;       Data EEPROM'una Degisen veri

yazilir.
;*****************************************************************************;
E_YAZ   bsf   _rp0      ;
   bsf   _wren      ;
   movlw   0x55      ;
   movwf   eecon2   

   ;
   movlw   0xAA      ;
   movwf   eecon2      ;
   bsf   _wr      ;
   bcf   _wren      ;
   btfsc   _wr      ;
   goto   $-1      ;
   bcf   _eeif      ;
   bcf   _rp0

      ;
   return         ;

;*****************************************************************************;
;       Data EEPROM'undan veri

okunur.
;*****************************************************************************;
E_OKU   bsf   _rp0      ;
   bsf   _rd      ;
   bcf   _rp0      ;
   movf   eedata,w   ;


   return         ;

;*****************************************************************************;
;   Data EEPROM iceriklerinin set edilmesi
;   Bu bölümde Programınızda

EEPROM içeriğine bazı değerler vermek isterseniz
;   kullanabilirsiniz..
;   En son satirda, Programın en son yazildiği tarihi saklamak için kullandım.
;   de    1,     1,   20,  4,     0,  

0,    4,    33   ;  
;           Gün     Ay      Yıl           Saat   Dakika
;*****************************************************************************;
   org   h'2100'
   de    0,  0,   

0,  0,    0,  0,    0,  0   ;  
   de    0,  0,    0,  0,    0,  0,    0,  0   ;  
   de    0,  0,    0,  0,    0,  0,    0,  0   ;  
   de    0,  0,    0,  0,    0,  0,    0,  0   ;  
   de    0,  0,    0,  0,    0,  

0,    0,  0   ;  
   de    0,  0,    0,  0,    0,  0,    0,  0   ;  
   de    0,  0,    0,  0,    0,  0,    0,  0   ;     
   de    1,  1,   20,  4,    0,  0,    4, 33   ;  



;*****************************************************************************;
   end



Teşekkürler

elektromer

ground

PIC16 nanoWatt

teknolojisi



PIC18 nanoWatt

teknolojisi

⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

XNHCX

" ORG " Deyimi
ORG Deyimi ingilizcedeki orgin kelimesinin kısaltılmış halidir.Ve bu deyim iki amaç için kullanılır.

1. Program komutlarının hangi adresten başladığını ifade eder.
ORG	0x000

0x000 --> İlk komutun başlama adresidir.

2.Kesme(interrupt) alt programlarının başlangıç adresini belirlemede kullanılır.

ORG	0x004

0x004 --> Kesme alt prog. başlama adresidir.

Ziya

Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

ercinatay

Alıntı yapılan: "Ziya"http://rapidshare.com/files/22752429/Assembly_komut_seti.rar.html


Dosya bulunamadı, diye sonuç var

An error has occured:
File not found

_md_

Hocam yazıları sürdürmeyi düşünüyormusunuz çok başarılı bir çalışma bence.

camby

mplab programı hakkında detaylı kullanım klavuzu gibi birşey arıyorum , bulamadım var mıdır acaba?

Tagli

Gökçe Tağlıoğlu

camby

Alıntı yapılan: "Tagli"Kendi sitesinde var. Bu dosya.
türkçe arıyorum ama

KAZIMUGUR

Mplab anlatımı çeşitli yerlerde verilmişti.
Hatırladığım " akıl defterim " içerisinde vardı.Hatta daha fazlası da vardı onun içerisinde.


http://www.4shared.com/file/19204730/e400b422/MPLAB.html

http://www.4shared.com/file/78713710/46545429/MPLAB_IDE.html

-----------------

Aşağıda 3-4 kitap var , assembly kullanarak pic programlamayı anlatıyorlar.

http://www.4shared.com/file/116811556/97b4ded4/Pic_Assembly.html

quardian

Çok faydalı bilgiler için teşekkür ederim :) Elinize sağlık hocam benzer ayrıntılır varsa devamıda gelirse güzel olcaktır .Konuyu hortlattım :D ama.

muratyamak10

ilk öncelikle intrrupt kesme demektir.kesme ise ana programın bitmesini beklemeden dışardan gelen sinyalle örneğin harici kesme sayıcı kesmesi pin değişiklik kesmesi gibi bir sürü yazılabilir.kesme registeri intcondur yani interrupt kontrol registeri intconun bayrakları yani belli başlı bitleri vardır
ie ile başlayanları kesme izni
if  ile başlayanları kesme
gie genel kesme izni :) ;) :D >:( :( :o ??? ::) :P :-[ :-X :-\ :-* :'(

supermakarna

Bi sorum olacaktı arkadaşları 

Hani bu komutları hep alt alta yazıyoruz yaa. Acaba aralarına bir karakter koyup Yan yana yazmamıza imkan varmı acaba?

Örnek:
BSF PORTA,7
BSF PORTA,6

BSF PORTA,7    ?     BSF  PORTA,6