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

看板C_and_CPP (C/C++)作者 (milano)時間12年前 (2013/12/24 19:43), 編輯推噓3(309)
留言12則, 5人參與, 最新討論串3/4 (看更多)
※ 引述《MetalChao (饅頭)》之銘言: : ※ 引述《billy00685 (milano)》之銘言: 我想要的程式就是單純的收字串然後LCD顯示出來收到的字串. 一開始P0的LED交互亮暗. 然後一旦收到字串就啟動串列阜中斷. LCD第一行顯示出收到的字串 第二行就是單純顯示我預先設好的字串這部分沒問題. 底下是我修改的主程式及中斷程式: main() { SCON=0x50; /*0101-0000 */ TMOD=0x20; /*0010-0000 */ TH1=243; TL1=243; TR1=1; IE=0x90; /*1001-0000 */ while(1) { P0=0x00; delayms(1000); P0=0xff; delayms(1000); } } void SerialISR(void) interrupt 4 //串列中斷 { if( RI ) { int index=0; char buf[16]; buf[index] = SBUF; delayms(1000); P0=0x0f; delayms(1000); init(); position(1,1); display(buf); position(2,1); display(string2); RI=0; } } 我修改了程式,LCD的第一行能顯示出字元了. 但是我明明送'1234'經rs232給LCD但只能收到第一個位元. 就是LCD只顯示到'1'就沒了.我後面的234都不見了? 這是哪裡有錯啊?怎麼解決? 難道要我1234拆開1個1個發送,這也太麻煩了!!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.126.8.123

12/24 21:47, , 1F
你只有收一個字, 當然只會印一個字
12/24 21:47, 1F

12/24 21:49, , 2F
這都嫌麻煩的話, 我也幫不了你了 XD
12/24 21:49, 2F

12/24 22:08, , 3F
不要在中斷內放delay...
12/24 22:08, 3F

12/25 09:16, , 4F
ISR裡面放Delay就註定要GG惹
12/25 09:16, 4F

12/25 09:19, , 5F
而且你的INDEX根本沒有作用阿
12/25 09:19, 5F

12/25 14:04, , 6F
SORRY!我沒有不耐煩的意思.只是把字拆開送這邏輯怪怪的
12/25 14:04, 6F

12/25 14:11, , 7F
請教一下我要如何收才是正確的?SBUF只能容納1個字?
12/25 14:11, 7F

12/25 15:35, , 8F
rs232如果要傳送'123'字串的話.傳送端必須分別要送3次?
12/25 15:35, 8F

12/25 15:56, , 9F
可以1次送'123'然後LCD一次顯示'123'? 怎麼做?
12/25 15:56, 9F

12/25 18:59, , 10F
感謝SOLO哥哥 0.0
12/25 18:59, 10F

12/25 21:44, , 11F
在ISR裡放delay,你會debug de到死…
12/25 21:44, 11F

12/25 21:45, , 12F
很多奇怪的bug都是ISR做太久,原po請謹記…
12/25 21:45, 12F
文章代碼(AID): #1IkNDC5h (C_and_CPP)
文章代碼(AID): #1IkNDC5h (C_and_CPP)