【原创】USB 更新版Receiver and Remote----2008.08

    前端时间开发了两个软件,并开发其独立硬件,一个是USB,一个是COM的,考虑到COM的实用性不高,使用不方便。后来思考着换了另一种方案。

即在原来的两款设备基础上(请看前面博文,均已发在博客)更改为USB设备,并共用一个USB设备。




整个硬件系统就是一个M8实现,用AVRUSB 可以实现遥控器及示波器。

部分源代码:

the main function:
int main(void)
{
uchar i, j;
port_init();
wdt_enable(WDTO_1S);
USB_DDR_PORTOUT1;
USB_DDR_PORTOUT0;
j = 0;
while(--j){ 
i = 0;
while(--i); 
}
USB_DDR_PORTIN0;
USB_DDR_PORTIN1;

usbInit();
sei();
for(;;){ 
usbPoll();
wdt_reset();
if(endflag==1)
{
if(buffer[0]==0x66)
{
switch(buffer[1])
{
case 0x00:
nec_trans();
break;
case 0x01:
toshiba_trans();
break;
case 0x02:
m50560_trans();
break;
case 0x03:
rc5_trans();
break;
case 0x04:
sharp15_trans();
break;
case 0x05:
start_receiver();
break;
default:endflag=0;
for(i=0;i<15;i++)
buffer[i]=0;
break;
}
}
else
{
endflag=0;
for(i=0;i<15;i++)
buffer[i]=0;
}
}
}
return 0;
}
KIE-Receiver Function:
void start_receiver()
{
uchar i;
timer1_init();
last=0;
LEAR_LED_H();
start=1;
prt=0;
last=1<<(PD3);
while(buffer[2]==1)
{
usbPoll();
wdt_reset();
if(start==1)
{
uchar t=Get_Bit(PIND,3);
if(t!=last)
{
irbuf[prt]=TCNT1L;
prt++;
irbuf[prt]=TCNT1H;
timer1_init();
TCCR1B = 0x03;
last=t;
prt++;
}
if(prt==IRBUFSIZE||(TCNT1>0X4FF0&&prt>3))
{
i=0;
start=2;
count=0;
// ledRedOff();
// ledGreenOn();
timer1_init();
TCCR1B=0;
prt--;

} 
}
if(start==2)
{ 
if(usbInterruptIsReady())
{
if(i>=prt)
{
usbSetInterrupt((void *)&irbuf[i],prt+8-i);
start=1;
//count=0;
prt=0;
last=1<<(PD3);
// ledRedOn();
// ledGreenOff();
}
else
usbSetInterrupt((void *)&irbuf[i], 8);
i+=8;
}


}
}
for(i=0;i<15;i++)
buffer[i]=0;
endflag=0;
LEAR_LED_L();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值