私はexplorer16/32 evbでデータを送信しようとしています 私はUART1とUART2を割り込みの有無にかかわらず試してみましたが、常に同じ問題が発生しました 1つのバイトを送信するために、私はシフトを持つ2つの4ビットにそれを分割する必要があるように見えPIC24H Uartは4ビットしか正しく送信しません - 分割する必要があります
コード:
#define FCY 16000000
#define BAUDRATE 9600
#define BRGVAL ((FCY/BAUDRATE)/16)-1
U2MODE = 0;
U2STA = 0;
U2MODEbits.STSEL = 0; // 1-Stop bit
U2MODEbits.PDSEL = 0 ; // No Parity 8 bit data
U2MODEbits.ABAUD = 0; // Auto-Baud Disabled
U2MODEbits.BRGH = 1; // High Speed Mode
U2MODEbits.URXINV = 0;
U2STAbits.UTXINV = 0;
U2BRG = BRGVAL; // Baud Rate Setting for 9600
U2MODEbits.UARTEN = 1; //Enable UART module
U2STAbits.UTXEN = 1; //Enable UART TX
unsigned char putU2(unsigned char c)
{
while (U2STAbits.TRMT == 0)
{
}
while (CTS);
while (U2STAbits.UTXBF);
U2TXREG = c & 0xF;
U2TXREG = (c >> 4) & 0xF;
return c;
}
私は4ビットにsplitedデータは、私が上のデータが正しい見ることができることをsedningていた場合PC(c#シリアルポートアプリケーション) しかし、U2TXREGへの2回の書き込みに分割してはなりません。
FCYが16000000であることを100%保証しているわけではありませんが、これは妥当な結果をもたらす唯一の値です。
問題が発生する可能性があります
お時間をありがとうございます。
ありがとうございました。クロックを4000000に変更し、16から4に変更しました(8または16が悪い結果になりました)。次にputU2 0x7A);私は0xFAを得る。 putU2(0x3A);私は0x7Aを取得し、常にMSBの1ビットが追加されることを意味します。 – user1820451