以下是官方說明,當時我們這邊官方給的程式是有問題的,在實驗室朋友幫助下重新改寫了代碼,簡潔許多,而且可以正常使用了。 後來公司還找我們要程式,但是比賽前我們還是不給了,雖然沒考到。想到我以前另一個比賽,官方也是沒寫好某個傳感器程式,主要是那個國産晶片寄存器變了,核心是cm0,而且手冊内容很少。我寫了有些時間,給官方看看改改,然後被他們拿去用了= =

這裡隻需要注意校驗就行了,我們直接跳過第一個校驗,校驗第二個0xAA就行了。最奇葩的是倒過來的。
不需要程式都可以用usb轉序列槽發資料.
bit f_r;
unsigned char f_1,r[3];
void UartInit(void) //[email protected]
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位資料,可變波特率
AUXR |= 0x40; //定時器1時鐘為Fosc,即1T
AUXR &= 0xFE; //序列槽1選擇定時器1為波特率發生器
TMOD &= 0x0F; //清除定時器1模式位
TMOD |= 0x20; //設定定時器1為8位自動重裝方式
TL1 = 0xFD; //設定定時初值
TH1 = 0xFD; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
ES = 1; //Enable UART interrupt
EA = 1;
}
void Uart_Isr() interrupt 4
{
if (RI)
{
RI = 0; //Clear receive interrupt flag
if(SBUF==0xAA)
{
f_1=0; //P0 show UART data
f_r=1;
}
else if(f_1<3)
{
r[f_1]=SBUF;
f_1++;
}
}
}
void main()
{
int db;
UartInit();
initlcd();
dis(2,0," db");
while(1)
{
if(f_r)
{
f_r=0;
if(r[0]==1)
db=(r[2]<<8)|r[1];
wcode(0x80);
wdata(db/1000+0x30);
wdata(db%1000/100+0x30);
wdata(db%100/10+0x30);
wdata('.');
wdata(db%10+0x30);
//send();
}
}
}