藍橋盃國賽 串列埠通訊

2021-09-22 07:56:34 字數 1729 閱讀 7380

出錯點

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程式應該輸出 ...