A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ちょうど自分もとある理由でまったく同じレジスタを確認するときに使った方法です。
残念ながらCCSではそのレジスタはヘッダで定義されていないので自分でやります。
int* rcsta = 0x18;
putc(*rcsta);
ポインタ宣言をして中身にアドレス番地を記述すればOKのようです。
自分は中身をUSART経由で確認するためputcを使っていますがアクセスの方法は変わらないと思います。
補足ですがフレーミングエラーが発生している場合は0bitのフラグもたつのでUSART受信割り込みの最初にチェックすると良いと思います。
No.2
- 回答日時:
> Q3)レジスタをCCS-Cから直接読み出す方法で行き詰っています。
ざっと検索しただけのアドバイスです。
if(RCSTA & 0x04) { /* FERR? */
;
}
のようなものでアクセスできそうです。
機種別?のヘッダファイルに、レジスタ定義がされている気がします。
この手のモノのアクセス手法ですが、受信割り込みの場合でたとえると
ステータスレジスタをREADして
・正常だったら受信データを読み出せる
・エラーだったらそのエラー要因をクリアしないと、その後もデバイスは動かない
だと思います。
--- (1)
http://www.ys-labo.com/JJY%20Simulator%20Kit/JJY …
> interval()
エラーステータスクリア (RCSTAのエラー要因をクリアする)
> RCSTA = (RCSTA & 0b11111101); //OERR = 0 : オーバーランエラー(データが残っているのに次のデータを受信)クリア)
> RCSTA = (RCSTA & 0b11111011); //FERR = 0 : フレーミングエラー(ストップビットがこない)クリア
--- (2) USART 受信割り込みハンドラの例
http://www.ccsinfo.com/forum/viewtopic.php?t=175 …
> void Interrupt_USART_Rx(void)
> /* Read the data and the Rx status reg */
> rcsta.byte = RCSTA;
> data = RCREG;
> case WAIT_FOR_DATA:
フレーミングエラーを検出
> if (rcsta.bits.FERR)
---- (3)
http://amahime.main.jp/sirial/main.php?name=siri#2
> パソコンと通信するには RS-232 プログラム編 MPLAB-C18
ありがとうございます。
早速取り組んでみます。
ccsのフォーラムを調べることに気がつきませんでした。
お手数をおかけいたしましたこと、申し訳ありません。
改めて、ありがとうございました。
No.1
- 回答日時:
RS232C/422/485 等の経験はありますが、PICはあまりよく知りません。
PIC16F87/88 のデータシート P100 だけを見て書きます。
REGISTER 11-2: RCSDATA : RECEIVE STATUS AND CONTROL REGISTER (18H)
> フレーミングエラーのフラグが立つのですが、C言語でこれを取得する方法がわかりません。
おそらくデバッグ中に
「ステータスレジスタを見たらフレーミングエラーが発生していた」
という状態で、PC上からはモニタ出来るけど
「アプリ側から RCSDATA のレジスターを読み出す方法がわかりません」
という質問だととらえました。
Q1) あっていますか? (ミスリードしていますか?)
Q2) どのポートでもかまいませんが、ポートアクセスの手法は理解していますか?
Q3) どのレジスタでもかまいませんが、レジスタ読み出しの手法は理解していますか?
(読み出すのでREAD:STATUSレジスタ属性)
Q4) RCSTA は読み出せるけど、BIT2 = FERR の解釈はどうすればいいか不明
であれば、下記の擬似コードのようなものですが、そういう状態ですか?
/* 擬似コード的に考える : uint8_t は符号無し8bitの意味 : unsigned charに近い */
const uint8_t BIT1_OERR = 0x02; /* 0000:0010 - #define BIT1_OERR 0x02 */
const uint8_t BIT2_FERR = 0x04; /* 0000:0100 - #define BIT2_FERR 0x04 */
const uint8_t ONERR_BIT12 = ( BIT1_OERR & BIT2_FERR ); /* 0000:0110 - 0x06 */
; /* 省略 */
const uint8_t rc_sta = RCSTAをどうにかして読み出す;
if( (rc_sta & ONERR_BIT12) == 0 )
return 0; /* no error */
if( rc_sta & BIT1_OERR )
puts("(EE) RCSTA BIT1 ON : Overrun Error !");
if( rc_sta & BIT2_FERR )
puts("(EE) RCSTA BIT2 ON : Framing Error !");
; /* 省略 */
return -1; /* error */
=====
上記例では、ANDで判断していますが
レジスタを定義した共用体変数に入れて
ビットフィールド越しにON/OFF判断してもかまいません。
(もちろん、コンパイラが許可しているのであれば…です)
この回答への補足
早速のご回答、有難うございます。
Q1)その通りです。
Q2)ポートアクセスは理解しているつもりです。
Q3)レジスタをCCS-Cから直接読み出す方法で行き詰っています。
なるほど、そういたしますと、こんなイメージでよいのでしょうか?
/**********************/
1)USARTからの1バイト受信での割り込み処理
2)割り込みルーティンの中で、
union {
int dmxdata;
short dm0;
short dm1;
short dm2; //フレーミングエラー時 1
short dm3;
short dm4;
short dm5;
short dm6;
short dm7;
} RcvData ;
と定義して、
// RCSTAアドレス= 0x18 をRcvDataに1バイト取得
memcpy( &RcvData , 0x18 , 1 );
if( RcvData.dm2 == 1 ){
-------------
}
で良いのでしょうか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- IT・エンジニアリング ITエンジニアの勉強時間や勉強方法について 初めまして閲覧いただきありがとうございます。 当方25歳 4 2022/06/09 18:51
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
- 英語 英文法教えて下さい 2 2022/12/27 11:49
- IT・エンジニアリング バックエンドエンジニアに転職 2 2022/04/07 00:51
- 介護福祉士・ケアマネージャー・社会福祉士 フルタイム働きながら(デイサービス)無理なく、実務者研修を取得する方法。 2 2023/03/25 12:15
- 大学受験 娘の大学受験勉強 6 2022/06/30 19:58
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- 英語 効果的なグループ学習について 2 2023/02/22 22:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シーケンサのデータレジスタD...
-
SRAMとレジスタの違いは何でし...
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
符号無し整数xを右にnビット回転
-
ビットシフトってどんな時使うの?
-
一般のソフトで画像を扱う場合...
-
シーケンス制御についての質問...
-
このアセンブラの意味を教えて...
-
H8を利用したPWMのパルス生成に...
-
ライン数とステップ数の違いは?
-
PICでパルス数をカウントする方法
-
アセンブラからC言語に変換する...
-
命令について
-
文字参照は10進数と16進数では...
-
8080用のクロスコンパイラは、...
-
昔のゲーム製作に使用する言語...
-
実行ファイルからソースはみれる?
-
ものづくりに向いているプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レジストってなんですか?
-
シーケンサのデータレジスタD...
-
レジスタの数
-
SRAMとレジスタの違いは何でし...
-
専用レジスタ 汎用レジスタ
-
キャッシュメモリとレジスタの...
-
PIC16F1シリーズマイコンのNCO...
-
CPUは何故、16bit→32bit→64bit...
-
PICでUSARTのフレーミングエラ...
-
CPUのビット数と、メモリ(主記...
-
64ビット、32ビットCPUについて
-
CASL LDの考え方
-
アキュムレータとインデックス...
-
CPUで行われている演算について
-
エクセルVBAのIf,Then 構...
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
ライン数とステップ数の違いは?
-
Windowsはオープンソースですか?
-
ものづくりに向いているプログ...
おすすめ情報