線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1420
推到 Plurk!
推到 Facebook!

問... 8051問題..

答題得分者是:DavidLo
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-03-01 22:32:55 IP:118.170.xxx.xxx 訂閱
 各位前輩請問一下
我用RS232接電腦測試
2.3腳可以互傳 接到MAX232上 也可以互傳 但是接到8051上卻出現一個問題
一直案RESET然後從電腦傳資料 他才會回傳

不按他就傳不回來 請問哪位前輩可幫解答
#include
#include
//當序列中斷時(即收到RS232傳來的資料),8051會呼叫此函數
void UART_int(void) interrupt 4
{
if(RI==1)
{
RI = 0;
if(SBUF=='1') // 若PC端送來 '1',則回應 "1 ONE" 給PC
puts("ONE!");
else if(SBUF=='2') // 若PC端送來 '2',則回應 "2 TWO" 給PC
puts("2 TWO!");
else if(SBUF=='3') // 若PC端送來 '3',則回應 "3 THREE" 給PC
puts("3 THREE");
else if(SBUF=='4') // 若PC端送來 '4',則回應 "4 FOUR" 給PC
puts("4 FOUR");
else
puts("OTHERS!");
}
}
main()
{
int kbin;
SCON = 0x52; // 8 bit UART (mode 1), 啟動 Timer 1
TMOD = 0x20; // T0 mod 0, T1 mode 1
TH1 = 256-(28800/9600); //baudrate=9600
TL1 = TH1;
RI=0;
TI=0;
TR1 = 1; // 用KEIL C的 puts(), gets() 等來傳送RS232資料
ES = 1; // 開啟序列(RS232)中斷的開關
EA = 1; // 開啟中斷的總開關
while(1) {
kbin = kbscan();
if( kbin != 0xFF )
{
SBUF = kbin; //傳送給 PC
while(TI==0); //若TI=0,表示資料還未傳送完成
TI=0; //清除傳送旗標
}
}
}

scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-03-02 17:36:32 IP:203.73.xxx.xxx 訂閱
如果將pc端TXRX短路沒問題
max232端短路也沒問題
那應該就是你51程式端問題
試著將問題簡化

先確定PC傳資料給51,看是否無誤
再來就是51傳資料給PC看傳送是否無誤
51的TXRX短路也可以做自我測試
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-03-02 20:41:02 IP:114.46.xxx.xxx 訂閱
請問怎做自身測試??
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-03-02 21:28:01 IP:125.227.xxx.xxx 訂閱
我太清楚你描述的東西,可能是


if(SBUF=='1')... <== 資料接收走了
else if(SBUF=='2')... <== 沒有資料可接收
....
scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-03-03 11:09:04 IP:203.73.xxx.xxx 訂閱
把51的TXRX短路(DIP的PIN10和PIN11),自已傳自已收
如果成功的話,但還是不能跟PC連,檢查一下鮑率,同位元,MAX232
不然就是拿示波器一段一段量,應該不難找出問題


===================引 用 hanah77h12 文 章===================
請問怎做自身測試??
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-03-07 12:45:13 IP:114.41.xxx.xxx 訂閱
請問是捨麼意思@@?

===================引 用 DavidLo 文 章===================
我太清楚你描述的東西,可能是


if(SBUF=='1')... <== 資料接收走了
else if(SBUF=='2')... <== 沒有資料可接收
....
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2012-03-07 16:46:45 IP:111.240.xxx.xxx 訂閱
 
...
c=SBUF;
if(c=='1')...
else if(c=='2')...
else if(c=='3')...
else if(c=='4')...
...


一般中斷程序中,只做接收到Buffer中
不要有複雜指令,例如 puts(...)

在主程式迴路中再去做比對運算


系統時間:2017-10-24 19:32:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!