2016-04-08 17 views
1

こんにちは私はPIC16F877AのUARTコードのコードを書いています。コードが動作していないし、そのあなたが問題pic16f877a uart埋め込みコード

#include<pic.h> 

void pic_init(void) 
{ 
    TRISC7=1; 
    TRISC6=0; 
} 

void uart_init(void) 
{ 
    TXSTA=0x20; 
    RCSTA=0x90; 
    SPBRG=15; 
} 

void tx(unsigned char byte) 
{ 
    int i; 
    TXREG=byte; 
    while(!TXIF); 
    for(i=0;i<400;i++); 
} 

void string_uart(char *q) 
{ 
    while(*q) 
    { 
     *(*q++); 
    } 
} 

unsigned char rx() 
{ 
    while(!RCIF); 
    return RCREG; 
} 

void main() 
{ 
    char *q; 
    pic_init(); 
    uart_init(); 
    tx('N'); 
    rx(); 
    string_uart("test program"); 
} 
+0

[このガイド](https://electrosome.com/uart-pic-microcontroller-mplab-xc8/)をご覧ください。少なくとも、あなたがしたいことをするためにボーレートを設定しなければなりません。少しのヒント。 TXピンとRXピンを短絡して動作させてください。それをPCに接続するには、少なくともTTL UART(5V)ケーブルへのUSBが必要です。 – LPs

+1

コンパイラが診断メッセージを出力する場合、正確なメッセージを質問に含め、メッセージがどのラインに送信されたかを正確に示す必要があります。 – Clifford

+0

@LPs:従来のシリアルポートを持つPCは引き続き使用できます。ただし、232行のドライバが必要になります。彼のPCにデフォルトでハイパーターミナルがインストールされていれば、それはかなり古いものでなければならず、おそらく232のポートを持っているはずです。 – Clifford

答えて

3

ステートメント内を解決するために私をHEPのPCのハイパーterminal.any 1に文字を送受信したいMP LAB IDE.Iで必要なポインタのようなエラーを示しますあなたのwhileループは意味がありません:あなたは非ポインタを参照解除されているので

while(*q) { 
    *(*q++); 
} 

これは、あなたが得ているerror: (981) pointer requiredエラーが発生:*q++は、したがって、あなたが外でchar逆参照しようとしている、charを返します。 *

代わりに、あなたはおそらく、ポインタが現在ポイントする文字(*q)を送信した後、ポインタ(q++)インクリメントしたい:これも

while(*q) { 
    tx(*q++); 
} 
のように書くことができ

while(*q) { 
    tx(*q); 
    q++; 
} 

これでコードxc8)とコンパイルされましたが、コードが一致しない場合はSFR設定を確認していません作品、SFRを正しく設定したことを再度確認します。再び間接参照(*)、その後にあなた、文字を取得するには、ポインタデリファレンス

*(*q++) ; 

あなたを;:式でhttps://electrosome.com/uart-pic-microcontroller-mplab-xc8/

+0

ありがとうございます。私はエラーなしでコードをコンパイルしました。私はproteousでチェックし、あなたに戻ってきます。 - – user1811790

2

:詳細については@LPsによって提供されたリンクを参照してください。非ポインタを逆参照することはできません。

これ以外にも、にはtx()を呼んで、何か便利なことを行うことを意図していました。