|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教串口,怎么沒人理我 |
| 作者:19840312 欄目:單片機 |
下面是我做的測試程序,功能:串口發(fā)送數(shù)據(jù),不接收,模式1,可是接收的有0x20之外,還有0x60,不知道哪兒出問題了?請教各位大俠,謝謝! #include "AT89X51.H" #include "main.h" #include<intrins.h> void main(void) { CHAR testti,testtime=3; serial_init (); while(testtime--) {testti=0; SBUF=0x20; while(TI==0); if(TI==1) {testti=1;} TI=0; } while(1); } //================= serial_init () { TR1 = 0; SCON = 0x40; /* mode 1: 8-bit UART, disable RECEIVER */ TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */ PCON |= 0x80; TH1 = 0xf9;TL1=0xf9; //baud*2 reload VALUE 9600 baud EA = 0; REN=0; EA=1; SM2=0; //disenble interupt disenble receive TR1 = 1; /* timer 1 run */ } * - 本貼最后修改時間:2005-6-1 11:43:35 修改者:19840312 |
| 2樓: | >>參與討論 |
| 作者: 19840312 于 2005/6/1 10:27:00 發(fā)布:
頂 |
|
| 3樓: | >>參與討論 |
| 作者: 19840312 于 2005/6/1 11:31:00 發(fā)布:
我發(fā)的數(shù)據(jù)是FE遞減到0,數(shù)據(jù)如下 我發(fā)的數(shù)據(jù)是FE遞減到0,數(shù)據(jù)如下:FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0 EF EE ED EC EB EA E9 E8 E7 E6 E5 E4 E3 E2 E1 E0 DF 9E DD 9C DB 9A 99 D8 97 D6 95 D4 D3 92 D1 90 CF 8E 8D CC 8B CA 89 C8 C7 86 C5 84 C3 82 81 C0 7F 3E 7D 3C 7B 7A 39 78 37 76 75 34 73 32 71 30 6F 6E 2D 6C 2B 6A 69 28 67 26 65 24 63 62 21 60 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00 FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0 EF EE ED EC EB EA E9 E8 E7 E6 E5 E4 E3 E2 E1 E0 9F DE 9D DC 9B 9A D9 98 D7 96 D5 D4 93 D2 91 D0 8F 8E CD 8C CB 8A C9 C8 87 C6 85 C4 83 82 C1 80 3F 7E 3D 7C 7B 3A 79 38 77 76 35 74 33 72 31 70 6F 2E 6D 2C 6B 6A 69 68 27 66 25 64 63 22 61 20 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00 有時對,有時不對,請高手指教 |
|
| 4樓: | >>參與討論 |
| 作者: zjuzy 于 2005/6/3 8:03:00 發(fā)布:
我也出現(xiàn)同樣問題 我和你遇到了同樣的問題,我用的是wave仿真c196的時候,串口出現(xiàn)的問題 測試方法一樣,數(shù)據(jù)也幾乎一樣 我設(shè)置,異步串口,4800波特率,不知道怎么會出現(xiàn)這種問題 你解決了的話,也告訴我一聲,謝謝 |
|
| 5樓: | >>參與討論 |
| 作者: hejoin 于 2005/6/3 8:07:00 發(fā)布:
不要用仿真器看結(jié)果 直接燒到芯片里面去看,下面的代碼肯定正常的,你試試看 // 串口中斷 c語言應(yīng)用實驗,在恒堅系列(http://www.hejoin.com)開發(fā)板上調(diào)試通過 // 本實驗實現(xiàn)串口中斷實驗,通過中斷和計算機進行通信 // 首先接受聯(lián)機信號,然后接受計算機的相關(guān)控制信號 // 本實驗中,采用發(fā)送不同的字符給計算機來模擬接收到的不同的計算機控制命令 // 通過擴展,可以實現(xiàn)不同的功能 // 實驗的時候請注意,串口線的選擇請參考說明書,波特率如果機器是12M就選擇 // 2400,如果是6M就選擇1200,否則通信可能不正常 #include <8051.h> unsigned CHAR time,b_break,b_break_3; unsigned CHAR buf; void waitsend() { while(!TI) { }; TI = 0; } //串行中斷程序 void int_s(void) interrupt 4 { ES = 0; //關(guān)閉串行中斷 RI = 0; //清除串行接受標(biāo)志位 buf = SBUF; //從串口緩沖區(qū)取得數(shù)據(jù) P1 = buf; //數(shù)據(jù)送往p1口顯示出來 if(buf == 255) SBUF = 255; //發(fā)送聯(lián)絡(luò)信號 else{ SWITCH(buf) { case 1: SBUF = 'h',waitsend();break; //如果接受到1,發(fā)送字符'h'給計算機 case 2: SBUF = 'e',waitsend();break; //如果接受到2,發(fā)送字符'e'給計算機 case 3: SBUF = 'j',waitsend();break; //如果接受到3,發(fā)送字符'j'給計算機 case 4: SBUF = 'o',waitsend();break; //如果接受到4,發(fā)送字符'o'給計算機 case 5: SBUF = 'i',waitsend();break; //如果接受到5,發(fā)送字符'i'給計算機 case 100: SBUF = 100,waitsend(),P3_7 = 1;break; //如果接受到100,打開蜂鳴器 case 111: SBUF = 111,waitsend(),P3_7 = 0;break; //如果接受到111,關(guān)閉蜂鳴器 default: SBUF = 'n',waitsend();break; //如果接受到其它數(shù)據(jù),發(fā)送n給計算機 } } ES = 1; //允許串口中斷 } void main(void) { P0 = 0; P2 = 255; //關(guān)閉數(shù)碼管顯示 P1 = 255; //關(guān)閉LED 顯示 P3_7 = 0; //關(guān)閉蜂鳴器 EA=1; SCON=0x50;PCON=0; TMOD=0x20;ES = 1; TL1=TH1=0xf3;TR1=1; //串口工作在模式3,波特率2400(12M)/1200(6M) while(1) { }; //無限循環(huán)等待串行中斷 } |
|
| 6樓: | >>參與討論 |
| 作者: gbchang 于 2005/6/3 9:15:00 發(fā)布:
談從軟現(xiàn)象看硬故障:數(shù)據(jù)線的D7/D6懸空了。分析如下: 談從軟件現(xiàn)象看硬故障 數(shù)據(jù)線的D7/D6懸空了。分析如下: 錯誤數(shù)據(jù): “可是接收的有0x20之外,還有0x60,” “ FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0 EF EE ED EC EB EA E9 E8 E7 E6 E5 E4 E3 E2 E1 E0 DF 9E DD 9C DB 9A 99 D8 97 D6 95 D4 D3 92 D1 90 CF 8E 8D CC 8B CA 89 C8 C7 86 C5 84 C3 82 81 C0 7F 3E 7D 3C 7B 7A 39 78 37 76 75 34 73 32 71 30 6F 6E 2D 6C 2B 6A 69 28 67 26 65 24 63 62 21 60 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00 FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0 EF EE ED EC EB EA E9 E8 E7 E6 E5 E4 E3 E2 E1 E0 9F DE 9D DC 9B 9A D9 98 D7 96 D5 D4 93 D2 91 D0 8F 8E CD 8C CB 8A C9 C8 87 C6 85 C4 83 82 C1 80 3F 7E 3D 7C 7B 3A 79 38 77 76 35 74 33 72 31 70 6F 2E 6D 2C 6B 6A 69 68 27 66 25 64 63 22 61 20 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00” 一。找到規(guī)律:所有數(shù)據(jù)的低4位沒有問題 二。高4位有時出問題,以二進制查看,找規(guī)律: F(1111)對 E(1110)對 D(1101)出現(xiàn)9(1001),D6由1=>0 C(1100)出現(xiàn)8(1000),現(xiàn)象同D B(1011)變成7(0111)或3(0011),D7由1=>0,d6由0=>1 A(1010)變成6(0110)或2(0010)現(xiàn)象同B 9(1001)變成1(0001),d7由1=>0 8(1000)變成0(0000)現(xiàn)象同9 7(0111)變成F(1111),d7由0=>1 6(0110)變成E(1110)現(xiàn)象同7 5(0101)變成9(1001)或D(1101),d7由0=>1,d6由1=>0 4(0100)變成8(1000)或C(1100)現(xiàn)象同5 3(0011)出現(xiàn)7(0111),d6由0=>1 2(0010)出現(xiàn)6(0110)現(xiàn)象同3 1(0001)對 0(0000)對 三?偨Y(jié),只有d7/d6會出錯,有幾種可能: 對地短路,該位數(shù)據(jù)一直為0,排除 對電源短路,該位數(shù)據(jù)一直為1,排除 兩線互相粘連,發(fā)生線與,有0則都為0,常用硬件是這樣的,排除 一線懸空,此線會經(jīng)常出現(xiàn)與其相鄰線的數(shù)據(jù)(線間電容耦合),但只懸空的會出問題,排除 兩線懸空,沒有任何規(guī)律。符合。 四。結(jié)論:數(shù)據(jù)線的D7/D6懸空了。 * - 本貼最后修改時間:2005-6-3 9:30:41 修改者:gbchang |
|
| 7樓: | >>參與討論 |
| 作者: hejoin 于 2005/6/3 9:20:00 發(fā)布:
波特率的問題? 波特率的問題? |
|
| 8樓: | >>參與討論 |
| 作者: xuhuadong 于 2005/6/3 11:48:00 發(fā)布:
波特率的問題,不會吧? 我分析應(yīng)該是仿真器的問題,很肯定, 你可以用232接口進行測試單片機程序 |
|
| 9樓: | >>參與討論 |
| 作者: gbchang 于 2005/6/3 13:03:00 發(fā)布:
請19840312君有結(jié)果后上來發(fā)個貼... |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |