音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ī)
串口通訊中發(fā)現(xiàn)的問題;
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
肯定是程序的問題了。不貼出來怎看呢?
 
3樓: >>參與討論
mrqingfeng
串口通訊中發(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
樓主不用這么心急吧
      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
樓主不用這么心急吧
呵呵,有道理,謝謝提醒!我再試試

6樓: >>參與討論
mrqingfeng
re:dadodo
感謝dadodo的提醒,我在clr之前加了一些延時(shí),正常了

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
真煩人,這是怎么回事?
不能通過指針把在rom開辟的數(shù)組tab,賦值給TempTab數(shù)組
誰知道AT90PWM3?
請教光耦
想問一些關(guān)于常量定義和函數(shù)說明的問題
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號