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

看板C_and_CPP (C/C++)作者 (milano)時間12年前 (2013/12/23 14:31), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) keil C. (89S51) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我想用rs232傳送一字串給89S51然後用LCD顯示其字串 但一直無法顯示出SBUF暫存器的資料. 是我將SBUF設字元變數時的方法有錯嗎? 錯在哪? 還是其他地方有錯? 餵入的資料(Input): 預期的正確結果(Expected Output): 第一列應該要顯示我用matlab傳送的字串. 錯誤結果(Wrong Output): 結果第一列都沒文字顯示.第二列有正確顯示"I am a LCD." 程式碼(Code):(請善用置底文網頁, 記得排版) #include <AT89X51.H> #include <stdio.h> /* printf, fgets */ #include <stdlib.h> /* atoi */ #define RS P3_7 #define RW P3_6 #define E P3_5 #define DB P1 void init(void); void position(char line,column); void wrins(char instruction); void display(char *string); void wrdata(char d); void delayms(unsigned int time); code char string1[]={ "Kick ass ! " }; code char string2[]={ "I am a LCD." }; main() { char buf[10]; SCON=0x50; TMOD=0x20; TH1=243; TL1=243; TR1=1; while(1) { RI=0; while(RI==0); if(RI==1) { SBUF=buf; P0=0x00; delayms(1000); init(); position(1,1); display(buf); position(2,1); display(string2); } } } void init(void) { delayms(30); wrins(0x38); wrins(0x38); wrins(0x38); wrins(0x38); wrins(0x08); wrins(0x01); wrins(0x06); wrins(0x0c); } void position(char line,column) { unsigned char instruction; line--; column--; instruction=0x80+(0x40*line + column); wrins(instruction); } void wrins(char instruction) { RS=0; RW=0; E=0; delayms(1); E=1; DB=instruction; delayms(1); E=0; delayms(8); } void display(char *string) { char k=0; while(string[k] !=0x00) { wrdata(string[k]); k++; } } void wrdata(char d) { RS=1; RW=0; E=0; delayms(1); E=1; DB=d; delayms(1); E=0; delayms(1); } void delayms(unsigned int time) { unsigned int n; while(time>0) { n=120; while(n>0) n--; time--; } } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.126.8.123

12/23 14:45, , 1F
UART的收送丟到ISR裡面去做吧
12/23 14:45, 1F
文章代碼(AID): #1IjzZ5aW (C_and_CPP)
文章代碼(AID): #1IjzZ5aW (C_and_CPP)