CCS C Derleyicisinde Timer1 kesmesini sıfırlamak

Başlatan karakaleli, 23 Ocak 2015, 17:28:24

karakaleli

Merhaba, timer1 registerlarına erişip timer1 kesmesini sıfırlamam gerekmekte.Acaba bunu nasıl yapabilirim?

Salih


Okan AKÇA

Her kesmede sifirliyor  0  yapmanin bir anlamı olmaz

Salih


yldzelektronik

Kesmeyi sifirlamaktan kasit kesme olusmasini engellemek mi kesme istegini sifirlamak m i soz ediyoruz? Amac ne?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

ziyaretci

#5
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.
*/
}

karakaleli

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.

esensoy

timer ile gürültüyü nasıl engelliyorsunuz?
En tehlikeli an "zafer" anıdır.

karakaleli

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.

Salih

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.

karakaleli

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){};

}

esensoy

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,
En tehlikeli an "zafer" anıdır.