ccs derleyicisi seri iletişim yardım?

Başlatan hollywoodlu, 26 Mayıs 2011, 20:56:02

hollywoodlu

Arkadaşlar bitirme ödevim için ccste 16f877 kullanarak seri iletişim programı yazmıştım ve bu programla rf alıcı verici sayesinde verici yani bilgisayardan girilen özel atanan bir tuşa göre pic'in istediğim çıkışı aktif olacak. pekala bunu yapabildim fakat bir sorunum var tuştan elimi çektiğimde de çıkış aktif kalıyor. tuştan elimi çektiğimde nasıl o çıkışı pasifleştirebilirim yardım eder misiniz? bastığım kadar aktif olacak yani

Salih

Örnek olarak,
Tuşa basıldığında A harfi gönder. Tuş basılı değilse B harfi gönder. Pic tarafında A harfi geldiğinde çıkış aktif yap.
B harfi geldiğinde çıkışı pasif yap.

jackal183

bu bahsettiğin şey while döngüsüyle gerçekleşecek bir şey, atıyorum şu şekilde

while(RA1)
{
      RB1=1;

}
RB1=0;

Buna benzer birşey olmalı

hollywoodlu

#include "C:\Users\HOLLYWOOD\Desktop\proje\main.h"
#use fast_io(c)
#use fast_io(d)
#fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7, parity=n, stop=1)
char a;

#INT_RDA
void seri_kesme()

{

disable_interrupts(INT_RDA);
a=getch();

}



void main()
   {
   set_uart_speed(9600);
   
SET_TRIS_C( 0b10000000 );
SET_TRIS_D( 0x00 );

output_c(0x00);
output_d(0x00);

while(true)
{enable_interrupts(int_rda);

enable_interrupts(GLOBAL);

if(a=='8'){output_high(pin_d4);output_low(pin_d5); output_high(pin_d6);output_low(pin_d7);}//seri porttan 8 ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='5'){output_low(pin_d5);output_low(pin_d4); output_low(pin_d7);output_low(pin_d6);}//seri porttan 5 ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='2'){output_high(pin_d5);output_low(pin_d4); output_high(pin_d7);output_low(pin_d6);}//seri porttan 2 ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='4'){output_high(pin_d5);output_low(pin_d4); output_high(pin_d6);output_low(pin_d7);}//seri porttan 4 ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='6'){output_low(pin_d5);output_high(pin_d4); output_low(pin_d6);output_high(pin_d7);}//seri porttan 6 ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='a'){output_high(pin_c4);output_low(pin_c5);}//seri porttan a ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='d'){output_high(pin_c5);output_low(pin_c4);}//seri porttan d ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='s'){output_low(pin_c5);output_low(pin_c4);}//seri porttan s ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='r'){output_high(pin_c2);output_low(pin_c3);}//seri porttan r ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='v'){output_high(pin_c3);output_low(pin_c2);}//seri porttan v ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='f'){output_low(pin_c3);output_low(pin_c2);}//seri porttan f ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='t'){output_high(pin_d0);output_low(pin_d1);}//seri porttan t ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='b'){output_high(pin_d1);output_low(pin_d0);}//seri porttan b ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='g'){output_low(pin_d1);output_low(pin_d0);}//seri porttan g ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='q'){output_high(pin_d2);output_low(pin_d3);}//seri porttan q ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='e'){output_high(pin_d3);output_low(pin_d2);}//seri porttan e ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...

if(a=='w'){output_low(pin_d3);output_low(pin_d2);}//seri porttan w ascii kodu okunduğunda süslü parantez içindeki işlemleri gerçekleştir...




}
}



Arkadaşlar program bu. durdurmak için başka tuşlara basmam gerekiyor programın bu şekliyle. fakat ben tuştan elimi çektiğimde duracak şekilde ayarlayamadım. bunun için klavye hex kodlarınada baktım yani bastığımda yolladığı kodu ve elimi o tuştan çektiğimde yolladığı kodları buldum fakat bunu programa yansıtamadım. bunu nasıl yapabilirim?

jackal183

burdaki if yerine while yazmalısın, tuşa bastığın sürece bu işlemler gerçekleşir, ancak bu durumların içerisine bir de hiç bir tuşa basılmadığı zaman ne yapılacağını eklemen gerekir

hollywoodlu

#5
sanırım while yerine switch-case kullanmalıyım bu sayede belirtilenlerin dışında veya hiçbir tuşa basılmadığında yani default değer algılandığında çıkışlar sıfırlanmalı değil mi?
Bu switch-case olayınıda denedim biraz önce fakat olmadı. muhtemelen alınan karakterler saklanıyor. yani basılmadığında da basılan değer kalıyor. bunu nasıl giderebilirim

hoca

tam inceleyemedim ama şöyle yazmayı bi denermisin 
ör:
while(a=='a'){output_high(pin_c4);output_low(pin_c5);while(a=='a');output_low(pin_c4);

diğerlerinide buna uydurabilirsen olabilir sanki olmazsa yine yaz başka formüllerde bulunabilir

hollywoodlu

Alıntı yapılan: hoca - 27 Mayıs 2011, 19:43:47
tam inceleyemedim ama şöyle yazmayı bi denermisin 
ör:
while(a=='a'){output_high(pin_c4);output_low(pin_c5);while(a=='a');output_low(pin_c4);

diğerlerinide buna uydurabilirsen olabilir sanki olmazsa yine yaz başka formüllerde bulunabilir
dediğiniz biçimdede denedim fakat olmadı

hoca

pardon ya sorunu yeni anladım şöyle bi önerim var ben seninkine benzer bişey yapmıştım ama programda kesme kullanmamıştım.kullandığın komutları
kesmenin içinde kullanmayı bi dene istersen ana programdada hepsini sıfırlarsın olmazsa kesme kullanmadanda yazarsan belki olabilir.