Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

RB0 hardware kesme sorun nerde?

Başlatan baddog777, 06 Eylül 2009, 02:18:45

baddog777



resimdeki devrede kullandıgım programda RB0 kesmesini microcode basic de asagıdakı gıbı yapıp derledıgımde sorunsuz calısıyor..
define osc 20
adim var word
bekle var Word
adimlar var Byte[8]

TRISB=%00000000

ON interrupt GoTo kesme 
OPTION_REG=255' high ise kes
INTCON=%10010000 
TRISB=%00000011 
TRISA=%00000000 
CMCON=7


adimlar[0] = %00000001
adimlar[1] = %00000011
adimlar[2] = %00000010
adimlar[3] = %00000110
adimlar[4] = %00000100
adimlar[5] = %00001100
adimlar[6] = %00001000
adimlar[7] = %00001001
porta=0
adim = 0

'bekle = 50  '30 ms adım arası süre

basla:
' pauseus bekle
if adim=8 Then adim = 0
If adim=-1 Then adim = 7
PORTA = adimlar[adim]
GoTo basla


Disable
kesme:

if portb.1=1 then 
adim=adim+1
endif
if portb.1=0 then 
adim=adim-1
endif

INTCON.1=0

Resume
   Enable
   End


Fakat bu kodu proton basıce uygun hale getırip derledıgımde sorun var, kesme mı gerceklesmıyor yoksa kesme bır kez gerceklesıyor Flag mı sıfırlanmıyor anlayamadım.. hatam nerde acaba
Device 16F628A

XTAL = 20
		Dim adim As Byte
		Dim bekle As Word
        Dim adimlar[8] As Byte

TRISB=%00000000

ON_hardware_interrupt kesme 
OPTION_REG=255
OPTION_REG.6=1'
OPTION_REG.7=1 
INTCON=%10010000 
TRISB=%00000011 
TRISA=%00000000 
CMCON=7 

Symbol sinyal = PORTB
Symbol a1 = PORTA
adimlar[0] = %00000001
adimlar[1] = %00000011
adimlar[2] = %00000010
adimlar[3] = %00000110
adimlar[4] = %00000100
adimlar[5] = %00001100
adimlar[6] = %00001000
adimlar[7] = %00001001

sinyal = 0
adim=0
a1 = 0
'bekle = 100 

basla:
'DelayMS bekle
If adim=8 Then adim = 0
If adim=-1 Then adim = 7
a1 = adimlar[adim]
GoTo basla


Disable
kesme:
If sinyal.1=1 Then Inc adim
If sinyal.1=0 Then Dec adim
INTCON.1=0
Return
 Enable

drmp

sanırım  disable ile enable komutlarının yerlerinde yanlışlık var bunları kesme  programının içine alırsan düzelebilir

baddog777

malesef o sekılde de denedım sonuc degısmedı, microcode studıo da yazdıgımda hıc sorun yok, proton da bırturlu calısmıyor, proton ıcın gereklı degısıklıklerı yapıyorum, derlemede hata falanda almıyorum ama bırturlu calısmıyor! bir turlu anlayamadım hatanın nerde oldugunu cok ılgınc!
Birde aynı codu 16f877 ıcın yapıp derledıgım zaman cmcon=7 satırını cıkartmadıgım zaman derleme sırasında hata verıyor, cıkarttıgım zaman derlenıyor ve sorunsuz calısıyor! 16f628a ıcın herhangı bır hata almıyorum bunun sebebı ne olabılır acaba!

baddog777

isis de debug kısmında gozlemledıgım sey kesme gercelesıyor,
kesme gerceklestıgınde intcon nun birinci bit'i 1 oluyor bu esnada 7nci bit 0 degerıne donuyor ! dısable edıltıkten sonra tekrar enable olmuyor!
return komutundan once intcon.7=1 komutunu yazdım, 7ncı biti mauel olarak enable yaptım ve calıstı program! bu hata benım code danmı kaynaklanıyor yoksa proton da mı sorun! anlamamadım!

baddog777

sorun cözüldü :) konu kapatılabılır..
proton ıcın hardware kesmede enable -disable yapmayıp context save
context restore yapmak gerekıyormus bu sekılde sorun ortadan kalktı :)