pcw c de int_rda kesmesine girmiyo

Katılım
26 Şub 2010
Mesajlar
54
Puanları
1
Yaş
35
merhaba arkadaşlar pcw da bir alıcı pic kodu yazılı pic olarak 877A kullanılmakta yalnız pic in rx bacağına bilgi gelmesine rağmen pic kesmeye girmiyo kontrol ettim pic kesmeyi aktif bile etmiyo bi bakarmısınız kod şu şekilde şimdiden teşekkür ederim.

#include "C:\Users\Desktop\son\v.1.2\alıcı1\alici1.h"


#INT_RDA
char al;
void haberlesme(){
disable_interrupts(int_rda);
al=getch();
switch(al){
case 'c': output_high(pin_d0); break;
case 'f': output_toggle(pin_d1); break;
case 'i': output_toggle(pin_d2); break;
case 'l': output_toggle(pin_d3); break;
case 'o': output_toggle(pin_d4); break;
case 's': output_toggle(pin_d5); break;
case 'v': output_toggle(pin_d6); break;
}
enable_interrupts(int_rda);
}
void main()
{


setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

set_tris_c(0x80);
set_tris_d(0x00);
set_tris_b(0x00);

output_b(0x00);


output_d(0x00);

enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);


while(1){
if(interrupt_active(int_rda)) output_high(pin_d0);
output_high(pin_d3);
output_high(pin_d2);

}
}
 
C dilinden anlamam ama, usart peripheral interruptun kontrolündedir ve kodlarda bunu aktif etmek için bir komut göremedim, bunun için komut yazmaya gerek yok mu?
 
rda interruptu kullanılıyor onlarda aktif ediliyo zaten while döngüsüne girmeden global olarak ta int_rda olarakta. usart peripheral kesmesi kullanılmamakta.
 
Bir de şu kodu dene.
Daha önce bir uygulamamda çalıştırmıştım.


Kod:
#include <16f877a.h>
#fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay (clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use fast_io(b)
#define use_portb_lcd TRUE
#include <lcd.c>

unsigned char rData;
int1 IsReaded=FALSE;
int32 cnt=0;

#int_RDA
void  RDA_isr(void)
{
	rData=getc();
	IsReaded=TRUE;
	cnt++;
}

void main(void)
{
	setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
	setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
	setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
	setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
	setup_adc(ADC_OFF);             // ADC birimi devre dışı
	clear_interrupt(INT_RDA);
	enable_interrupts(INT_RDA);
	set_tris_b(0x00);
	
	IsReaded=FALSE;
	cnt=0;
	rData=0;

	lcd_init();
	
	lcd_putc("\f");
	lcd_gotoxy(1,1);
	printf(lcd_putc,"indirilen: %03u",cnt);
	lcd_gotoxy(1,2);
	printf(lcd_putc,"Gelen Veri: %c",rData);
	
	while(1)
	{
		if(IsReaded)
		{
			lcd_putc("\f");
			lcd_gotoxy(1,1);
			printf(lcd_putc,"indirilen: %03u",cnt);
			lcd_gotoxy(1,2);
			printf(lcd_putc,"Gelen Veri: %c",rData);
		}
	}
}
 
cevabınız için teşekkür ederim kodunuz çalışıyo ama benim koda uyarladım yine çalışmadı aynı sorun oluşuyo.
 
Kendi kodunu tam olarak, CODE etiketi içine koyarak buraya ekleyebilir misin?
 
Kod:
#include <16F877A.h>
#device adc=10


#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected


#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,rcv=PIN_C7,bits=8)




#INT_RDA
char al;
void haberlesme(){


disable_interrupts(int_rda);
al=getch();
output_high(pin_d1);
switch(al){
case 'c': output_high(pin_d0); break;
case 'f': output_toggle(pin_d1); break;
case 'i': output_toggle(pin_d2); break;
case 'l': output_toggle(pin_d3); break;
case 'o': output_toggle(pin_d4); break;
case 's': output_toggle(pin_d5); break;
case 'v': output_toggle(pin_d6); break;
case 'z': output_toggle(pin_d7); break;
case 'a': 
case 'b': output_low(pin_d0);  break;
case 'd': 
case 'e': output_low(pin_d1);  break;
case 'g': 
case 'h': output_low(pin_d2);  break;
case 'j': 
case 'k': output_low(pin_d3);  break;
case 'm': 
case 'n': output_low(pin_d4);  break;
case 'p':
case 'r': output_low(pin_d5);  break;
case 't': 
case 'u': output_low(pin_d6);  break;
case 'x': 
case 'y': output_low(pin_d7);  break;


}
enable_interrupts(int_rda);
}






   
   int16 adc[8];
   int data[8],i;
   
void main()
{  


   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   set_tris_c(0x80);
   set_tris_d(0x00);
   set_tris_b(0x00);
  
   output_b(0x00);


   output_d(0x00);
   enable_interrupts(GLOBAL);
   enable_interrupts(int_rda);
     
  
   while(1){
   if(interrupt_active(int_rda)) output_high(pin_d0);
      


       for(i=0;i<8;i++){
         set_adc_channel(i);
         delay_ms(10);
         adc[i] = read_adc();
         if(adc[i]<300){ 
         data[i]=1;
            switch(i) {
               case 0: output_low(pin_a4); output_low(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
               case 1: output_low(pin_a4); output_low(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
               case 2: output_low(pin_a4); output_high(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
               case 3: output_low(pin_a4); output_high(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
               case 4: output_high(pin_a4); output_low(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
               case 5: output_high(pin_a4); output_low(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
               case 6: output_high(pin_a4); output_high(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
               case 7: output_high(pin_a4); output_high(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
            }
         }
         else {
         
         data[i]=0;
      
      switch(i) {
               case 0: output_low(pin_a4); output_low(pin_c6); output_low(pin_c5);    output_low(pin_c4); break;
               case 1: output_low(pin_a4); output_low(pin_c6); output_high(pin_c5);   output_low(pin_c4); break;
               case 2: output_low(pin_a4); output_high(pin_c6); output_low(pin_c5);   output_low(pin_c4); break;
               case 3: output_low(pin_a4); output_high(pin_c6); output_high(pin_c5);  output_low(pin_c4); break;
               case 4: output_high(pin_a4); output_low(pin_c6); output_low(pin_c5);   output_low(pin_c4); break;
               case 5: output_high(pin_a4); output_low(pin_c6); output_high(pin_c5);  output_low(pin_c4); break;
               case 6: output_high(pin_a4); output_high(pin_c6); output_low(pin_c5);  output_low(pin_c4); break;
               case 7: output_high(pin_a4); output_high(pin_c6); output_high(pin_c5); output_low(pin_c4); break;
            }
         
         }
   delay_ms(10);
       }
   
 
    
    output_high(pin_d3);
    output_high(pin_d2);
     
}
  
 
}
[COLOR=#9932CC]
[/COLOR]
 
Bir de şöyle dene bakalım.
Sana tavsiyem kesmeler içinde olabildiğince kısa kod kullan.


Kod:
#include <16F877A.h>
#device adc=10
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)

char al = 0x00;
int16 adc[8];
int data[8],i;
int1 IsReaded=FALSE;

#INT_RDA
void RDA_isr(void)
{
	al=getch();
	IsReaded=TRUE;
	disable_interrupts(INT_RDA);
	output_high(pin_d1);
}

void main()
{
	setup_adc_ports(ALL_ANALOG);
	setup_adc(ADC_CLOCK_INTERNAL);
	setup_psp(PSP_DISABLED);
	setup_spi(SPI_SS_DISABLED);
	setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
	setup_timer_1(T1_DISABLED);
	setup_timer_2(T2_DISABLED,0,1);
	setup_comparator(NC_NC_NC_NC);
	setup_vref(FALSE);
	enable_interrupts(GLOBAL);
	clear_interrupt(INT_RDA);
	enable_interrupts(INT_RDA);
	
	set_tris_c(0x80);
	set_tris_d(0x00);
	set_tris_b(0x00);
  
	output_b(0x00);
	output_d(0x00);
     
	while(1)
	{
		if(interrupt_active(int_rda))
			output_high(pin_d0);
			
		if(IsReaded)
		{
			switch(al)
			{
				case 'c': output_high(pin_d0); break;
				case 'f': output_toggle(pin_d1); break;
				case 'i': output_toggle(pin_d2); break;
				case 'l': output_toggle(pin_d3); break;
				case 'o': output_toggle(pin_d4); break;
				case 's': output_toggle(pin_d5); break;
				case 'v': output_toggle(pin_d6); break;
				case 'z': output_toggle(pin_d7); break;
				case 'a': 
				case 'b': output_low(pin_d0);  break;
				case 'd': 
				case 'e': output_low(pin_d1);  break;
				case 'g': 
				case 'h': output_low(pin_d2);  break;
				case 'j': 
				case 'k': output_low(pin_d3);  break;
				case 'm': 
				case 'n': output_low(pin_d4);  break;
				case 'p':
				case 'r': output_low(pin_d5);  break;
				case 't': 
				case 'u': output_low(pin_d6);  break;
				case 'x': 
				case 'y': output_low(pin_d7);  break;
			}
	
			IsReaded=FALSE;
			clear_interrupt(INT_RDA);
			enable_interrupts(INT_RDA);
		}
		
		for(i=0;i<8;i++)
		{
			set_adc_channel(i);
			delay_ms(10);
			adc[i] = read_adc();
         
			if(adc[i]<300)
			{
				data[i]=1;
				switch(i)
				{
					case 0: output_low(pin_a4); output_low(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
					case 1: output_low(pin_a4); output_low(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
					case 2: output_low(pin_a4); output_high(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
					case 3: output_low(pin_a4); output_high(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
					case 4: output_high(pin_a4); output_low(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
					case 5: output_high(pin_a4); output_low(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
					case 6: output_high(pin_a4); output_high(pin_c6); output_low(pin_c5); output_high(pin_c4); break;
					case 7: output_high(pin_a4); output_high(pin_c6); output_high(pin_c5); output_high(pin_c4); break;
				}
			}
			else
			{
				data[i]=0;
				switch(i)
				{
					case 0: output_low(pin_a4); output_low(pin_c6); output_low(pin_c5);    output_low(pin_c4); break;
					case 1: output_low(pin_a4); output_low(pin_c6); output_high(pin_c5);   output_low(pin_c4); break;
					case 2: output_low(pin_a4); output_high(pin_c6); output_low(pin_c5);   output_low(pin_c4); break;
					case 3: output_low(pin_a4); output_high(pin_c6); output_high(pin_c5);  output_low(pin_c4); break;
					case 4: output_high(pin_a4); output_low(pin_c6); output_low(pin_c5);   output_low(pin_c4); break;
					case 5: output_high(pin_a4); output_low(pin_c6); output_high(pin_c5);  output_low(pin_c4); break;
					case 6: output_high(pin_a4); output_high(pin_c6); output_low(pin_c5);  output_low(pin_c4); break;
					case 7: output_high(pin_a4); output_high(pin_c6); output_high(pin_c5); output_low(pin_c4); break;
				}
			}

			delay_ms(10);
		}

		output_high(pin_d3);
		output_high(pin_d2);
	}
}
.
 
çok teşekkür ederim dediğiniz gibi yapınca oldu. bir şey daha rs232 kullanırken tx bacağını normal pin olarak kullanamaz mıyım benim pic in sadece rx bacağı çalışıyo tx i farklı birşey için kullanmıştım ama kodda orayı da tx yapınca çalıştı yoksa çalışmıyo yine.
 
Sadece TX pinini kaldırıp baştan derle yazılımı, bir de öyle kullan.
 

Forum istatistikleri

Konular
128,179
Mesajlar
915,659
Kullanıcılar
449,943
Son üye
Ali4129

Yeni konular

Geri
Üst