Hitech C

Hitech Cでサンプルソース
http://sky.geocities.jp/home_iwamoto/picc_02.htm
http://physics.cocolog-nifty.com/weblog/2012/07/post-9765.html

Hitech Cでのコンフィグの説明
http://sky.geocities.jp/home_iwamoto/picc_03.htm

バージョンによってコンフィグの表記が変わるとか。
http://homepage3.nifty.com/mitt/pic/picc/piccix.html

C:\Program Files\HI-TECH Software\PICC\9.83\include
のヘッダーファイル調べてみたら
pic.hで__config()マクロが定義してあって定数はpic16f84a.hで定義してあった。
pic16f84aでつかうのはこれ

// Config Register: CONFIG
#define CONFIG               0x2007
// Oscillator Selection bits
// RC oscillator
#define FOSC_EXTRC           0xFFFF
// HS oscillator
#define FOSC_HS              0xFFFE
// XT oscillator
#define FOSC_XT              0xFFFD
// LP oscillator
#define FOSC_LP              0xFFFC
// Watchdog Timer
// WDT enabled
#define WDTE_ON              0xFFFF
// WDT disabled
#define WDTE_OFF             0xFFFB
// Power-up Timer Enable bit
// Power-up Timer is disabled
#define PWRTE_OFF            0xFFFF
// Power-up Timer is enabled
#define PWRTE_ON             0xFFF7
// Code Protection bit
// Code protection disabled
#define CP_OFF               0xFFFF
// All program memory is code protected
#define CP_ON                0xC00F

セラロックを使用したいので「FOSC_HS」を使用
http://www.picfun.com/pic20.html
Watchdogは使わないので「WDTE_OFF」
コードプロテクトもしないので「CP_OFF」
Power-up Timerは使うので「PWRTE_ON」
以下の設定になった

#include "pic.h"

__CONFIG(FOSC_HS & WDTE_OFF  & PWRTE_ON & CP_OFF);

pic16f84aで組んでみたソースがこれ。ポートを2本モニターして他のポートを動かしリレーを制御する。標準ロジックでも組めるけど。

/*****************************************************************
    xx-xxx xxxxxxx 電流切替回路
    xxxxxxx 追加回路用

  DATE       VER   NAME     COMMENT
  2012/10/22 V0.00 XXXXXX  新規作成
*****************************************************************/
#include "pic.h"

__CONFIG(FOSC_HS & WDTE_OFF  & PWRTE_ON & CP_OFF);


int main(void) {
	unsigned char a;
	
	PORTB = 0;
	TRISB=0b00000011;          // PORTB IO 0,1BITを入力、他をを出力に設定

	while(1) {
		a = PORTB & 0b00000011;
		
		switch(a){
			case 0:		//Relay ALL OFF
				PORTB = 0b00000000;
				break;
			case 1:		//RB4:1 RB5:0 RB6:0
				PORTB = 0b00010000;
				break;
			case 2:		//RB4:1 RB5:1 RB6:0
				PORTB = 0b00110000;
				break;
			case 3:		//RB4:0 RB5:0 RB6:1
				PORTB = 0b01000000;
				break;
		}
	}
}