Re: [問題] 如何把暫存器SBUF的資料讀出來?(keil C)

看板C_and_CPP (C/C++)作者 (hkt)時間12年前 (2013/12/25 17:06), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
int g_index=0; char g_buff[16]; main() { int current_index; SCON=0x50; /*0101-0000 */ TMOD=0x20; /*0010-0000 */ TH1=243; TL1=243; TR1=1; IE=0x90; /*1001-0000 */ while(1) { if(g_index) { P=0xff; delayms(1000); init(); position(1,1); display(g_buff); position(2,1); display(string2); current_index=g_index; while(current_index==g_index); } else { P0=0x00; delayms(1000); P0=0xff; delayms(1000); } } } void SerialISR(void) interrupt 4 //串列中斷 { if( RI ) { g_buff[g_index] = SBUF; g_index++; RI=0; } } 有個很重要的觀念 中斷的優先權很高,因此非必要的東西都不要放裡面 不然會把整個系統資源浪費佔住,尤其是會耗費很多時間的 例如 Delay 或 Printf之類的 (以後找工作面試的時候這個觀念也很常考) 所以要利用global變數將資料傳出,將大部分的事情留到main來做 以你這個例子來說,中斷只要做收資料的部分就好 顯示的事情交給main處理就好 最後用一個while將程式在g_index沒有變化的時候卡住,不去刷新display 還有問題的話就再回應囉 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.210.107.254

12/25 18:53, , 1F
了解我錯在那了... 感謝! 聖誕節快樂!
12/25 18:53, 1F
文章代碼(AID): #1Ikg09ox (C_and_CPP)
文章代碼(AID): #1Ikg09ox (C_and_CPP)