int_rda ile timer1 kesmesini çağırmak

Başlatan isoment01, 21 Haziran 2017, 13:08:12

isoment01

Arkadaşlar herkese merhaba ben timer1 kesmesi ile oluşturduğum stepper motor palslerimi serialden vereceğim komutlarla başlatıp durdurmak istiyorum bunun için rda kesmesini kullandım fakat rda kesmesindeyken timer1 kesmesini nasıl call edeceğim onu bilemiyorum aslında belki timer1'i çağırmaya da gerek yoktur çözüm yollarınıza açığım. Kodlarımı buraya atacağım. Rda kesme fonksiyonunda eksiğim var.
16f877 kullanıyorum, devremi breadboard üzerinde hazırlıyorum.
#device PIC16F877A
#include <16f877a.h>
#fuses xt,nowdt,noprotect, nobrownout, nolvp, noput, nowrt, nocpd
#use delay (clock=4000000)
#use fast_io(b)
unsigned int16 sayac = 0, hedef_ileri = 0, hedef_geri=0, yon=1;
char klavye=0;
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1, Bits=8,BRGH1OK)
#int_rda
#int_timer1
#priority rda, timer1
void serihaberlesme_kesmesi ()
{
disable_interrupts(int_rda); // int_rda kesmesini pasif yap
output_high(pin_b0); // RC5 çıkışı lojik-1
klavye=getchar();// String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
putc(klavye);
printf("\n\rYazdiginiz harf> %s\n",klavye); // Satır atla, yeni satır,RS232 üzerinden klavye string ifadesini gönder,satır atla
printf("\f%s",klavye); //LCD'yi temizle ve klavye string ifadesini LCD'de göster
output_low(pin_b0); // RC5 çıkışı lojik-0
printf("\n\rKlavyeden bir metin giriniz ve enter tusuna basiniz>"); // Satır atla, yeni satır,RS232 üzerinden belirtilen metni gönder
}
void timer1_interrupts()
{

set_timer1(64923);

sayac++;
if(sayac==hedef_ileri)
{
yon=2;
output_low(pin_c1);// motor geri gidiyor
}
if(sayac<3200 || sayac>4000)
{
output_high(pin_c2);
delay_us(20);
output_low(pin_c2);
}
if(sayac==hedef_geri)
{
sayac=0;
yon=1;
output_high(pin_c1);// motor yönü belirlendi
//disable_interrupts(int_timer1);// motor calısıyor fakat pulse uretmıyor
}
}

void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);      //262 ms overflow      //65,5 ms overflow
setup_timer_2 (T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
output_b(0x00);
set_tris_c(0x00);
output_c(0x00);
enable_interrupts(GLOBAL);
enable_interrupts(INT_timer1);
enable_interrupts(int_rda);
printf("\n\r System initializing....\n\r");
output_high(pin_c3);// motor aktif
delay_ms(100);
output_high(pin_c1);// motor yönü belirlendi
yon=1;//ileri yon
delay_us(50);
hedef_ileri=3200;//400*8
hedef_geri=6400;
sayac=0;
set_timer1(64923);












   while(TRUE)
   {
     enable_interrupts(INT_timer1);
enable_interrupts(int_rda); //TODO: User Code
   }

}






serial monitörde de şunları görüyorum ; buradası da çok garip programı çalıştırdığımda direk bunlar karşıma çıkıyor .
ektedir.

Powered by EzPortal