STC10F04 Bu işlemciyi tanıyan bilen varmı ?

Başlatan stm, 16 Ocak 2015, 22:37:18

stm

iyi akşamlar arkadaşlar.

STC10F04  Bu işlemciyi tanıyan bilen varmı ?

keilde yazılmış bir programı derlemek istedim fakat bu işlemciyi ne keilde nede iside bulamadım.

Klein

http://www.stcmicro.com/EN/cp.html
8051 tabanli  kontrolcü. Çin malı ürünlerin çoğunda kullanılır. Muhtemelen fiyatı çok ucuz.


stm

çok teşekkür ederim.

keil de derlemek için bu işlemciyi nasıl ekleyebilirim.

ilhan_mkp


stm

@Klein ve  @ilhan_mkp
verdiğiniz bilgiler için çok teşekkür ederim

80C51 ile programı derledin isisde çalıştırdım sorunsuz çalışıyor.



stm

Merhaba arkadaşlar

bu kodları ccs ye çevirmek istedim ama kesme kısmında takıldım yardımcı olursanız sevinirim.
burda kesme ne için kullanılmış kesmeyi ccs ye nasıl uyarlayabilirim veya kesmeyi devredışı bırakıp programı çalışır hale nasıl getirebilirim ?

Atmel (AT89C51) için keilde yazılmış orjinal kod.

#include <reg51.h>    
#define SUCCESS 1
#define FAILURE 0
#define DSA_TIMEOUT   16    
#define Timer_250us 0x19  
#define LEDPORT    P1 // TEST

/***********/
sbit DSA_DATA = P2^2;
sbit DSA_STB  = P2^1;
sbit DSA_ACK  = P2^0;

/*************/
sbit    KEY1 = P3^7;
sbit    KEY2 = P3^6;

unsigned char uc_dsa_timeout;
unsigned char uc_dsa_data;   
unsigned char dsa_tx_buff[6]  = {0x7E, 0x04, 0xA0, 0x00, 0x02, 0x7E};
unsigned char dsa_tx_buff1[6] = {0x7E, 0x04, 0xC2, 0xff, 0xff, 0x7E};




//============================================================================

//============================================================================
void Delay_10ms(unsigned int z)
{
   unsigned int i,j;
   for(i=z;i>0;i--)
   {
      for(j=8450;j>0;j--);
   }
}

//============================================================================

//============================================================================
void Init_Timer()
{
   TMOD = 0x02;      
   TL0 = Timer_250us;
   TH0 = Timer_250us;
   
   ET0 = 1;
   EA = 1;
}

//============================================================================

//============================================================================
void Timer0_ISR() interrupt 1   using 1 
{
   TR0 = 0;
   
   if(uc_dsa_timeout > 0)
   {
      TR0 = 1;
      uc_dsa_timeout--;
   }
}

//============================================================================

