出錯點
if(rx_buffer_date[0]=='a' && rx_buffer_date[1]=='b' && rx_buffer_date[2]=='c')
乙個字元用單引號,字串才用多引號
分析找到stcf1的例程,定時器2串列埠1或者定時器1串列埠1(只有串列埠1可以用來進行通訊)
建議使用定時器1作為波特率發生器,定時器2作為數碼管重新整理定時器,
優先順序:定時器0>定時器1>定時器2
如果使用定時器0作為數碼管重新整理電路,定時器1作為波特率發生器,則偶爾會發生串列埠通訊被定時器0打斷,也就會出現得發幾次資料發生實現我們的功能
bit busy=0;
unsigned char rx_buffer[10];
unsigned char rx_buffer_size=0;
①建立uart.c和uart.**件
②賦值函式sendstring()
③賦值senddata()刪除奇偶檢驗部分
④寫uart1_init_time2部分
開啟stc波特率發生選擇串列埠1定時1 8位資料
再加上es=1;ea=1;
void uartinit(void)
⑤void uart() interrupt 4 using 1 複製
修改一些如下。我覺得之前可能出錯在於使用了定時器2作為波特率發生器,而中斷服務函式使用了定時器1的isr
void uart() interrupt 4 using 1
else
rx_buffer_size=0;//!!一定要寫在外面,不然結果就是發生正確字元後,一直要等待buffer區域被重新覆蓋才會實現新功能}}
if (ti)
}
補充
字元0對應的ascii是48,所以如果串列埠傳送-0-23
如果讀取第一位則結果是48,所以如果要正常十進位制數的話需要減去48
if(rx_buffer[0]=='-' &&rx_buffer[2]=='-')
舉例
pc向裝置傳送字串「-#-**(波特率為9600)
#只能是1,2,3代表設定(時分秒)
代表要設定時、分、秒,且注意邊界
if(uart_flag==1)
if(uart_one==2)
if(uart_one==3)
}et0=0;
shi=read_ds1302(0x85);
fen=read_ds1302(0x83);
miao=read_ds1302(0x81);
et0=1;
shi=(shi/16)*10+shi%16;
fen=(fen/16)*10+fen%16;
miao=(miao/16)*10+miao%16;
//注意字元0對應48
//使用完後最好把緩衝區清除一下
void uart() interrupt 4 using 1
else
rx_buffer_index=0;
rx_buffer[0]=0;rx_buffer[1]=0;rx_buffer[2]=0;rx_buffer[3]=0;rx_buffer[4]=0;
}} if (ti)
}
藍橋盃國賽
過去挺久了,最近也荒廢了挺久,終於有時間來寫寫回憶吧 也要重新開始看演算法開始刷題了,只有努力才會有好運 題解啥的也不說了吧,網上應該挺多,當時填空題除了兩個,大題兩個應該只有部分分,混了個國三,今年題目多也變難了點,自己還是太菜。其實最想說的是第二題和第三題,第二題居然沒想到是揹包。在這個題中猶豫...
藍橋盃國賽總結
國三划水 怎麼說呢,這屆藍橋杯的題有點複雜,原來國賽都是6道題,今年一下子變成了10道題,然後沒乙個題可以暴力的,尷尬,我做的2016 2018年的國賽題,哎,基本沒用,現在大多數是在考思維,明顯的考演算法的比較少。本來至少可以拿國二的,前兩個小時搞掉了2小1大,但是後來每一道題到不簡單,但深入做肯...
藍橋盃國賽 勾股定理
勾股定理,西方稱為畢達哥拉斯定理,它所對應的三角形現在稱為 直角三角形。已知直角三角形的斜邊是某個整數,並且要求另外兩條邊也必須是整數。求滿足這個條件的不同直角三角形的個數。資料格式 輸入乙個整數 n 0例如,輸入 5程式應該輸出 1再例如,輸入 100程式應該輸出 2再例如,輸入 3程式應該輸出 ...