(p16f877a) seri iletişimde sıkıntı var tüm programın çalışması duruyor

Başlatan cbirlik7, 22 Mart 2013, 09:41:36

cbirlik7

Pc-pic haberleşmesi ile ilgili projem var ve teslim zamanına pek bişey kalmadı. Programlarken A portunu giriş yapıyorum derleyip deiyorum ama sadece ra4 istediğim gibi çalışıyor. Geriye kalan pinler işlem yapmıyor. Aynı şekilde E portuda hiç çalışmıyor. . Aynı kodlar c portunada yaptım c portunda problem yok. Bi türlü çözemedim yardımınızı bekliyorum.

Programın amacı-portA, PortC, PortE ye gelen değişiklikleri pc ye bildiricek. Daha sonra pcde hazırlanan programda pic e veri gönderip portB ve portD deki istenilen ledleri yakıcak. Ama girişdeki sıkıntıyı çözemediğim için sonraki led yakma kısmına geçemedim.

http://sdrv.ms/Z5SkeE proje dosyaları burda.

Maxim

programın başına, tris tanımlamalarından sonra
CMCON=7
ADCON1=7

yaz çalışması lazım

haydarpasamikro

A portu aynı zamanda default Analog giriştir. Dijital giriş-çıkış olarak kullanmak için arkadaşın yazdığı gibi ADCON1 ve CMCON 7 yapılmalı.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

cbirlik7

Çok teşekkür ederim dediğiniz gibi çalışıyor :D. RA0 a Lm35 bağlıycaktım RA0 nın adc si iptam oluyor mu bu şekilde? ::)

Maxim

evet iptal oluyor
girişleri analog yapmak için ADCON1 registerını düzenlemek lazım

haydarpasamikro

TRISA.0 = 1         'RA0/AN0 giriş LM35bagli     
ADCON1 = %00001110  'Sadece RA0/AN0 analog diger pinler dijital
veya
ADCON1 = %10001110  'Sadece RA0/AN0 analog diger pinler dijital


düşük 4-bit konfigürasyon(1110=sadece RA0 analog)
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

cbirlik7


cbirlik7

Aşşağıdaki kodları yazıyorum ama pc den veri alma işlerini yapmadığı gibi diğer işlemlerde çalışmıyor. Fazla bi bilgim yok ne kadar uğraşşamda çözemedim.

A0 dan sıcaklık ölme
Geriye kalan Port a pinleride giriş
PortE giriş
PortB ve PortD çıkış
aynı zamanda pc ye veri gönderip alıcak ama veri alma olayına girince tüm program çalışmıyor.

INCLUDE "modedefs.bas" 

DEFINE ADC_BITS 10 
DEFINE ADC_CLOCK 3 
DEFINE ADC_SAMPLEUS 50 


Tsample VAR Word    
Mode VAR Byte        
Dummy VAR Byte 
D VAR Byte            
Res Var Word          
Temp1 Var Word 
Temp2 Var Word 
dur var word       

LM35  Var Word
Temp Var Byte


A0 VAR BYTE
A1 VAR BYTE
A2 VAR BYTE
A3 VAR BYTE
A4 VAR BYTE
A5 VAR BYTE

C0 VAR BYTE
C1 VAR BYTE
C2 VAR BYTE
C3 VAR BYTE
C4 VAR BYTE
C5 VAR BYTE

E0 VAR BYTE
E1 VAR BYTE
E2 VAR BYTE

SI VAR PORTC.7 
SO VAR PORTC.6
SOR VAR BYTE

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
            
PAUSE 10 
 

;inicio conversion 

ADCON1 = %10001110      
ADCON0 = %01000001          
                          
dongu:
if temp2 = temp1 then
else
temp2=temp1
SEROUT so,2400,[#Temp1,D,10,13]
endif

D ="C" 
ADCIN 0,Res 

Temp1 = 49*Res                      
Temp1 = Temp1/100 

'_Giriş Kontroller______________________________

'PORTA GİRİŞ KONTROL
'___________________________________________
'IF PORTA.0=1 THEN
    'IF A0=1 THEN
    'SEROUT SO,T2400,["RA01",10,13]
    'A0=0
    'ENDIF
'ENDIF

IF PORTA.1=0 THEN
    IF A1=0 THEN
    SEROUT SO,T2400,["RA10",10,13]
    A1=1
    ENDIF
elseIF PORTA.1=1 THEN
    IF A1=1 THEN
    SEROUT SO,T2400,["RA11",10,13]
    A1=0
    ENDIF
ENDIF

IF PORTA.2=0 THEN
    IF A2=0 THEN
    SEROUT SO,T2400,["RA20",10,13]
    A2=1
    ENDIF
elseIF PORTA.2=1 THEN
    IF A2=1 THEN
    SEROUT SO,T2400,["RA21",10,13]
    A2=0
    ENDIF
ENDIF

IF PORTA.3=0 THEN
    IF A3=0 THEN
    SEROUT SO,T2400,["RA30",10,13]
    A3=1
    ENDIF
elseIF PORTA.3=1 THEN
    IF A3=1 THEN
    SEROUT SO,T2400,["RA31",10,13]
    A3=0
    ENDIF
ENDIF

IF PORTA.4=0 THEN
    IF A4=0 THEN
    SEROUT SO,T2400,["RA40",10,13]
    A4=1
    ENDIF
elseIF PORTA.4=1 THEN
    IF A4=1 THEN
    SEROUT SO,T2400,["RA41",10,13]
    A4=0
    ENDIF
ENDIF

IF PORTA.5=0 THEN
    IF A5=0 THEN
    SEROUT SO,T2400,["RA50",10,13]
    A5=1
    ENDIF
elseIF PORTA.5=1 THEN
    IF A5=1 THEN
    SEROUT SO,T2400,["RA51",10,13]
    A5=0
    ENDIF
ENDIF
'__________________________________________________
 'PORTC GİRİŞ KONTROL
'_________________________________________________
IF PORTC.0=0 THEN
    IF C0=0 THEN
    SEROUT SO,T2400,["RC00",10,13]
    C0=1
    ENDIF
elseIF PORTC.0=1 THEN
    IF C0=1 THEN
    SEROUT SO,T2400,["RC01",10,13]
    C0=0
    ENDIF
ENDIF

IF PORTC.1=0 THEN
    IF C1=0 THEN
    SEROUT SO,T2400,["RC10",10,13]
    C1=1
    ENDIF
elseIF PORTC.1=1 THEN
    IF C1=1 THEN
    SEROUT SO,T2400,["RC11",10,13]
    C1=0
    ENDIF
ENDIF

IF PORTC.2=0 THEN
    IF C2=0 THEN
    SEROUT SO,T2400,["RC20",10,13]
    C2=1
    ENDIF
elseIF PORTC.2=1 THEN
    IF C2=1 THEN
    SEROUT SO,T2400,["RC21",10,13]
    C2=0
    ENDIF
ENDIF

IF PORTC.3=0 THEN
    IF C3=0 THEN
    SEROUT SO,T2400,["RC30",10,13]
    C3=1
    ENDIF
elseIF PORTC.3=1 THEN
    IF C3=1 THEN
    SEROUT SO,T2400,["RC31",10,13]
    C3=0
    ENDIF
ENDIF

IF PORTC.4=0 THEN
    IF C4=0 THEN
    SEROUT SO,T2400,["RC40",10,13]
    C4=1
    ENDIF
elseIF PORTC.4=1 THEN
    IF C4=1 THEN
    SEROUT SO,T2400,["RC41",10,13]
    C4=0
    ENDIF
ENDIF

IF PORTC.5=0 THEN
    IF C5=0 THEN
    SEROUT SO,T2400,["RC50",10,13]
    C5=1
    ENDIF
elseIF PORTC.5=1 THEN
    IF C5=1 THEN
    SEROUT SO,T2400,["RC51",10,13]
    C5=0
    ENDIF
ENDIF
'______________________________________________________
'PORTE GİRİŞ KONTROL
'______________________________________________________
IF PORTE.0=0 THEN
    IF E0=0 THEN
    SEROUT SO,T2400,["RE00",10,13]
    E0=1
    ENDIF
elseIF PORTE.0=1 THEN
    IF E0=1 THEN
    SEROUT SO,T2400,["RE01",10,13]
    E0=0
    ENDIF
ENDIF

IF PORTE.1=0 THEN
    IF E1=0 THEN
    SEROUT SO,T2400,["RE10",10,13]
    E1=1
    ENDIF
elseIF PORTE.1=1 THEN
    IF E1=1 THEN
    SEROUT SO,T2400,["RE11",10,13]
    E1=0
    ENDIF
ENDIF

IF PORTE.2=0 THEN
    IF E2=0 THEN
    SEROUT SO,T2400,["RE20",10,13]
    E2=1
    ENDIF
elseIF PORTE.2=1 THEN
    IF E2=1 THEN
    SEROUT SO,T2400,["RE21",10,13]
    E2=0
    ENDIF
ENDIF
'______________________________________________________
'___________________________________________________________
'PC Veri Alma Ve Çıkışlar______________________________
'_______________________________________________________________
Serin SI,T2400,SOR
IF SOR>0 THEN
'PORTA İŞLEM
IF (SOR="A") THEN
PORTB.0=0
ELSEIF (SOR="B") THEN
PORTB.0=1
ELSEIF (SOR="C") THEN
PORTB.1=0
ELSEIF (SOR="D") THEN
PORTB.1=1
ELSEIF (SOR="E") THEN
PORTB.2=0
ELSEIF (SOR="F") THEN
PORTB.2=1
ELSEIF (SOR="G") THEN
PORTB.3=0
ELSEIF (SOR="I") THEN
PORTB.3=1
ELSEIF (SOR="J") THEN
PORTB.4=0
ELSEIF (SOR="K") THEN
PORTB.4=1
ELSEIF (SOR="L") THEN
PORTB.5=0
ELSEIF (SOR="M") THEN
PORTB.5=1
ELSEIF (SOR="N") THEN
PORTB.6=0
ELSEIF (SOR="O") THEN
PORTB.6=1
ELSEIF (SOR="P") THEN
PORTB.7=0
ELSEIF (SOR="Q") THEN
PORTB.7=1
'PORTA İŞLEM SONU
'____________________________
'PORTD İŞLEM
ELSEIF (SOR="R") THEN
PORTD.0=0
ELSEIF (SOR="S") THEN
PORTD.0=1
ELSEIF (SOR="T") THEN
PORTD.1=0
ELSEIF (SOR="U") THEN
PORTD.1=1
ELSEIF (SOR="V") THEN
PORTD.2=0
ELSEIF (SOR="W") THEN
PORTD.2=1
ELSEIF (SOR="Y") THEN
PORTD.3=0
ELSEIF (SOR="Z") THEN
PORTD.3=1
ELSEIF (SOR="1") THEN
PORTD.4=0
ELSEIF (SOR="2") THEN
PORTD.4=1
ELSEIF (SOR="3") THEN
PORTD.5=0
ELSEIF (SOR="4") THEN
PORTD.5=1
ELSEIF (SOR="5") THEN
PORTD.6=0
ELSEIF (SOR="6") THEN
PORTD.6=1
ELSEIF (SOR="7") THEN
PORTD.7=0
ELSEIF (SOR="8") THEN
PORTD.7=1 
ENDIF
ENDIF

GOTO DONGU
END