PIC Assembly İLE PROGRAMLAMA Dersleri

Başlatan byka, 19 Ekim 2002, 04:02:52

loves_oi

Arkadaşlar , interrupt'lara çalışıyorum da basit bir interrupt mantığı ile çalışabilir bir kod -pseudo kod da olabilir - paylaşabilir misiniz?
Bildiğim kadarıyla program normal akışındayken bir interrupt gerçeklşince Pc'ye h'04' load ediliyor ardından program memory'de bu adrese geliniyor herhangi bir interrupt olunca. Burada da goto ile istediğimiz bir interrupt service routine'ine gidebiliriz. Bildiklerim bunlar , ancak somut bir örneğe ihtiyacım var yani GIE RBIE vs enable ve flag bitleri nerede set ediliyor nasıl kullanılıyor teorikten öte bir bilgim yok o yüzden bunları gösteren bir örneğe veya link'e çok ihtiyacım var, yani mesela diyin ki şu interrupt gerçekleşti (bu interrupt şu olduğu için gerçekleşti) ardından program flow şuraya kaydı enable ve flag bitleri şurada set veya clear edildi vs.
Bence bu başlık altında böyle bir yazı çok faydalı olur.
Şimdiden teşekkür ederim.

camby

Disaridayim paylasamiyorum , fakat asm bolumunde aradiniz tipte ornek cok sayida vardir.

Tagli

MPLAB'in içinde her işlemci için hazır şablon dosyaları vardı diye hatırlıyorum. Kesme kodunun başında bazı sistem register'larının yedeklenmesi ve kesme çıkışında geri yüklenmeleri de gerekiyor. Kesme bayrakları ise donanıma bağlı. Örneğin 8 bitlik PIC'lerde seri iletişim kesme bayrağı tamamen donanımın elinde, yani kullanıcı tarafından sıfırlanamıyor. Ama diğer pek çok bayrağı kullanıcının sıfırlaması gerekiyor. Ayrıca, kesne içinde GIE ile oynanmaz (çok acayip bir program değilse). GIE kesme girişinde donanım tarafından sıfırlanır, çıkışında ise genelde RETFIE komutuyla çıkılarak 1 yapılır, ki bu komutun RETURN'den farkı GIE'yi 1 yaparak dönmesi.
Gökçe Tağlıoğlu

HD#12

merhaba,
pıc16f877a pıc ini kullanıyoruz. mplapta program yazıyoruz assembly ile.
bu haftaki projem  4x4 lük tuştakımında  herhangi bir butona basında o kodu ledde gösterme



****************************************
LIST P=16F877A
INCLUDE<P16F877A.INC>
ORG 0x000
_CONFIG H'3F31'
DEGISKEN TANIMI
CBLOCK 0x20
_W
_STATUS
_FSR
_PCLATH
SATIR
TUS
TEMP
TIMER10MS
TIMER1S
TIME1S
TIMECTRL
UTONCTRL
ENDC
ORG 0
PAGESEL ANA_PROGRAM
GOTO ANA_PROGRAM
ORG 4
GOTO KESME

KLAVYE TARA
SATIR1

MOVLW b'11100000'
MOVWF PORTD

SIFIR
BTFSS PORTD,0
RETLW d'10'

BIR

BTFSS PORTD,1
RETLW d'1'

IKI
BTFSS PORTD,2
RETLW d'2'

UC

BTFSS PORD,3
RETLW d'3'

SATIR2
MOVLW b'11010000'
MOVWF PORTD


DORT
BTFSS PORTD,0
RETLW d'11'

BES

BTFSS PORTD,1
RETLW d'6'

ALTI
BTFSS PORTD,2
RETLW d'5'

YEDI
BTFSS PORTD, 3
RETLW d'4'

SATIR3

MOVLW b'10110000'

MOVWF PORTD

SEKIZ

BTFSS PORTD,0
RETLW d'12'

DOKUZ

BTFSS PORTD,1
RETLW d'9'

ON
BTFSS PORTD, 2

RETLW d'7'

SATIR4

