hi-tech ve 74hc164 sorunu

Başlatan PARSIC, 14 Ocak 2011, 16:56:57

PARSIC

selamlar hi-tech ile 74164 entegresini bir türlü istediğim şekilde çalıştıramadım yardımcı olabilir misiniz...kullandığım kod aşağıda;

#include <pic.h>
__CONFIG(0x3ff9);
unsigned char
sayi(unsigned char byte)
{
                char i;
   for(i=0; i<8; i++)
   {
                RB0=0;         
                if ((byte<<i)&0x80) {
                    RB1=1;
                    RB0=1;
                }
                else {
                    RB1=0;
                    RB0=1;
                }
   }
}
void main(){
TRISB=0x00;
PORTB=0x00;
while(1){
sayi(0x03);
}
}
********************************************************************HI-TECH*******************************************************************

tyilgin

#include <pic.h>
__CONFIG(0x3ff9);
unsigned char
sayi(unsigned char byte)
{
   char i;
   i=0x80;
   while (i) {
      if( i&byte ) datapin=1; else datapin=0;
      clockpin=1;
      clockpin=0;
      i=i>>1;
   }
}
void main(){
TRISB=0x00;
PORTB=0x00;
while(1){
   sayi(0x03);

}

mantığı bu şekilde olmalı, denenmemiştir...

PARSIC

öncelikle teşekkür ederim...gönderdiğiniz kodu denedim fakat yine sonuç alamadım acaba proteus da mı problem var diyecem ama ccs c ile istediğim şekilde çalıştırabilmiştim...segment bağlantılarını da farklı farklı denedim fakat tuhaf tuhaf şekiller çıkıyor yanıp sönüyor anlamadım doğrusu :(
********************************************************************HI-TECH*******************************************************************

PARSIC

ne yaptıysam olmuyor sadece 0xff ve 0x00 verilerinde sonuç alabiliyorum diğer türlü bir sonuç alamıyorum nerde hata yapıyorum anlamadım :(
********************************************************************HI-TECH*******************************************************************

tyilgin

simulasyonu ve kodunuzu gönderirseniz nerede hata yaprığınızı daha iyi anlarız..

PARSIC

sizin göndermiş olduğunuz kodu denedim... bir türlü resim ekleyemedim fakat devre şu şekilde clock girişi rb0,data girişi rb1,data çıkışları ise;

q1-------g
q2--------f
q3-------e
q4-------d
q5-------c
q6-------b
q7-------a        şeklinde de bağlantı yaptım farklı şekillerde de....fakat yine sonuç yok anlamsız şekiller çıkıyor..
********************************************************************HI-TECH*******************************************************************

tyilgin

gönderdiğim örnekte bir mantık hatası yapmışım.

main altındaki while döngüsü içinde sürekli sayi prosedürünü çağırırsanız hc164 pinlerinden hiç durmadan veri geçmiş olur.

birde bu şekilde deneyin

main() {
sayi(0x03);

while(1);

}

PARSIC

tamamdır hocam şu an süper çalışıyor sizin mantığınızla ve ufak bi kaç değişiklikle halledildi çok sağolun...çalışan kod;

#include <pic.h>
__CONFIG(0x3ff9);
unsigned char
sayi(unsigned char byte)
{
   char i,sayac;
   i=0x80;
   for(sayac=0;sayac<9;sayac++) {
      if( i&byte ) RB1=1; else RB1=0;
      RB0=1;
      RB0=0;
      i=i>>1;
   }
}
void main(){
TRISB=0x00;
PORTB=0x00;
sayi(0x03);
while(1);
}
********************************************************************HI-TECH*******************************************************************

tyilgin