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.
http://www.stcmicro.com/EN/cp.html (http://www.stcmicro.com/EN/cp.html)
8051 tabanli kontrolcü. Çin malı ürünlerin çoğunda kullanılır. Muhtemelen fiyatı çok ucuz.
http://www.dz863.com/datasheet-8392178263-STC10F04_Single-chip-Microcontroller-Based-On-A-High-Performance-1t-Architecture-Cpu/ (http://www.dz863.com/datasheet-8392178263-STC10F04_Single-chip-Microcontroller-Based-On-A-High-Performance-1t-Architecture-Cpu/)
bende google amcaya sorduğumda görselde gözüme çarpan link bu.
çok teşekkür ederim.
keil de derlemek için bu işlemciyi nasıl ekleyebilirim.
http://mcudreams.blogspot.com.tr/2012/12/programming-stc-89c52-microcontroller.html (http://mcudreams.blogspot.com.tr/2012/12/programming-stc-89c52-microcontroller.html)
linkte çinliler anlatmış.
@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.
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);
}
}
konu hala güncel
Arkadaşlar bu konuya bi el atın
bo kodları ccs ye uyarlamam lazım.
çalışmadığınız yerdenmi sordum :)
Hangi kodu çeviremediğiniz belirtirseniz çalıştığımız kısımdan yardımcı oluruz. :)
ü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--;
}
}
//============================================================================
//============================================================================