RB0 ve Timer1 Kullanımı

Başlatan 0nur, 11 Eylül 2013, 08:41:12

0nur

Merhaba,

Motor devrini hesaplamak için encoderdan gelen verileri RB0 kesmesi ile sayıyorum, aynı zamanda timer1 kesmesinide kullanarak motor devrini hesaplamayı planlıyorum. Buna bir diğer alternatif olarak pulsin komutunu kullanmak ana döngüdeki işleyişi ne kadar yavaşlatır ve engeller ? Sizce RB0 ve Timer1 kesmesi ile mi yoksa pulsin komutu kullanarak mı yapmak daha mantıklı ?

Aşağıda yazmış olduğum proton kodunda amacım bir yandan timer1 500msnde bir kesme oluştururken diğer yandan b0 ile gelen sinyalleri saydırmak. 2 kesmeyi aynı anda kontrol etmek için kesme geldiğinde bak etiketine gönderip hangi kesmenin taşma bayrağı 1 ise ona bağlı yönlendirme yapıyorum. Timer1 in sayması gereken 500msn lik sürede tick değişkeni 1 artması gerekiyor, her b0 kesmesinde sayi değişkeni 1 artması gerekiyor, fakat sistemde her timer1 kesmesinde 2 değişkende 1 artıyor.. Çift interrupt kullanmadığım için bu hususta biraz kafam karıştı yardımcı olabilirseniz sevinirim.

Device 16F877   
Config HS_OSC , WDT_OFF, PWRTE_ON,  BODEN_OFF , LVP_OFF, CP_OFF  
Declare XTAL 4

'============================== LCD TANIMLAMALARI=====================================;

LCD_DTPIN = PORTD.4	
LCD_RSPIN = PORTE.0
LCD_ENPIN = PORTE.1
LCD_INTERFACE =  4	' 4-bit Interface
LCD_LINES =  4
LCD_TYPE  = alpha
LCD_COMMANDUS = 2000
LCD_DATAUS = 50
ALL_DIGITAL TRUE 
Cls	

'==========================================================================================================;            
'=====================================KESME TANIMLAMALARI ================================;              


On_Interrupt GoTo bak              'Software int. oluştuğunda INT etiketine git. 

OPTION_REG.6=0
T1CON=%00110001    ' -------->>>  |  DİSABLE   |   DİSABLE   |   PS1    |  PS0   |   T1OSCEN  |   T1SYNC   |  TMR1CS   |   TMR1ON   |
         
Symbol INTF = INTCON.1      'RB0 KESME BARAĞI
Symbol INTE = INTCON.4      'RB0 KESME YETKİ
Symbol GIE = INTCON.7       'GLOBAL INT. YETKI
Symbol PEIE=   INTCON.6
Symbol TMR1E=  T1CON.0      ' TMR1 ENABLE BİTİ
Symbol TMR1IF= PIR1.0       ' TMR1 TAŞMA BAYRAĞI
Symbol TMR1IE= PIE1.0


TMR1IE=1 ' TMR1 AŞIMI KESME OLUŞTURMA AKTİF ETME BİTİ
TMR1IF=0 ' TMR1 AŞIM KESME BAYRAĞI
PEIE=1  
INTE=1                      'RB0 Kesmesi aktif
GIE=1                       'Aktif O an Tüm kesmelere Yetki ver      


TMR1H=$0b
TMR1L=$dc

'==========================================================================================================;
'=====================================PWM TANIMLAMALARI ================================;  

CCP1CON=%00001100
CCP1_PIN = PORTC.2   ' Select HPWM port and bit for CCP1 module. i.e. channel 1
CCP2_PIN = PORTC.1   ' Select HPWM port and bit for CCP2 module. i.e. channel 2     
   
'==========================================================================================================;
'============================= GİRİŞ - ÇIKIŞ VE DEĞİŞKENLER ==========================;
     
Input PORTB             
TRISC=0
Dim TICK As Word       
Dim Sayi  As Word          

Symbol mi=PORTC.0
Symbol mg=PORTC.1
Symbol led=PORTC.3
Symbol led2=PORTC.4        
Clear 



'==========================================================================================================;
'============================= ANA DÖNGÜ ==============================================;

basla:
HPWM 1,125,1000
Print At 1,1,"RB0 KESMESI: ",@Sayi,"  "
Print At 2,1,"TMR1 TICK SAYISI: ",@TICK,"  "

GoTo basla                 
               
'============================================== KESME ======================================================       
   

bak:
If TMR1IF=1 Then GoTo INT
If INTF=1 Then GoTo Kesme
Return




Disable
INT: 
TMR1H=$0b
TMR1L=$dc
TMR1IF=0
Inc TICK
Toggle  led
Enable    
Resume 


Kesme:  
Context SAVE                'kayıcıların içeriğini sakla
INTF=0  
Inc Sayi                'sayi değişkenini bir arttır    
Context Restore             'tüm kayıtcıların içeriğini tekrar yükle ve kesmeden çık
Stop
Robotik Elektronik ve PIC Programlama Eğitimleri ;www.electrobotic.org/robotik-elektronik-ve-pic-programlama-egitimleri-2/