"dspic33f、USARTでは、助けて

N

nofre

Guest
こんにちは、私はUARTのPCからデータの受信に問題がある!私を送信するPCからチップには、ダブルしかし
、 私は0.0000を受信します。フレームのiを使用する"です:ダブル;"forexample、私12.23を送信するには、最初の文字列に変換する"場合:12.23;"その後のUARTを介して送信される!を受け取るとdsPIC戻ってデータを送信する!でも... ...

//-----------------テストのUART 1 -------------------//

#含まれて<p33FJ256MC710.h>
#含まれて<delay.h>
#含まれて<stdio.h>
#含まれて<math.h>の

パイ3.14定義#

_FOSCSEL(FNOSC_FRC); / /内部FRC発振器
_FOSC(FCKSM_CSECMD&OSCIOFNC_OFF&POSCMD_NONE); / /クロックの切り替えが有効になっFail Safeのクロックモニタは無効になります
/ / OSC2ピン機能¥:OSC2クロック出力されます
/ /プライマリ発振器モード:XTのCrystanl

文字m_buf [15];
文字ß;
int nchar型= 0;
int = 0、開始= 0を送信;
文字応急=':',直前=';';

無効__attribute__((、割り込みno_auto_psv))_U1RXInterrupt(無効)(

/ / U1TXREG = U1RXREG;
ß = U1RXREG;
(ß ==応急)の場合

nchar型= 0;
開始= 1;

(開始)の場合

(ß ==直前)の場合

m_buf [nchar型 ] =β;
m_buf [nchar型] ='¥¥ 0';
nchar型= 0;
= 1を送信;

その他の
m_buf [nchar型 ] =β;


= 0 IFS0bits.U1RXIF;


無効__attribute__((、割り込みno_auto_psv))_U1TXInterrupt(無効)(
= 0 IFS0bits.U1TXIF;


無効InitClock()(
PLLFBD = 38; / / M =が40
CLKDIVbits.PLLPOST = 0; / / N1 = 2
CLKDIVbits.PLLPRE = 0; / /窒素= 2
OSCTUN = 0;
RCONbits.SWDTEN = 0;
/ /クロック切り替えPLLを組み込むことが
__builtin_write_OSCCONH(0x01)を/ / FRCに、PLL内蔵時計スイッチを開始(NOSC = 0b001)
__builtin_write_OSCCONL(0x01)を/ /スタートのクロック間(OSCCONbits.COSC!= 0b001);時計のスイッチが発生するのを待ちますスイッチング
中(OSCCONbits.LOCK!= 1)();


無効InitUART1()(
/ /この例では、その残忍な入力は
、 すべてのビットの説明に入るセット
/ / HPC16ボードので、我々がDB9コネクタUART2のに配線して
/ /このポートを設定するだけ
/ /設定U2MODE
U1MODEbits.UARTEN = 0; / / Bit15テキサス州、送受信がDISABLEDの末尾のENABLE func
/ / U2MODEbits.notimplemented; / / Bit14
U1MODEbits.USIDL = 0;で/ / Bit13続行アイドル
U1MODEbits.IREN = 0; / / Bit12いいえIR情報の翻訳
U1MODEbits.RTSMD = 0; / / Bit11シンプレクスモード
/ / U2MODEbits.notimplemented; / / Bit10
U1MODEbits.UEN = 0; / / Bits8、9テキサス州、送受信、メーカーはRTSが有効
U1MODEbits.WAKE = 0; / / Bit7いいえモーニングコール(なぜなら私たちはここ)寝ていない
U1MODEbits.LPBACK = 0; / / Bit6いいえループバック
U1MODEbits.ABAUD = 0; / / Bit5いいえオートボー('55送信')が必要となる
U1MODEbits.URXINV = 0; / / Bit4 IdleState = 1 dsPIC()を
U1MODEbits.BRGH = 0;ビットあたりの/ / Bit3 16クロック周期
U1MODEbits.PDSEL = 0; / / Bits1 2ビット、パリティなし
U1MODEbits.STSEL = 0; / / Bit0ワンストップビット
/ /ボーレート発生器にロードする値を返します。たとえば、9600です。
/ /データシートのセクション19.3.1参照してください。
/ / U2BRG =(Fcy /(16 *ボーレート))-1
/ / U2BRG =(37メガバイト/(16 * 9600))-1
/ / = 240 U2BRG
U1BRG = 240; / / 40MHzのオシレーター、9600ボー
/ /読み込みU1STA用SFR内のすべての値を
U1STAbits.UTXISEL1 = 0; / / Bit15 Intときにシャア(1 / 2の設定に転送されます!)
U1STAbits.UTXINV = 0; / / Bit14ム/、IrDAの設定
U1STAbits.UTXISEL0 = 0; Bit15の/ / Bit13他の半分
/ / = 0 U2STAbits.notimplemented; / / Bit12
U1STAbits.UTXBRK = 0; / /無効Bit11
U1STAbits.UTXEN = 0; / / Bit10テキサス州周辺機器の制御ピン
U1STAbits.UTXBF = 0; / / Bit9 *読み取り専用ビット*
U1STAbits.TRMT = 0; / / Bit8 *読み取り専用ビット*
U1STAbits.URXISEL = 0; / / Bits6、7 Int。文字を受信した上で
U1STAbits.ADDEN = 0; / / Bit5アドレス検出バリアフリー
U1STAbits.RIDLE = 0; / / Bit4 *読み取り専用ビット*
U1STAbits.PERR = 0; / / Bit3 *読み取り専用ビット*
U1STAbits.FERR = 0; / / Bit2 *読み取り専用ビット*
U1STAbits.OERR = 0; / / Bit1 *読み取り専用ビット*
U1STAbits.URXDA = 0; / / Bit0 *読み取り専用ビット*
IPC7 = 0x4400; / /ミッドレンジ割り込み優先順位レベルの緊急の理由
= 0 IFS0bits.U1TXIF; / /クリア送信割り込みフラグ
IEC0bits.U1TXIE = 1; / /送信割り込みを有効にする
= 0 IFS0bits.U1RXIF; / /クリアの受信割り込みフラグ
IEC0bits.U1RXIE = 1; / /受信割り込みを有効にする
U1MODEbits.UARTEN = 1; / /そして
、 上の周辺機器の電源
U1STAbits.UTXEN = 1;


無効putUART1(char cを)(
中のTxフルバッファ中(U1STAbits.UTXBF); / /待つ
U1TXREG = ç;


無効putsUART1(文字*掲載)(
符号なしint = 0;
(掲載[私])/ /ループまで* ==掲載¥¥ 0、文字列の末尾ながら
、putUART1(掲載[私 ]); /次のいずれかの文字をポイント送信/


ダブルgetUART1(無効)(
ダブルX;

中(!送信される);
Xの= atof関数()m_buf;
= 0を送信;
開始= 0;

戻りXの;


メイン(無効)int(

InitClock(); / /これは、PLLの設定です
InitUART1(); 9600,8、度、1 / /初期化UART2ののTx / Rx
ダブル= 0;
文字BUFの[10];
遅延(Delay_5mS_Cnt * 100);

ダブルニュー、ニューヨーク、T_o;

ニュー= getUART1();
ニューヨーク= getUART1();
T_o = getUART1();

遅延(Delay_1S_Cnt);
はsprintf(BUFは、"%.5 f"を、ニュー);
putsUART1(BUFの);

遅延(Delay_1S_Cnt);
はsprintf(BUFは、"%.5 f"を、ニューヨーク州);
putsUART1(BUFの);

遅延(Delay_1S_Cnt);
はsprintf(BUFは、"%.5 f"を、T_o);
putsUART1(BUFの);

/ /私は0.00000 !!!!!!!受信

(1)(
遅延(Delay_5mS_Cnt * 200);

はsprintf(BUFは、"%.5 f"を、100 *罪((私 )*π/ 7));
putsUART1(BUFの);
/ /このrountine送信チェックすることです、それは正常に動作!




ヘルプ私<img src=¥"http://www.edaboard.com/images/smiles/icon_cry.gif¥" alt=¥"泣いてまたは非常に悲しい¥" border=¥"0¥" /><img src=¥"http://www.edaboard.com/images/smiles/icon_cry.gif¥" alt=¥"泣いてまたは非常に悲しい¥" border=¥"0¥" />



 
やあ、
一方
、 コードのほとんどは私の頭の上に行っていいと長いコードで、私は1つの事をしたときは送信されませんがtrueの場合M_Buff受信バッファを読んでいる通知を見ています。実際にバッファのデータが含まれて送信時には= 1、だから私はこの条件を読むべきだと思う。

よろしく、
Laktronics

 
やあ、
今は少しあなたのプログラムの詳細を理解。あなたが本当に送信された1を待っているとすればOKです。
あなたの主な問題を格納するには:と、文字列で二重に変換しようとする。ちょうどあなたのM_BUFから
、 これら2つの文字を削除してプログラムが動作する必要があります。

場合は
、 データを送信する方法では、どうして3回M_BUFを読むか、はパソ¥コンから3回?

よろしく、
Laktronics

 

Welcome to EDABoard.com

Sponsor

Back
Top