|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
串口通訊中發(fā)現(xiàn)的問題; |
| 作者:mrqingfeng 欄目:單片機(jī) |
ATMEGA8515編寫串口通訊程序,用ComMaster串口大師調(diào)試時(shí),發(fā)現(xiàn)單片機(jī)能正常接收數(shù)據(jù),但向ComMaster串口大師發(fā)送數(shù)據(jù)時(shí),發(fā)現(xiàn)數(shù)據(jù)總會少兩個(gè),一開始以為是波特率有問題,但不管快慢都會少兩個(gè),當(dāng)我把發(fā)送數(shù)據(jù)改一個(gè)時(shí),ComMaster就一個(gè)都收不到了,不解,各位仁兄何解? |
| 2樓: | >>參與討論 |
| 作者: zsmbj 于 2006/4/12 8:54:00 發(fā)布:
肯定是程序的問題了。不貼出來怎看呢? |
|
| 3樓: | >>參與討論 |
| 作者: mrqingfeng 于 2006/4/12 10:36:00 發(fā)布:
串口通訊中發(fā)現(xiàn)的問題; CRYSTAL: 7.3728MHZ baud rate:115200 串口初始化: void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00;//(1<<UDRE)|(1<<TXC); 我試過加上這兩位也是一樣的; UCSRC = 0x86; UBRRL = 0x03; //0xbf;set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); } #pragma interrupt_handler uart0_rx_isr:10 void uart0_rx_isr(void) { //uart has received a character in UDR while (!(UCSRA&(1<<RXC))); tmp=UDR; SWITCH(tmp) { case 0xf0: ...... break; case 0xf1: ..... break; case 0xf2: ..... break; case 0xf4: set_communication(); //半雙工發(fā)送使能 for (i=0;i<6;i++) { while(!(UCSRA&(1<<UDRE))); UDR=i; } break; clr_communication(); reti:; } 現(xiàn)在能確定的是接收不管是個(gè)數(shù)還是值都是正確的;但發(fā)送到ComMaster串口大師時(shí),只能收到00 01 02 03; 那04 05 那去了 |
|
| 4樓: | >>參與討論 |
| 作者: dadodo 于 2006/4/12 11:07:00 發(fā)布:
樓主不用這么心急吧 case 0xf4: set_communication(); //半雙工發(fā)送使能 for (i=0;i<6;i++) { while(!(UCSRA&(1<<UDRE))); UDR=i; } break; clr_communication(); reti:; 樓主貼的程序不夠完整,那我就這么理解,for循環(huán)發(fā)完最后一個(gè)數(shù)據(jù)后到clr_communication,這個(gè)過程是us級的,串口速率115200發(fā)送一個(gè)數(shù)據(jù)需要約9個(gè)us,AVR串口緩沖區(qū)可以存2個(gè)字節(jié),所以呢你的問題就很明顯了,串口緩沖區(qū)的2個(gè)字節(jié)還在等待發(fā)送,就被你clr_communication掉了 |
|
| 5樓: | >>參與討論 |
| 作者: mrqingfeng 于 2006/4/12 12:39:00 發(fā)布:
樓主不用這么心急吧 呵呵,有道理,謝謝提醒!我再試試 |
|
| 6樓: | >>參與討論 |
| 作者: mrqingfeng 于 2006/4/12 12:53:00 發(fā)布:
re:dadodo 感謝dadodo的提醒,我在clr之前加了一些延時(shí),正常了 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |