|
|||||||||||
| 技術(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 |
一個(gè)關(guān)于與電腦串口通訊的試驗(yàn)(Mega8) |
| 作者:gxliangx 欄目:單片機(jī) |
我有以下程序. #include <avr/io.h> #include <inttypes.h> //static unsigned CHAR version[] = {"Begin Work!"}; void InitUART(uint8_t baudrate) { //設(shè)置波特率 UBRRL = baudrate; //使能串口讀寫(xiě)寄存器 UCSRB = (1<<RXEN)|(1<<TXEN); } uint8_t ReceiveByte(void) { //輪詢寄存器UCSRA的TXC PORTB |= 0x1; //點(diǎn)亮 PB0 while(!(UCSRA & (1<<TXC))) ; //等待 PORTB &= 0xFe; //熄滅 PB0 return UDR; } void TransmitByte(uint8_t data) { //輪詢寄存器UCSRA的RXC PORTB |= 0x2; //點(diǎn)亮 PB1 while(!(UCSRA & (1<<RXC))) ; //等待 UDR = data; PORTB &= 0xfd; //熄滅 PB1 } int main( void ) { uint8_t i; i=0; InitUART(25);//估計(jì)是9600波特率.還沒(méi)有知道對(duì)不對(duì) DDRB = 0xff; //設(shè)置端口B是輸出. PORTB = 0 ; //初初始化PORTB是低電位. // while(version[i]!='\0')TransmitByte(version[i++]); // TransmitByte('A'); // Point A while(1) { TransmitByte(ReceiveByte()); } } /* 程序執(zhí)行的結(jié)果: 1.當(dāng)程序中Point A沒(méi)有被注釋的時(shí)候.PB1常亮.當(dāng)電腦端有信息輸入.PB1會(huì)閃爍. PB0始終都是滅的. 但是'A'始終都沒(méi)有出現(xiàn)在電腦端 2.當(dāng)注釋掉Point A的情況與上述相反.PB0常亮 */ 那位有串口編程的經(jīng)驗(yàn).我是用winavr編譯的. |
| 2樓: | >>參與討論 |
| 作者: zsmbj 于 2005/1/12 9:12:00 發(fā)布:
有以下問(wèn)題: 發(fā)送函數(shù)里查看的是RXC標(biāo)志,而接收函數(shù)里查看的確實(shí)TXC標(biāo)志。錯(cuò)啦。 另外TXC標(biāo)志不會(huì)自動(dòng)清零,需要程序自己清零。 |
|
| 3樓: | >>參與討論 |
| 作者: gxliangx 于 2005/1/12 19:50:00 發(fā)布:
哎喲,真的啊 好粗心.謝謝了. |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |