Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

strcmp sorunu 16f877a ve 18F4520

Başlatan Abdullahtekin, 27 Ekim 2017, 21:23:38

RaMu

#15
   while(TRUE)   {      
enable_interrupts(INT_RDA);
delay_ms(100);
   }

Şeklinde dener misin.

16F877A ile 18F4520 arasında dağlar kadar fark var.

Birde CcsCde Project Wizard kısmından
sıfırdan 18F4520 için gerekli niteliklerde bir proje oluşturup
bu şekilde ilerlesen daha sağlıklı olur.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

omereliusuk

#16
877'de yazdığın her kod 4520 de çalışır. Proteusta denerken 8mhz ayarla.
+led0on-
+led0off-
virtual terminale böyle yazacaksın.
#include <18F4520.h>
#device ADC=10   
#use delay(internal=32MHz)
   #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1,errors)      
#include "string.h"   
#define bufferRead 0x0fae
char role0on[]={"led0on"};
char role0off[]={"led0off"};     
char relay[100]={};
int1 bilgiKontrol=0;       

int i=0;                
#INT_RDA              
void  RDA_isr(void) 
   {   
   relay[i]=*(bufferRead);     
   if(bilgiKontrol)
      {
             
      if((relay[i]=='-')|| (i>7))       
      
         {
            bilgiKontrol=0;                                                                                                         
            i=0;   
         }
              
      }                
                                      
if( relay[(i)] =='+')
            {
            bilgiKontrol=1;  
            i=255;
            }
            i++;  
   }            

                                                                                                                                      
   
void main()
{

   enable_interrupts(INT_RDA);     

   enable_interrupts(GLOBAL);
                                                    
   while(TRUE)
   {
      
    if(!strncmp  (role0on, relay,6 ))  printf("relayON\r");    
    if(!strncmp  (role0off, relay,7 ))  printf("relayOFF\r");  
     delay_ms(1000);                                          

   }

}     

fide

kodlarına tekrar bakınca bulabildiğim 16 ve 18 serisi ailelerde Global interrupt kullanım farkı. 18 serilerinde globali aktif etmeden prg çalışır. 16 serisinde çalışmıyor. Belki global olarak tüm interruptları tek tek test edecek başka bir int rutini aktif oluyor, int rda aktif olmuyor.


Koddaki

[/size]int role0on[]={"led0on"};[/size]int role0off[]={"led0off"};
[/size]satırlarını string olarak tanımlayıp strcpy ile bu değerleri içine at. sonra enable interrupts(global) satırını kaldır ve tekrar dene.
[/size]
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com