こんばんわ
としぶぅ~です。
昨日は「さむっ」って感じだったのに。。。。今日は暑かった^^;
徐々に仕事も忙しくなりつつあります。
いつまでブログ書き続けられるのか(笑)
今日は昨日動作確認を行いましたので、とりあえず動いているソースコードを
添付します。(本日はつまらないですが、しばしお付き合いください。。。)
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の表示用のソースを貼り付けます。。。
それでは今日はこの辺で
おやすみなさ~い(^^/