Re: [問題] 如何把暫存器SBUF的資料讀出來?(keil C)
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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章