將8051的值傳入電腦的問題 |
答題得分者是:bernie_w39
|
s9261127
一般會員 發表:7 回覆:13 積分:4 註冊:2007-09-18 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
s9261127
一般會員 發表:7 回覆:13 積分:4 註冊:2007-09-18 發送簡訊給我 |
ok
我是用RS232傳輸 我現在是做一個encoder的解碼 可是我一邊計數一邊將數值利用RS232傳入電腦 可是我發現他會lose count 因此想問大家有沒有解決的辦法 附上我的code void main(void) { EncPos = 0; initailuart(9600); while(1) { OldEncPos = EncPos; newa=P0_0; newb=P0_1; if( olda==1) /*1xxx*/ { if(oldb==1) /*11xx*/ { if(newb==1) /*11x1*/ { if(newa==1) /*1111*/ { P1_0 =1; P1_1 =1; } else /*1101*/ { EncPos = EncPos 1; P1_1 = 0; P1_0 =1; /* */ } } else /*11x0*/ { if(newa==1) /*1110*/ { EncPos = EncPos - 1; P1_0 = 0; P1_1 =1; /*-*/ } else /*1100*/ { P1_0 =1; P1_1 =1; } } } else /*10xx*/ { if(newa==1) /*101x*/ { if(newb==1) /*1011*/ { EncPos = EncPos 1; P1_1 = 0; P1_0 =1; /* */ } else /*1010*/ { P1_0 =1; P1_1 =1; } } else /*100x*/ { if(newb==1) /*1001*/ { P1_0 =1; P1_1 =1; } else /*1000*/ { EncPos = EncPos - 1; P1_0 = 0; P1_1 =1; /*-*/ } } } } else /*0xxx*/ { if(oldb==1) /*01xx*/ { if(newb==1) /*01x1*/ { if(newa==1) /*0111*/ { EncPos = EncPos - 1; P1_0 = 0; P1_1 =1; /*-*/ } else /*0101*/ { P1_0 =1; P1_1 =1; } } else /*01x0*/ { if(newa==1) /*0110*/ { P1_0 =1; P1_1 =1; } else /*0100*/ { EncPos = EncPos 1; P1_1 = 0; P1_0 =1; /* */ } } } else /*00xx*/ { if(newa==1) /*001x*/ { if(newb==1) /*0011*/ { P1_0 =1; P1_1 =1; } else /*0010*/ { EncPos = EncPos 1; P1_1 = 0; P1_0 =1; /* */ } } else /*000x*/ { if(newb==1) /*0001*/ { EncPos = EncPos - 1; P1_0 = 0; P1_1 =1; /*-*/ } else /*0000*/ { P1_0 =1; P1_1 =1; } } } } olda=newa; oldb=newb; if( OldEncPos == EncPos ) { a=(EncPos/1000) 0X30; b=((EncPos00)/100) 0X30; c=((EncPos/10)) 0X30; d=(EncPos) 0X30; f=0X5c; outint(a); delayX1mus (25); outint(b); delayX1mus (25); outint(c); delayX1mus (25); outint(d); delayX1mus (25); outint(f); delayX1mus (25); } } }
編輯記錄
s9261127 重新編輯於 2007-11-27 19:37:35, 註解 無‧
|
s9261127
一般會員 發表:7 回覆:13 積分:4 註冊:2007-09-18 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
s9261127
一般會員 發表:7 回覆:13 積分:4 註冊:2007-09-18 發送簡訊給我 |
|
bernie_w39
資深會員 發表:3 回覆:199 積分:280 註冊:2007-10-07 發送簡訊給我 |
|
s9261127
一般會員 發表:7 回覆:13 積分:4 註冊:2007-09-18 發送簡訊給我 |
|
bernie_w39
資深會員 發表:3 回覆:199 積分:280 註冊:2007-10-07 發送簡訊給我 |
用一段 pseudo code 來說明好了.
定一個變數 sendIndex, 初始值給 5, 在你程式的主迴圈中, 加入一段 [code cpp] if (TX_buffer_is_empty()) { switch (sendIndex) { case 0: outint(a); break; case 1: outint(b); break; case 2: outint(c); break; case 3: outint(d); break; case 4: outint(f); break; case 5: a=(EncPos/1000) 0X30; b=((EncPos00)/100) 0X30; c=((EncPos/10)) 0X30; d=(EncPos) 0X30; f=0X5c; sendIndex = -1; break; } sendIndex ; [/code] 這樣每當 TX buffer 空了的時候, 就會傳送下一個字, 一組全部送完之後, 就會將目前的 counter 值轉為 abcdf, 作為下一次傳送. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |