?? wg.c
字號:
#include <iom8v.h>
#include <eeprom.h>
#include <e:\avr\avr_soft\main.h>
#include <e:\avr\avr_soft\wg.h>
unsigned char start_flag=0;
unsigned char stop_flag=0;
unsigned int time_counter=0;
unsigned char start_bit=0;
unsigned char stop_bit=0;
unsigned char counter_byte=0;
//unsigned int temp1,temp2;
void write_data(unsigned char data)
{
unsigned char i,j;
for(i=0;i<8;i++)
{
timer0_init();
// if(data&0x01)
if(data&0x80)
{
CLEAR_WD1();
}
else
{
CLEAR_WD0();
}
WAIT_BITS();
SET_WD0();
SET_WD1();
timer0_init();
for(j=0;j<50;j++)
WAIT_BITS();
// data>>=1;
data<<=1;
}
}
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0xD8; //set count
TCCR0 = 0x02; //start timer
}
void WAIT_BITS(void)
{
while (TCNT0!=0);
TCNT0 = 0xD8;// reload counter.
}
unsigned char cac_byte(unsigned char data)
{
unsigned char temp,i,counter=0;
temp=data;
for(i=0;i<8;i++)
{
if(temp&0x01)counter++;
temp>>=1;
}
return counter;
}
void cac_4byte(unsigned char *array)
{
unsigned char temp1,temp2;
temp1=cac_byte(array[2])+cac_byte(array[3]);
temp2=cac_byte(array[0])+cac_byte(array[1]);
if(temp1%2)
start_bit=1;
else
start_bit=0;
if(temp2%2)
stop_bit=0;
else
stop_bit=1;
}
void senddata(unsigned char *data)
{
unsigned char i;
CLEAR_HOLD();
timer0_init();
if(start_bit)
{
CLEAR_WD1();
WAIT_BITS();
SET_WD1();
for(i=0;i<50;i++)
WAIT_BITS();
}
else
{
CLEAR_WD0();
WAIT_BITS();
SET_WD0();
for(i=0;i<50;i++)
WAIT_BITS();
}
write_data(data[3]);
write_data(data[2]);
write_data(data[1]);
write_data(data[0]);
timer0_init();
if(stop_bit)
{
CLEAR_WD1();
WAIT_BITS();
SET_WD1();
for(i=0;i<50;i++)
WAIT_BITS();
}
else
{
CLEAR_WD0();
WAIT_BITS();
SET_WD0();
for(i=0;i<50;i++)
WAIT_BITS();
}
SET_HOLD();
}
void write_26data(unsigned int data)
{
unsigned char i,j;
for(i=0;i<12;i++)
{
timer0_init();
if(data&0x800)
{
CLEAR_WD1();
}
else
{
CLEAR_WD0();
}
WAIT_BITS();
SET_WD0();
SET_WD1();
timer0_init();
for(j=0;j<50;j++)
WAIT_BITS();
data<<=1;
}
}
unsigned char cac_26byte(unsigned int data)
{
unsigned char i,counter=0;
unsigned int temp;
temp=data;
for(i=0;i<12;i++)
{
if(temp&0x01)counter++;
temp>>=1;
}
return counter;
}
void process_array(unsigned char *data)
{
unsigned int temp1,temp2;
unsigned int i;
unsigned char hi,lo;
unsigned char ll[3];
ll[0]=data[2];
ll[1]=data[1];
ll[2]=data[0];
// lo=ll[1]<<4;
// lo=lo>>4; //移出中間一個字節的低位
lo=ll[1]%16;
hi=ll[1]>>4; //移出中間一個字節的高位
temp1=ll[0]*16+hi;
temp2=lo*256+ll[2];
CLEAR_HOLD();
timer0_init();
if(cac_26byte(temp1)%2)
{
CLEAR_WD1();
WAIT_BITS();
SET_WD1();
}
else
{
CLEAR_WD0();
WAIT_BITS();
SET_WD0();
}
for(i=0;i<50;i++) WAIT_BITS();
write_26data(temp1);
write_26data(temp2);
timer0_init();
if(cac_26byte(temp2)%2)
{
CLEAR_WD0();
WAIT_BITS();
SET_WD0();
}
else
{
CLEAR_WD1();
WAIT_BITS();
SET_WD1();
}
for(i=0;i<50;i++) WAIT_BITS();
SET_HOLD();
for(i=0;i<5000;i++) WAIT_BITS();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -