としぶぅ~の「工作部屋」...毎日少しのお勉強

趣味・関心事を書いていこうと思います。

PIC16F88を動かす。。。その18(ソースコード貼り付け~main.c)

2012-09-24 22:13:11 | PIC16F88

こんばんわ

としぶぅ~です。

 

昨日は「さむっ」って感じだったのに。。。。今日は暑かった^^;

徐々に仕事も忙しくなりつつあります。

いつまでブログ書き続けられるのか(笑)

 

今日は昨日動作確認を行いましたので、とりあえず動いているソースコードを

添付します。(本日はつまらないですが、しばしお付き合いください。。。)

main.c

/*================================================================================
Templateプログラム
タイマー割り込みを使って時間をカウントして処理を時分割させる
File Name : main.c
Target Compiler: HI-TECH C PRO(Lite MODE)
Programer : としぶぅ~
Verion : 1.0
================================================================================ */
//PIC用の定義ファイルのインクルード
//HI-TECH Cでは、必ず指定する
#include
#include "ad.h" //AD用の関数(20120908追加)
#include "delay.h" //Delay用関数(20120908追加)
#include "lcd_f88.h" //LCD用関数(20120916追加)

//コンフィグレーションメモリの設定
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CPD_OFF & BOREN_OFF & LVP_OFF & CP_OFF & FCMEN_OFF & IESO_OFF);


//タイマの再設定値を定義
// 2000cycle@(8MHz / 4) == 1ms
// そこからTimer1再設定に要するサイクルを引いたもの
#define WAIT_CYCLE (2000-5)
#define TMR1H_INIT ((unsigned char)(((unsigned short)(65536-WAIT_CYCLE))>>8))
#define TMR1L_INIT ((unsigned char)(((unsigned short)(65536-WAIT_CYCLE))&0x00ff))

//ビット操作命令のマクロを定義
#define clear_bit( reg, bitNumb ) ((reg) &= ~(1 << (bitNumb))) //指定されたビットをクリア
#define set_bit( reg, bitNumb ) ((reg) |= (1 << (bitNumb))) //指定されたビットをセット
#define test_bit( reg, bitNumb ) ((reg) & (1 << (bitNumb))) //指定されたビットをテスト


unsigned char tmr_1ms;
unsigned char tmr_4ms;
unsigned char tmr_4ms_up;
unsigned char tmr_cnt_up;


//割り込み関数
//1/100秒の、タイマのオーバーフロー割り込みで、計測値のインクリメントと、スイッチの確認を行う
void interrupt f_int( void )
{
//タイマ割り込みかどうかをチェックして、タイマ割り込み以外の場合は、処理をしない
if(TMR1IF) {
//タイマの値を再設定し、次の割り込みが1/1000秒後に発生するように設定する
TMR1H = TMR1H_INIT;
TMR1L = TMR1L_INIT;
TMR1IF=0; //タイマ1の割り込みフラグをクリアする


tmr_4ms++; //10msごとのカウンタをインクリメント
if(tmr_4ms >= 4){
tmr_4ms = 0;
tmr_4ms_up = 1;
tmr_cnt_up++;
//PORTB 0bitをon/offして4msでtmr_cnt_upが4msになっていることを確認する。
/* if(test_bit(PORTB,0)){
clear_bit(PORTB,0);
}else{
set_bit(PORTB,0);
} */
}
}
}


//ハードウェアの初期化
//使用する回路に合わせて、I/Oポートの方向などを設定する
void IoInit(void)
{
OSCCON = 0x70; //CLK=8MHzに設定する

//ポートの設定
TRISA = 0b00010000; //ポートAは使用しないが、出力に設定 PORTA-bit3=SW入力
TRISB = 0b00000000; //ポートBは使用しないが、出力に設定
PORTA = 0; //ポートAの初期値を0にする
PORTB = 0; //ポートBの初期値を0にする
ANSEL = 0b00000000; //アナログモードは使用しないので、0を指定
}


//タイマ1の初期化
void Tmr1Init(void)
{
T1CON = 0x00; //プリスケーラを、内部クロック、1:1に設定
TMR1H = 0; //タイマ1の初期値を0にする
TMR1L = 0;
TMR1IF = 0; //割り込みフラグをクリアする
//タイマ1割込を有効にする
TMR1IE = 1;
PEIE = 1;
//グローバルの割り込み制御ビットを有効にする
GIE = 1;
}

//メインルーチン
void main( void )
{

unsigned char ansel;
int i;

IoInit(); // I/Oポートの初期化
Tmr1Init(); // タイマ1の初期化
ansel = 0x10; // AD4を指定(20120908追加)
adinit(ansel); // RA4をAD4ポートとして初期化する(20120908追加)

//タイマ周期が1/100秒になるように、初期化する
TMR1H = TMR1H_INIT;
TMR1L = TMR1L_INIT;
//時間のカウンタの初期化
tmr_1ms = 0;
tmr_4ms = 0;
tmr_4ms_up = 0;
tmr_cnt_up = 0;
//タイマ1を開始する
TMR1ON=1;
//液晶の初期化
lcd_init();
// オープニングメッセージ
/* DelayMs(50);*/
lcd_posyx(0,1);
lcd_puts("PIC16F88 PRG.");
lcd_posyx(1,0);
lcd_puts("Temp.SENSOR TEST");

i=0;
while(i<=50){
i++;
DelayMs(100);
}

lcd_posyx(0,0);
lcd_puts("Temperature ");
lcd_posyx(1,0);
lcd_puts(" ");
lcd_posyx(1,3);
lcd_data(0xdf);
lcd_posyx(1,4);
lcd_data(0x43);

ad_disp = 0;
ad_data_old = 0;
ad_data = 0;


//無限ループ
while(1){

if(tmr_4ms_up == 1){
tmr_4ms_up = 0;
switch(tmr_cnt_up){
case 0: ad_4ms(); //処理1 ADを実施(20120920追加)
break;
case 1: disp_ad(); //処理2 ADを実施(20120920追加)
break;
case 2: //処理3
break;
case 3: //処理4
break;
case 4: //処理5
break;
}
}
}
}

とりあえずこんな感じです。

なんか一気に貼り付けようと思いましたが、20000文字までしか貼り付けられないようです。

(結構不便!)

すみません。。。。毎日少しずつ貼り付けます^^;

後、私の使っている開発環境を書いておきます。

MPLAB:v8.60

C compiler:Hi-TECH-C V9.82

programing/DEBUG tool:PICkit2

です。

明日は、LCDの表示用のソースを貼り付けます。。。

 

それでは今日はこの辺で

 

おやすみなさ~い(^^/