とりあえず動かしたいとき
コンフィギュレーションワード
PIC |
#fuses |
16f84a |
HS,NOWDT,PUT |
16f648a |
INTRC_IO,NOWDT,NOPROTECT,PUT,NOMCLR,NOLVP,NOBROWNOUT |
16f877 |
HS,NOWDT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,WRT |
この辺使っとけば問題ないしょ
648aのは内部発信機
シリアル通信
#use RS232(BAUD=9600,XMIT=PIN_A0,RCV=PIN_A1)
この例だと送信ピンがA0、受信ピンがA1
ボーレートは早すぎると通信失敗するので9600くらいがちょうどいい
CRCコード(やっつけ)
以下のプログラムでCRCコードが生成できるので
①送信側でデータからCRC生成
②データ+CRCを送信
③受信側でデータからCRC生成、送られてきたCRCとチェック
#define GG 9
unsigned crc_code(int len, char *data){
int i;
unsigned d;
unsigned bit;
unsigned crc;
d=0;
while (len-- >0) d=((d<<8)+*data++)%GG;
crc=0;
d=(d<<4)%GG;
if(d>0){
for(i=0,bit=1;i<16;i++,bit<<=1){
if(((d+crc)^GG) & bit) crc|=bit;
}
}
return crc;
}
デバイスコードの下位ビットが余ってて無理やり詰め込んだので巡回長が小さいまま
気休め程度に・・・
構造体ビットフィールド
struct int2bit{
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
unsigned int d : 1;
unsigned int e : 1;
unsigned int f : 1;
unsigned int g : 1;
unsigned int h : 1;
};
int2bit data=0b00100000;
下位ビットからabcdefが割り当たる
data.fで1のビットにアクセスできる
連続してデータを取得したいときはビットシフト(<<,>>)を使えばいいので意味なかったorz
Linux16F84シミュレータ
simulpic
synapticからインストール可
最終更新:2008年02月05日 20:34