|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)教MSC1210單片機(jī)與計(jì)算機(jī)串口通信的問題 |
| 作者:莊莊 欄目:單片機(jī) |
本人從網(wǎng)上下載程序如下: #include <\ti\reg1210.h> #include <string.h> #define INBUF_LEN 4 //數(shù)據(jù)長(zhǎng)度 unsigned CHAR inbuf1[INBUF_LEN]; unsigned CHAR CHECKSUM,count3; bit read_flag=0; void init_serialcomm(void) { SCON0 = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x80; //SMOD=1; TH1 = 0xF4; //Baud:4800 fosc=11.0592MHZ IE |= 0x90; //Enable Serial Interrupt TR1 = 1; //timer 1 run // TI=1; } //向串口發(fā)送一個(gè)字符 void send_CHAR_com(unsigned CHAR ch) { SBUF=ch; while(TI==0); TI=0; } //向串口發(fā)送一個(gè)字符串,strlen為該字符串長(zhǎng)度 void send_string_com(unsigned CHAR *str,unsigned int strlen) { unsigned int k=0; do { send_CHAR_com(*(str + k)); k++; } while(k < strlen); } //串口接收中斷函數(shù) void serial () interrupt 4 using 3 { if(RI) { unsigned CHAR ch; RI = 0; ch=SBUF; if(ch>127) { count3=0; inbuf1[count3]=ch; CHECKSUM= ch-128; } else { count3++; inbuf1[count3]=ch; CHECKSUM ^= ch; if( (count3==(INBUF_LEN-1)) && (!CHECKSUM) ) { read_flag=1; //如果串口接收的數(shù)據(jù)達(dá)到INBUF_LEN個(gè),且校驗(yàn)沒錯(cuò), //就置位取數(shù)標(biāo)志 } } } } main() { init_serialcomm(); //初始化串口 while(1) { if(read_flag) //如果取數(shù)標(biāo)志已置位,就將讀到的數(shù)從串口發(fā)出 { read_flag=0; //取數(shù)標(biāo)志清0 send_string_com(inbuf1,INBUF_LEN); } } } 我在用download.exe 下載程序后,復(fù)位執(zhí)行程序。 我在計(jì)算機(jī)端用串口調(diào)試助手,但是接收不到任何數(shù)據(jù)。 我判斷程序能夠下載,硬件肯定沒有問題,不知道軟件應(yīng)怎么設(shè)置? 請(qǐng)高手指教,謝謝。 * - 本貼最后修改時(shí)間:2005-12-12 11:52:46 修改者:莊莊 |
| 2樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/12 9:32:00 發(fā)布:
請(qǐng)高手指教,謝謝。 MSC1210單片機(jī)與計(jì)算機(jī)通信是不是和RS232有關(guān) |
|
| 3樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/12 15:37:00 發(fā)布:
現(xiàn)在已能夠接收到數(shù)據(jù) 現(xiàn)在已能夠接收到數(shù)據(jù),但是數(shù)據(jù)內(nèi)容還是不對(duì),有時(shí)應(yīng)是33變成了93,有時(shí)發(fā)送好多0,不知道到底那里設(shè)置不對(duì)?請(qǐng)高手們指教,謝謝 硬件設(shè)置情況為:?jiǎn)纹瑱C(jī)與計(jì)算機(jī)之間用MAX232聯(lián)結(jié)。 請(qǐng)高手們指教,謝謝 * - 本貼最后修改時(shí)間:2005-12-12 15:59:16 修改者:莊莊 |
|
| 4樓: | >>參與討論 |
| 作者: ccelec 于 2005/12/12 17:00:00 發(fā)布:
首先要確認(rèn)是大部分?jǐn)?shù)據(jù)都不對(duì),還偶有不對(duì)。 如果是大量數(shù)據(jù)不對(duì),那可能是配置(如波特率或校驗(yàn))問題,如果是偶有數(shù)據(jù)錯(cuò)誤,可能鏈路的問題 |
|
| 5樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/12 17:34:00 發(fā)布:
謝謝樓上的回答 所有數(shù)據(jù)都不對(duì),我是第一次作單片機(jī)通信,不知道從哪里下手,樓上說(shuō)的配置(如波特率或校驗(yàn))問題,波特率應(yīng)該沒錯(cuò)誤都是9600,通信協(xié)議為:第1字節(jié),MSB為1,為第1字節(jié)標(biāo)志,第2字節(jié),MSB為0,為非第一字節(jié)標(biāo)志,其余類推……,最后一個(gè)字節(jié)為前幾個(gè)字節(jié)后7位的異或校驗(yàn)和。 我是從網(wǎng)上下載的程序,應(yīng)該沒有錯(cuò)誤,可能是硬件環(huán)境改變的緣故,單片機(jī)串口與計(jì)算機(jī)串口之間用MAX232聯(lián)結(jié)。我應(yīng)該怎樣改動(dòng)程序使它適應(yīng)我的硬件環(huán)境?請(qǐng)指教,謝謝 |
|
| 6樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/13 9:17:00 發(fā)布:
感謝指導(dǎo) 問題已經(jīng)解決,波特率錯(cuò)誤 將 TH1 = 0xF4; //Baud:4800 fosc=11.0592MHZ 改為:TH1 = 0xF3; //Baud:4800 fosc=11.0592MHZ 就可以了。 謝謝ccelec的指教。 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |