FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ランティス祭り 一日目 PIC 新お勉強8(シリアル通信2)»

コメント

コメントの投稿













管理者にだけ表示を許可する

PIC 新お勉強9(シリアル通信3)


シリアル通信でのPICからPCに向かってのデータ送信は成功したので、
PCからの信号を受信することに挑戦します。

受信用の関数
getc( ) もしくは getch( ) , getchar( )  一文字文のデータを受信します。細かい違いを良く知らないのですが、PCMでは全部同じ意味っぽいです。本来はエコーを返すとか返さないとかの違いとかがあったような気もしますが、PCMでは無いっぽいです。
gets( ) 文字列を配列に読み込みます。

送信の時と違って、受信には問題があります。
相手がいつ送ってくるかわからないからです。
さらに、getc gets は関数が呼び出されると、データが入力されるまでずっと待機してしまって、他の作業は出来なくなります。

解決策に受信割り込みを使う手がありますが、これはさすがにUSARTモジュールを搭載していないと無理です。割り込みはハードウェアに依存していますので、16F84Aではどうにもなりません。

もしくはkbhit()という関数を使う手もあるようです。
この関数は信号が入るとTRUEを返し、信号が入らない時はFALSEを返す関数です。
これを信号が無いときは、getcを読み飛ばして、 信号が来ていたらgetcを呼び出す
みたいな対応が取れるみたいです。

ちょっと疑問に思ったのですが、プログラムが長くなってkbhit()が記述してあるところまでだいぶ長くなったりした時、次々に信号が送られてきたらどうなるんだろう。たまってる分もちゃんととっておいてくれるのかな?通信について詳しく知らないので良くわからんです。
それとも、あんまり複雑なことは出来ないってことかな。ま、PICだしね。ちょっと複雑にしたかったら割り込み使えやってことなのかな。


ま、とりあえずプログラム


#include<16f84a.h>

#fuses HS,NOWDT,PUT,NOPROTECT
#use delay(CLOCK = 20000000)
#use rs232(BAUD = 9600, XMIT = PIN_A0, RCV = PIN_A1)

void main(){
    char str[10];
    set_tris_a(0x01);
    set_tris_b(0);
    printf("START PIC-PC\n\r");
    while(1){
        printf("INPUT>\n\r");
        gets(str);
        printf("PIC : %s\n\r",str);
    }
}



パソコンのキーボートで入力された文字を PICが受け取り
PIC:の後にその文字を続けて返してくるプログラムです。

うーん、なんか少しだけそれっぽい(?)感じでいいですなぁ。
俺は今通信しているって感じがしますね
ht7.jpg



お願いしマース
スポンサーサイト

ランティス祭り 一日目 PIC 新お勉強8(シリアル通信2)»

コメント

コメントの投稿













管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。