PIC


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


とりあえず動かしたいとき

テンプレートをコピペでおk

コンフィギュレーションワード

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からインストール可
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。