//============================================================================
unsigned char Dsa_Bus_Syn_Start()
{
   DSA_DATA = 0;  
   DSA_STB    = 1;
   uc_dsa_timeout = DSA_TIMEOUT;            

   TR0 = 1;

   while((DSA_ACK == 1) && (uc_dsa_timeout > 0));   

   if(uc_dsa_timeout == 0)
   {
   return(FAILURE);
   }
   DSA_DATA = 1;    

   while((!DSA_ACK)&& (uc_dsa_timeout > 0));  
   if(uc_dsa_timeout == 0) 
      return(FAILURE);
   return(SUCCESS);
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Ack_Write(void)
{
   DSA_ACK = 0;   //ACKÀ­µÍ
   uc_dsa_timeout = DSA_TIMEOUT;   

   while((DSA_STB) && (uc_dsa_timeout > 0));   
   if(uc_dsa_timeout == 0) 
      return(FAILURE);
   
   DSA_ACK = 1;                       
   while((!DSA_STB) && (uc_dsa_timeout > 0));   
   if(uc_dsa_timeout == 0) 
      return(FAILURE);   

   return(SUCCESS);
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Ack_Read(void)
{
   DSA_ACK = 1;   
   uc_dsa_timeout = DSA_TIMEOUT;   
   
   TR0 = 1;

   while((DSA_STB) && (uc_dsa_timeout > 0));   
   if(uc_dsa_timeout == 0)
      return(FAILURE);

   DSA_ACK = 0;   //ACKÀ­µÍ

   while((!DSA_STB) && (uc_dsa_timeout > 0));  
   if(uc_dsa_timeout == 0)
      return(FAILURE);
   DSA_ACK = 1;   //ACKÀ­¸ß
   return(SUCCESS);
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Byte_Write(unsigned char temp_data)
{
   unsigned char x;
   
   uc_dsa_timeout = DSA_TIMEOUT;   

   TR0 = 1;

   for(x = 0; x < 8; x++)
   {

      if(temp_data & 0x80)
         DSA_DATA = 1;
      else
         DSA_DATA = 0;

       temp_data <<= 0x01;
      DSA_STB = 0;   

      while((DSA_ACK) && (uc_dsa_timeout > 0));   
       if(uc_dsa_timeout == 0) 
         return(FAILURE);

      DSA_STB = 1;   

      while((!DSA_ACK) && (uc_dsa_timeout > 0));   
      if(uc_dsa_timeout == 0) 
         return(FAILURE);
   }
   DSA_DATA = 1;
   return(SUCCESS);
}


//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Byte_Read(void)
{
   unsigned char x;

   uc_dsa_data = 0;
   uc_dsa_timeout = DSA_TIMEOUT;   

   TR0 = 1;

   for(x = 0; x < 8; x++)
   {
      while((DSA_ACK) && (uc_dsa_timeout > 0));
      if(uc_dsa_timeout == 0) 
         return(FAILURE);

      uc_dsa_data <<= 1;

      if(DSA_DATA)
         uc_dsa_data |= 0x01;

      DSA_STB = 0;  

      while((!DSA_ACK) && (uc_dsa_timeout > 0));
      if(uc_dsa_timeout == 0) 
         return(FAILURE);

      DSA_STB = 1;   //STBÀ­¸ß
   }
   return(SUCCESS);   
}


//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Communicate(unsigned char *dsa_data_buff)
{
   unsigned char dsa_point, dsa_length;

   if(Dsa_Bus_Syn_Start() != SUCCESS) goto dsa_bus_reset;
   if(Dsa_Bus_Byte_Write(dsa_data_buff[0]) != SUCCESS) goto dsa_bus_reset;
   if(Dsa_Bus_Byte_Write(dsa_data_buff[1]) != SUCCESS) goto dsa_bus_reset;
   if(Dsa_Bus_Byte_Write(dsa_data_buff[2]) != SUCCESS) goto dsa_bus_reset;

   dsa_point = 0x03;
   dsa_length = dsa_data_buff[1] - 1;

   if((dsa_data_buff[2] & 0x0F0) != 0x0C0)     
   {
      while(dsa_length--)
      {
         if(Dsa_Bus_Byte_Write(dsa_data_buff[dsa_point++]) != SUCCESS)
            goto dsa_bus_reset;
      }
      if(Dsa_Bus_Ack_Write() != SUCCESS)      
         goto dsa_bus_reset;
   }
   else  
   {
      while(dsa_length--)
      {
         if(Dsa_Bus_Byte_Read()!= SUCCESS) 
            goto dsa_bus_reset;
         dsa_data_buff[dsa_point++] = uc_dsa_data;
      }
      if(uc_dsa_data != 0x7E) 
         goto dsa_bus_reset;
      if(Dsa_Bus_Ack_Read() != SUCCESS)       
         goto dsa_bus_reset;
   }
   DSA_DATA = 1;
   DSA_ACK = 1;
   DSA_STB = 1;
   return(SUCCESS);

dsa_bus_reset:    
   {
      DSA_DATA = 1;
      DSA_ACK = 1;
      DSA_STB = 1;
   
      return(FAILURE);   
   }
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Data_Transmit(unsigned char *dsa_tx_buff)
{
   unsigned char cnt;
   
   for(cnt = 0;cnt < 3;cnt++)
   {
      if(Dsa_Bus_Communicate(dsa_tx_buff) == SUCCESS)
      {
      return(SUCCESS);
      }
   }

   return(FAILURE);             
}







void main()
{
  Init_Timer();

   DSA_DATA = 1;
   DSA_ACK = 1;
   DSA_STB = 1;

   while(1)
   {
		 

		 
      if(KEY1 == 0)
      {
				Dsa_Bus_Data_Transmit(dsa_tx_buff);
      }

      if(KEY2 == 0)
       {
         Dsa_Bus_Data_Transmit(dsa_tx_buff1);
      }
      //Delay_10ms(20);
			Delay_10ms(10);
   }
}


Buda ccs ye çevirmeye çalıştığım ama kesme kısmında takıldığım kod.

#include <18F4520.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(crystal=20000000)
#use FIXED_IO( C_outputs=PIN_C2,PIN_C1,PIN_C0 )

#define DSA_DATA  PIN_C0
#define DSA_STB   PIN_C1
#define DSA_ACK   PIN_C2

#define KEY1      PIN_D0
#define KEY2      PIN_D1


#define SUCCESS 1
#define FAILURE 0
#define DSA_TIMEOUT   16    
#define Timer_250us 0x19  
#define LEDPORT    P1 // TEST



unsigned char uc_dsa_timeout;
unsigned char uc_dsa_data;   
unsigned char dsa_tx_buff[6]  = {0x7E, 0x04, 0xA0, 0x00, 0x02, 0x7E};
unsigned char dsa_tx_buff1[6] = {0x7E, 0x04, 0xC2, 0xff, 0xff, 0x7E};




//============================================================================

//============================================================================
void Delay_10ms(unsigned int z)
{
   unsigned int i,j;
   for(i=z;i>0;i--)
   {
      for(j=8450;j>0;j--);
   }
}

//============================================================================
/*
//============================================================================
void Init_Timer()
{
   TMOD = 0x02;      
   TL0 = Timer_250us;
   TH0 = Timer_250us;
   
   ET0 = 1;
   EA = 1;
}

//============================================================================

//============================================================================
void Timer0_ISR() interrupt 1   using 1 
{
   TR0 = 0;
   
   if(uc_dsa_timeout > 0)
   {
      TR0 = 1;
      uc_dsa_timeout--;
   }
}

//============================================================================
*/
//============================================================================



unsigned char Dsa_Bus_Syn_Start()
{
   //DSA_DATA = 0;  
   output_low(DSA_DATA);
   
   //DSA_STB    = 1
   output_high(DSA_STB);;
   uc_dsa_timeout = DSA_TIMEOUT;            

  //ÇEVİRRR   TR0 = 1;

   while((DSA_ACK == 1) && (uc_dsa_timeout > 0));   

   if(uc_dsa_timeout == 0)
   {
   return(FAILURE);
   }
   //DSA_DATA = 1; 
   output_high(DSA_DATA);

   while((!DSA_ACK)&& (uc_dsa_timeout > 0));  
   if(uc_dsa_timeout == 0) 
      return(FAILURE);
   return(SUCCESS);
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Ack_Write(void)
{
   //DSA_ACK = 0;   //ACKÀ­µÍ
   output_low(DSA_ACK);
   
   uc_dsa_timeout = DSA_TIMEOUT;   

   while((DSA_STB) && (uc_dsa_timeout > 0));   
   if(uc_dsa_timeout == 0) 
      return(FAILURE);
   
   //DSA_ACK = 1;   
   output_high(DSA_ACK);
   while((!DSA_STB) && (uc_dsa_timeout > 0));   
   if(uc_dsa_timeout == 0) 
      return(FAILURE);   

   return(SUCCESS);
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Ack_Read(void)
{
   //DSA_ACK = 1; 
   output_high(DSA_ACK);
   uc_dsa_timeout = DSA_TIMEOUT;   
   
  //ÇEVİRRR    TR0 = 1;

   while((DSA_STB) && (uc_dsa_timeout > 0));   
   if(uc_dsa_timeout == 0)
      return(FAILURE);

  // DSA_ACK = 0;   //ACKÀ­µÍ
   output_low(DSA_ACK);

   while((!DSA_STB) && (uc_dsa_timeout > 0));  
   if(uc_dsa_timeout == 0)
      return(FAILURE);
   //DSA_ACK = 1;   //ACKÀ­¸ß
   output_high(DSA_ACK);
   return(SUCCESS);
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Byte_Write(unsigned char temp_data)
{
   unsigned char x;
   
   uc_dsa_timeout = DSA_TIMEOUT;   

  //ÇEVİRRR    TR0 = 1;

   for(x = 0; x < 8; x++)
   {

      if(temp_data & 0x80)
         //DSA_DATA = 1;
         output_high(DSA_DATA);
      else
        // DSA_DATA = 0;
         output_low(DSA_DATA);

       temp_data <<= 0x01;
     // DSA_STB = 0; 
      output_low(DSA_STB);

      while((DSA_ACK) && (uc_dsa_timeout > 0));   
       if(uc_dsa_timeout == 0) 
         return(FAILURE);

      //DSA_STB = 1;  
      output_high(DSA_STB);

      while((!DSA_ACK) && (uc_dsa_timeout > 0));   
      if(uc_dsa_timeout == 0) 
         return(FAILURE);
   }
   //DSA_DATA = 1;
   output_high(DSA_DATA);
   return(SUCCESS);
}


//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Byte_Read(void)
{
   unsigned char x;

   uc_dsa_data = 0;
   uc_dsa_timeout = DSA_TIMEOUT;   

  //ÇEVİRRR    TR0 = 1;

   for(x = 0; x < 8; x++)
   {
      while((DSA_ACK) && (uc_dsa_timeout > 0));
      if(uc_dsa_timeout == 0) 
         return(FAILURE);

      uc_dsa_data <<= 1;

      if(DSA_DATA)
         uc_dsa_data |= 0x01;

     // DSA_STB = 0;  
      output_low(DSA_STB);

      while((!DSA_ACK) && (uc_dsa_timeout > 0));
      if(uc_dsa_timeout == 0) 
         return(FAILURE);

      //DSA_STB = 1;   //STBÀ­¸ß
      output_high(DSA_STB);
   }
   return(SUCCESS);   
}


//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Communicate(unsigned char *dsa_data_buff)
{
   unsigned char dsa_point, dsa_length;

   if(Dsa_Bus_Syn_Start() != SUCCESS) goto dsa_bus_reset;
   if(Dsa_Bus_Byte_Write(dsa_data_buff[0]) != SUCCESS) goto dsa_bus_reset;
   if(Dsa_Bus_Byte_Write(dsa_data_buff[1]) != SUCCESS) goto dsa_bus_reset;
   if(Dsa_Bus_Byte_Write(dsa_data_buff[2]) != SUCCESS) goto dsa_bus_reset;

   dsa_point = 0x03;
   dsa_length = dsa_data_buff[1] - 1;

   if((dsa_data_buff[2] & 0x0F0) != 0x0C0)     
   {
      while(dsa_length--)
      {
         if(Dsa_Bus_Byte_Write(dsa_data_buff[dsa_point++]) != SUCCESS)
            goto dsa_bus_reset;
      }
      if(Dsa_Bus_Ack_Write() != SUCCESS)      
         goto dsa_bus_reset;
   }
   else  
   {
      while(dsa_length--)
      {
         if(Dsa_Bus_Byte_Read()!= SUCCESS) 
            goto dsa_bus_reset;
         dsa_data_buff[dsa_point++] = uc_dsa_data;
      }
      if(uc_dsa_data != 0x7E) 
         goto dsa_bus_reset;
      if(Dsa_Bus_Ack_Read() != SUCCESS)       
         goto dsa_bus_reset;
   }
   //DSA_DATA = 1;
   output_high(DSA_DATA);
   //DSA_ACK = 1;
   output_high(DSA_ACK);
   //DSA_STB = 1;
   output_high(DSA_STB);
   return(SUCCESS);

dsa_bus_reset:    
   {
      //DSA_DATA = 1;
      output_high(DSA_DATA);
      //DSA_ACK = 1;
      output_high(DSA_ACK);
     // DSA_STB = 1;
      output_high(DSA_STB);
   
      return(FAILURE);   
   }
}

//============================================================================================

//============================================================================================
unsigned char Dsa_Bus_Data_Transmit(unsigned char *dsa_tx_buff)
{
   unsigned char cnt;
   
   for(cnt = 0;cnt < 3;cnt++)
   {
      if(Dsa_Bus_Communicate(dsa_tx_buff) == SUCCESS)
      {
      return(SUCCESS);
      }
   }

   return(FAILURE);             
}







void main()
{



  //ÇEVİRRR   Init_Timer();

  // DSA_DATA = 1;
   output_high(DSA_DATA);
   //DSA_ACK = 1;
   output_high(DSA_ACK);
   //DSA_STB = 1;
   output_high(DSA_STB);

   while(1)
   {

 
 
       
      if(input(KEY1)==0)
      //if(input(ileri)==1)
     
      {
      

      
      
            Dsa_Bus_Data_Transmit(dsa_tx_buff);
            
            
      }

      if(input(KEY2)==0)
       {
       
       

       
       
         Dsa_Bus_Data_Transmit(dsa_tx_buff1);
         
      }
      //Delay_10ms(20);
         Delay_10ms(10);
   }
}

stm


stm

Arkadaşlar bu konuya bi el atın
bo kodları ccs ye uyarlamam lazım.

stm


baran123

Hangi kodu çeviremediğiniz belirtirseniz çalıştığımız kısımdan yardımcı oluruz. :)

stm

üstte atmel için yazılmış kodu ccs ye çevirmeye çalışıyorum.
büyük kısmını çevirdim ama  kesme ve timmer kısımlarını çeviremedim. çeviremediğim kısımlar aşağıya ekliyorum.

//============================================================================

//============================================================================
void Init_Timer()
{
   TMOD = 0x02;      
   TL0 = Timer_250us;
   TH0 = Timer_250us;
   
   ET0 = 1;
   EA = 1;
}

//============================================================================

//============================================================================
void Timer0_ISR() interrupt 1   using 1 
{
   TR0 = 0;
   
   if(uc_dsa_timeout > 0)
   {
      TR0 = 1;
      uc_dsa_timeout--;
   }
}

//============================================================================

//============================================================================