 | Elektrotekno.com Elektronik ve Teknoloji Merkezi
| | Yazar | Mesaj | unusual | | Tarih: 30.03.2007, 15:32 Mesaj konusu: Atmega32 için yazılmış c kodu pic c derleyicilerinin formatı | |
| Arkadaşlar merhaba elimde olan kod Atmega 32 için yazılmış c kodları ama ben pic 16f877 kullanacağım bu kodları herhangi bir pic c derleyicisinin(ccs c ,mikro c ..) anlayacağı formata nasıl getirebileceğim hakkında bilgisi olan var mı?
Kodlar:
#include <stdio.h>
#include <delay.h>
#define NUM_BITS 1080
#define RED 0b11111110
#define GREEN 0b11111101
#define RFIDIN PINA.0
#define LED PORTC
void find_start_code(void);
void reduce_sequence(void);
void manchester_decode(void);
unsigned char match_code(unsigned char *char1,unsigned char *char2);
void copy_code(unsigned char *char1,unsigned char *char2);
unsigned char verify_code(unsigned char char1[]);
void store_into_bank(char position, char code[], char offset);
char curr_sample;
char code_count;
char start_flag;
int totalBits;
char bit_array[NUM_BITS+1];
int sample_buffer;
int start_sequence;
int end_sequence;
char reduced_array[91];
char final_code[46];
char code_check[46];
char no_code[46];
eeprom char code_bank[NUM_CODES][46];
char temp[46];
eeprom char bank_status[NUM_CODES];
interrupt[EXT_INT2] void int2(void)
{
delay_us(16);
curr_sample= RFIDIN;
if((start_flag == 0) && (curr_sample == 1))
{
start_flag= 1;
sample_buffer++;
}
else if((start_flag == 1) && (sample_buffer <= 500))
sample_buffer++;
else if((start_flag == 1) && (totalBits < NUM_BITS))
{
if(curr_sample == 1)
bit_array[totalBits++]= 49;
else
bit_array[totalBits++]= 48;
}
}
void main(void)
{
char i;
while(1)
{
if((totalBits == NUM_BITS)
{
find_start_code();
reduce_sequence();
manchester_decode();
if(code_count == 0)
{
copy_code(code_check,final_code);
code_count= 1;
}
else if(code_count == 1)
{
if(match_code(code_check,final_code))
code_count= 2;
else
code_count= 0;
}
else if(code_count == 2)
{
if(match_code(code_check,final_code))
{
if(verify_code(final_code))
{
LED= GREEN;
}
else
{
LED= RED;
}
}
code_count= 0;
}
totalBits= 0;
start_flag= 0;
sample_buffer= 0;
}
}
}
void store_into_bank(char position, char code[], char offset)
{
unsigned char i;
for(i= 0; i < 45; i++) code_bank[position][i]= code[i+offset];
}
unsigned char verify_code(unsigned char char1[])
{
unsigned char i= 0;
unsigned char j= 0;
unsigned char code_match= 0;
unsigned char element_match;
while((code_match == 0) && (i < NUM_CODES))
{
if(bank_status[i]==1)
{
element_match= 1;
while((element_match == 1) && (j <45))
{
if(code_bank[i][j] != char1[j]) element_match= 0;
j++;
}
code_match= element_match;
}
i++;
}
return code_match;
}
unsigned char match_code(unsigned char char1[], unsigned char char2[])
{
char i= 0;
char correct= 1;
while((correct == 1) && (i < 45))
{
if(char1[i] != char2[i]) correct= 0;
i++;
}
return correct;
}
void copy_code(unsigned char char1[], unsigned char char2[])
{
unsigned char i;
for(i= 0; i < 45; i++) char1[i]= char2[i];
}
void find_start_code(void)
{
int i= 0;
char sequence= 0;
char count= 0;
start_sequence= 0;
end_sequence= 0;
while((i < totalBits))
{
if(bit_array[i] == 49)
{
sequence= 1;
count++;
}
else
{
if((sequence == 1) && (count >= 15))
{
start_sequence= i-count;
end_sequence= start_sequence+539;
i= totalBits+1;
}
sequence= 0;
count= 0;
}
i++;
}
if (i == totalBits) start_sequence= -1;
}
void reduce_sequence(void)
{
int i;
signed char j= -1;
unsigned char count;
unsigned char value;
i= start_sequence;
while(i <= end_sequence)
{
count= 0;
value= bit_array[i];
if(j == 89)
{
reduced_array[j]= value;
i= end_sequence+1;
}
else
{
while(value == bit_array[i])
{
count++;
i++;
}
if(j == -1) j++;
else if((count == 5) || (count ==6)) reduced_array[j++]= value;
else if((count == 10) || (count == 11) || (count == 12))
{
reduced_array[j++]= value;
reduced_array[j++]= value;
}
}
}
}
void manchester_decode(void)
{
unsigned char i;
unsigned char j= 0;
for(i= 0; i< 90; i+=2)
{
if((reduced_array[i] == 49) && (reduced_array[i+1] == 48)) final_code[j++]= 48;
else final_code[j++]= 49;
}
}
|
|
|
|
ankarali_x_man | | Tarih: 01.04.2007, 02:09 Mesaj konusu: | |
| bugün farkettim gcc derleyicisinin yeni sürümünde em4102 kartlar için yazılmış hazır kodlar var bence çok işine yarayacaktır.
iyi çalışmalar.....
|
|
fuzzy | | Tarih: 02.12.2007, 23:15 Mesaj konusu: | |
| C taşınabilir bir dil olduğundan,sadece header,include ve define lara dikkat et diğer kısımları aynen çalışır....
|
|
|
|