MOVLW b'01110000'

ONIKI

BTFSS PORTD,0

RETLW d'13'

ONUC
BTFSS PORTD ,1
RETLW d'15'

ONDORT

BTFSS PORTD,2

ONBES

BTFSS PORTD ,3
RETLW d'14'
RETLW d'255'

KESME

MOVWF _W
SWAPF _W,F
SWAPF STATUS ,W
MOVWF _STATUS
SWAPF FSR,W
MOVWF _FSR
SWAPF PCLATH,W
MOVWF _PCLATH
BTFSS INTCON ,TOIE
GOTO INT_SON
BTFSS INTCON ,TOIF

GOTO INT_SON
MOVLW 0x06
MOVWF TMRO
BSF TIMECTRL ,0
INCF TIMER10ms ,F
MOVLW .10
SUBWF  TIMER10ms,W
BTFSS STATUS,Z

GOTO INT_SON
CLRF TIMER10ms
BSF  TIMECTRL,1
INCF TIMER1s,F

MOVLW .100
SUBWF TIMER1s,W
BTFSS STATUS,C
GOTO INT_SON
CLRF TIMER1s
BSF TIMECTRL,2

INT_SON
BCF INTCON,TOIF
SWAPF _PCLATH
SWAPF PCLATH
SWAPF _FSR,W
MOVWF FSR
SWAPF  _STATUS,W
MOVWF STATUS

SWAPF _W,W
RETFIE

ANA_PROGRAM



Ana_program   
   movlw   0xD1         
               
   banksel TRISB         
   clrf   TRISB      
   clrf   TRISE         
   movlw   0x0F
   movwf   TRISD      
            
               
   clrf   PORTB         
   clrf   satir      
   clrf   tus
   clrf   Timer10ms      
   clrf   TimeCtrl      
   clrf   ButonCtrl      
   movlw   0x06
   movwf   TMR0      
               
   bsf   INTCON, T0IE   .
   bsf   INTCON, GIE      
               
   btfss   TimeCtrl, 2   
               
   goto   $-1         
            
Ana_j1
   btfss   TimeCtrl, 1      
   goto   Ana_j2      
   call   KlavyeTara      
   movwf   tus         
   sublw   0xFF
   btfsc   STATUS, Z
   goto   Ana_j2         
   bsf   ButonCtrl, 0      
   bcf   TimeCtrl, 1      
Ana_j2
                  
???????????            end

buraya kadar olan rutinleri yzdım fakat ana_j de basılan butonun kodunu ledde gösterme kodunu birturlü yapamadım. yardımcı olabilirseniz çok sevinirim şimdiden teşekkürler...

Kabil ATICI

örneğin
RETLW d'15'
geri döndüğü satır nerede ise
movwf   PORTX   ;led'lerin bağlı olduğu port...


...
  call   KlavyeTara     
;işte buraya...
   movwf   tus   
...
ambar7

yek79

#50

selamunaleykum. include ve list pic 16f84 gibi komutu kullanmadan nasıl program yazılır? (hoca decfsz komutu kullanacaksınız dedi )

Lütfen cevap verin performans ödevim yapmazsam sınıfta kalacam

RaMu

MpLab da projeni oluştur derle,
wiev menüsünden disassembly listing kısmını aç,
sağ tarafda senin yazdığın kod
sol tarafda list include olmadan yazılabilecek karşılığı bulunur.

Ayrıca bu gibi sorular için yeni konu açman daha uygun.

Birde sınıfta kalmak mı kaldı artık?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

yek79

abi dediğinden zerre birşey anlamadım lütfen sen yapıp bana atsan olurmu persembe gunu sson

ibrahim.mar7

arkadaşlar sıcaklık kontrol termostatı yapmak istiyorum kuluçka makinası için. internetten dijital termostat devlere baktım hepsi pic ile yapılmış pic yazılımı bilmiyorum  baska basit ama  kararlı düzgün çalışan devre nasıl yapabilirim.

anrobot




Bu devreyi yapabilirsin rahatlıkla oldukça hassastır... kolay gelsin.