2013-04-16 28 views
0

大家。PIC18F452 UART成幀問題

我正在使用PIC18F452微控制器。我在UART上接收數據,通過附加額外的同步字來發送數據並進行發送,我在按順序發送同步字時遇到問題。我想要發送的話說...... EA 09 C3與數據。現在,我有這樣的代碼寫在MIKROC:

int j=0; 
SPBRG = 129; 
TXSTA = 0b00100110; 
RCSTA = 0b10010000; 
while(1) 
{ 
    if(j == 0) 
    { 
    TXREG = 0xEA; 
    } 
    else if(j == 1) 
    { 
    TXREG = 0x09; 
    } 
    else if(j == 2) 
    { 
    TXREG = 0xC3; 
    } 
    else 
    { 
    TXREG = RCREG; 
    } 
    while(!TRMT); // wait for whole data frame to be ready for transmission 
    if(j == 100) 
    j = 0; // reset j after 100 bytes 
    else 
    j++; 
    } 

現在這裏所發生的是,同步字傳輸,但不按順序,有時字節複製也會發生。 我想要的是,j應該只在發送一個字節後遞增,這裏我認爲j獨立於傳輸增量。

感謝預期。

問候, 哈桑

回答

0

UART發送的隱蔽柔樂是:

_ 把每個字節之間有點延遲發送 _

注意,這是一個波特率獨立祕密;)。

例如50微秒。

由於發件人和收件人正在工作異步,他們使用了太多的努力來同步每個字節,而收到和你不斷填塞他們......他們只是失速。有時會丟棄該字節,有時會丟棄該字節而不清除接收寄存器,以便複製字節。因此,如果速度很關鍵,首先給每個字節50ms或更多的發送延遲,然後如果它的工作範圍縮小了,那麼例如將它縮小到10微秒。繼續縮小它,直到它再次停止,最好將延遲設置爲故障安全限制的兩倍。

不急於或捱餓的速度我希望,否則使用另一個溝通渠道不是美國。