实际项目中遇到的问题,需要将一个反编译完成的bs2代码在avr里面实现出来,
遇到SHIFTIN 8 , 11 , 2 , [ W0/ 12] 这样的语句,发现avr的api中没有现成函数可用,经过一个晚上的试验,成功完成替代函数:
void init_adcread()
unsigned char adccs;
unsigned char adcclk;
unsigned char adcdo;
{
outUPort(adccs);
outUPort(adcclk);
inUPort(adcdo);
}
void delay1(unsigned char x)
{
unsigned char i;
for(i=0;i<x;i++);
}
void adcck(void)
{
seUPort(adcclk);
delay1(1);
clUPort(adcclk);
delay1(1);
}
unsigned short shiftin()
unsigned char adccs;
unsigned char adcclk;
unsigned char adcdo;
unsigned char len;
{
unsigned short val;
unsigned char i;
clUPort(adcclk);
val=0;
clUPort(adccs);
adcck();
while(getUPort(adcdo));
for (i=0; i<len; i++)
{
adcck();
val = (val<<1) | getUPort(adcdo);
}
seUPort(adccs);
return(val);
}