SERİ HABERLEŞME ALICI VERİCİ PROBLEMİ

Başlatan lazut08, 06 Aralık 2013, 01:53:15

lazut08

Arkadaşlar öncelikle herkese merhaba. rs232 haberleşmesi için yazdığım kodun bir yerledinde terslikmi var  bir türlü içinden çıkamadım  :-\.vericiden A karakteri gönderdiğimde pin_b0 ın 1 olması gerekirken pin_b1 aktif oluyor acaba nerde yanlışlık yapıyorum.Yardımlarınız için teşekkürler.



verici:
#include <16F877A.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#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
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                  
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   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);

while(1)
{
putc('A');
delay_ms(100);

}}


alıcı:
#include <16F877A.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#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
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                  
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
char gelen;
#int_RDA

void  RDA_isr(void)
{
gelen=getc();
clear_interrupt(INT_RDA); 
}



void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   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(INT_RDA);
   enable_interrupts(GLOBAL);
   set_tris_b(0x00);
 while(1)
 {

 if(gelen=='A')
 {
 output_high(pin_b0);
 output_low(pin_b1);
 }
 else
 {  
    output_high(pin_b1);
    output_low(pin_b0);
 }
 }}


lazut08

tmmdır millet halloldu cevap gelene kadar hallettim :) kodu bu şekilde değiştirdim
#include <16F877A.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#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                  

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

char y;
#INT_RDA
void kesme(void)
{

disable_interrupts(INT_RDA);
}
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   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(INT_RDA);
   enable_interrupts(GLOBAL);
   set_tris_b(0x00);
   output_b(0x00);
 while(1)
 {
y=getc();
if(y=='A')
 {
 output_high(pin_b0);
 output_low(pin_b1);
 }
 else
 {
 output_high(pin_b1);
 output_low(pin_b0);
 }
 }}

omersn

#2
Kolay gelsin benimde buna benzer bir projem var, atmega128 de keypadden girilen bir sayıyı bilgisayarda görüp, bilgisayardan girdiğim bir sayıyı displayde görmem gerekiyor bunu senin kodlarınla yapabilirmiyim yoksa tamamen farklı bir kod mu gerekiyor

lazut08

Anladım oda buna benzer dostum displayleri kullandığın entegrenin  bacaklarına bağladıktan sora while içinde gönderilen değeri okutup displayden göstrceksin yani mantık benzer sadece çıkışları değiştirdiğim yerlerde displayde gösterceksin ama ne kullandığını bilmiorum assembly mı c mi ona göre bi ayar yaparsın artık  ;)

barut

bu devreyi kurma şansın oldumu kurduysan gecikme yaşadın mı ?