忍者ブログ

ぶろぐ 個人的なものです。 内輪ネタ多数。 自分の気持ちをまとめています。 画像がうまく表示されない場合は 右クリック→「H」

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

帰ってきた赤外線

赤外線通信は終わっていませんでした。
時間がたつと周期がずれて通信できなくなります。
安定させようとしてプログラムを書き直したのですが何度やってもできません。
見てみておかしいとこあったらコメントしてください。疲れました。
送信
#include<16F648A.h>
#fuses HS, NOWDT, PUT, NOPROTECT, BROWNOUT, MCLR, NOLVP, NOCPD
#use fast_io(A)
#use fast_io(B)
#use delay(clock=20000000)

//1bitの長さ494us

void init(void)
{
set_tris_a(0x00);
set_tris_b(0x00);

output_a(0x00);
output_b(0x00);
}

void high (void)
{
int j;
for(j=0; j<19; j++)
{
output_high(PIN_B7);
delay_us(13);
output_low(PIN_B7);
delay_us(13);
}
}

void low (void)
{
int j;
for(j=0; j<19; j++)
{
output_low(PIN_B7);
delay_us(13);
output_low(PIN_B7);
delay_us(13);
}
}
void bit (int wave)
{
int i;
for(i=0; i<8; i++)
{
if(bit_test(wave, i) == 1)
{
high();
}
else
{
low();
}

}
}

void send (int signal)
{ //スタートビット
const int startbit = 0xC0;
//デバイスコード
const int device = 0xaa;
//エンドビット
const int endbit = 0x0F;
//
int i,k,j;
//スタートビット送信
bit(startbit);
//デバイスコード送信
bit(device);
//データ送信
bit(signal);
//エンドビット送信
bit(endbit);
}

void main(void)
{
//LEDの数注意
const int data1 = 0x5A;
const int data2 = 0x05;
const int data3 = 0x00;

//初期化関数
init();

while(1)
{
send(data1);
/* delay_ms(1000);
send(data3);
delay_ms(1000);
send(data2);
delay_ms(1000);
send(data3);
delay_ms(1000);*/
}
}
受信
#include<16F648A.h>
#fuses HS, NOWDT, PUT, NOPROTECT, BROWNOUT, MCLR, NOLVP, NOCPD
#use fast_io(A)
#use fast_io(B)
#use delay(clock=20000000)


void init(void) //初期化のための関数
{
set_tris_a(0x00);
set_tris_b(0xFF);

output_a(0x00);
output_b(0x00);
}

int bitread (void) //データ受信関数
{
int i,wave;
wave=0;
for(i=0; i<8; i++){
if(input(PIN_B0))
{
bit_clear(wave, i); //赤外線送信のモジュールが負論理でデータが送られてくるので,反転して受信してあげる。
}
else
{
bit_set(wave, i);
}
delay_us(494);
}
return wave;
}

int recieve (void) //データの受信,判定関数
{
int judge1,signal;

//スタートビット
const int startbit = 0xC0;
//デバイスコード
const int device = 0xaa;
//エンドビット
const int endbit = 0x00;
while(PIN_B0)
{
continue;
}
delay_us(247);
if(input(PIN_B0)==0) //スタートビット受信
{
delay_us(497);
if(input(PIN_B0)==0)
{
delay_us(497);
//デバイスコード受信
judge1 = bitread();
//データ受信
signal = bitread();
//エンドビット受信
if(input(PIN_B0))
{
//デバイスコードが正しいかどうかの判定
//正しければmain関数に受信したデータを返す
if (judge1 == 0xaa)
{
return signal;
}
}
}
}
return 0;
}

void main(void)
{
int data;
init();
output_high(PIN_A0);
output_high(PIN_A1);
while(1)
{
data = recieve();
switch(data)
{
case 0x5A:
output_low(PIN_A1);
delay_ms(1000);
break;
case 0x05:
output_a(data);
break;
default: //何もこない,または該当しないデータが送られてきた場合の処理
output_high(PIN_A1);
break;
}
}
}
PR

Comment

どうもです。

  • ポンコツ   
  • 2010/03/01 (月)21:11  
  • edit

set_tris_a(0x00);
set_tris_b(0x00);

ここはあってるの?

無題

  • てんぱぁる   
  • 2010/03/01 (月)22:14  
  • edit

送信と受信の文字が逆でした。
修正しました。

Form

お名前
タイトル
E-MAIL
URL
コメント
パスワード

この記事へのトラックバック

この記事にトラックバックする:

カレンダー

02 2024/03 04
S M T W T F S
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

天気

最新コメント

[04/03 tenpoul]
[04/01 gear]
[03/27 tenpoul]
[03/27 gear]
[01/24 てんぱぁる]

最新トラックバック

プロフィール

HN:
てんぱぁる
年齢:
33
性別:
男性
誕生日:
1990/06/29
職業:
学生
趣味:
いろいろあるようでないけど強いて挙げるならパソコン? 

バーコード

ブログ内検索

カウンター

最古記事

FX NEWS


-外国為替-

忍者アド

忍者ブログ

[PR]

TemplateDesign by KARMA