Merhaba, timer1 registerlarına erişip timer1 kesmesini sıfırlamam gerekmekte.Acaba bunu nasıl yapabilirim?
Set_Timer1(0);
Her kesmede sifirliyor 0 yapmanin bir anlamı olmaz
Belki harici sayıcı olarak kullanıyordur.
Kesmeyi sifirlamaktan kasit kesme olusmasini engellemek mi kesme istegini sifirlamak m i soz ediyoruz? Amac ne?
Kastın bayrak kaldırma ise;
#int_timer1
void kesme(){
disable_interrupts(int_timer1); /* kesme programının başında timer1 kesmesini deaktif edersen kesme programından çıktığında timer1 kesmesi tekrar dinlenmeye başlar.*/
/*
komutlar.
*/
}
timer kesmesini sıfırlamakta ki amacım bilgisayarla veya çevresel elemanlarla iletişim kurarken gürültüyü önlemek.belirlenen buffer size dışında gelen verileri okumasını engellemekdi.bende SET_TIMER1(0) şeklinde yapmıştım fakat farklı yolu olabilir mi diye düşündüm.yardımlarınız için teşekkürler.
timer ile gürültüyü nasıl engelliyorsunuz?
Alıntı yapılan: esensoy - 26 Ocak 2015, 10:07:50
timer ile gürültüyü nasıl engelliyorsunuz?
mesela projemde 8 bit şeklinde alıyorum örneğin dataya eğer gürültü veya herhangi birşey 1 bitlik gelirse 1+7 den benim tüm datalarım yanlış gelmeye başlayacak.onun önüne geçmiştim böylece.
Alıntı yapılan: karakaleli - 26 Ocak 2015, 10:31:48
mesela projemde 8 bit şeklinde alıyorum örneğin dataya eğer gürültü veya herhangi birşey 1 bitlik gelirse 1+7 den benim tüm datalarım yanlış gelmeye başlayacak.onun önüne geçmiştim böylece.
Bende anlayamadın yaptığın işlemi.
Mümkünse kodlarla örnek verirmisin.
Alıntı yapılan: salih - 26 Ocak 2015, 11:10:17
Bende anlayamadın yaptığın işlemi.
Mümkünse kodlarla örnek verirmisin.
#int_TIMER1
void TIMER1_isr(void)
{
i=0;
}
#INT_RDA
void IntRDA_isr(void)
{
SET_TIMER1(0);
unsigned char counter = 0;
data=getch();
array[i]=data;
i++;
if(i==RX_BUFFER_SIZE)
{
for(counter = 0; counter< RX_BUFFER_SIZE; counter++)
{
putchar(array[counter]);
}
i=0;
}
}
void main()
{
// SETUP_SPI(SPI_MASTER |SPI_L_TO_H | SPI_CLK_DIV_16 )
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(GLOBAL);
SET_TIMER1(65535);
ENABLE_INTERRUPTS(INT_TIMER1);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8 );
putchar(0x55);
delay_ms(100);
while(1){};
}
Yaptım dediğiniz şey gereksiz koddan başka birşey değil, böyle bir yöntem de hiç bir yerde görmedim, varsa teknik bir alt yapısı anlat da öğrenelim,
RS232 de data nın bozuk olup olmadığını parity ile anlamak daha doğrudur, yalnız parity de de çift sayıda bit gürültüden dolayı değişmişse yakalayamazsınız, yöntem değiştirmek gerekir,