mis08のブログ

ハマったことの備忘録

PIC 12f683 MPLAB CX8  でのプログラミング

-----------コンフィギュレーション--------------

Window>PICMemory>Views>ConfigrationBits
より、コンフィグレーションの設定を行う。
 
#pragma config FOSC = INTOSCIO //内部発振
#pragma config WDTE = OFF //ウォッチドックタイマOFF
#pragma config PWRTE = ON //パワーアップタイマON
#pragma config BOREN = ON //4VブラウンアウトリセットON
#pragma config MCLRE = ON //マスタークリアーON
#pragma config CP = OFF //プログラムコードプロテクションOFF
#pragma config IESO = OFF //内部、外部クロック切り替え無効
#pragma config FCMEN = OFF //クロックモニタOFF

 #pragma config CPD = OFF //データーコードプロテクションOFF
#pragma config LVP = OFF //低電圧プログラム書き込みOFF

             or

#pragma config BOREN = OFF, CPD = OFF, FOSC = INTIO, MCLRE = OFF, WDTE = OFF, CP = OFF, LVP = OFF, PWRTE = O

 

------------レジスタ--------------

OPTION_REGbits.nGPPU=0; //プルアップ有効

(のようにbits.~とすることでレジスタの一部だけ指定できる

 

OSCCON = 0x40; //1MHz
TRISIO = 0x38; //GP3,4,5 入力
ANSEL = 0x00; //全ピンデジタル
CMCON0 = 0x07; //コンパレータOFF
OPTION_REGbits.nGPPU=0; //プルアップ有効
WPU = 0x30; //4,5ピンプルアップ

 

----------プログラム---------

  • 待機させる場合、while分の中にifを入れ込んで、かつ常にifへ流れるようにするとフリーズする。while(メインループ)の中でも別のwhileで無駄なラインの動きをさせない。

MPLABの設定について

------------コンパイラを新しく入れる際の設定-----------

[tools] --> [options] --> [embedded] --> [build tools: add]
C:\Program Files\Microchip\xc8\v1.xx\bin

( ファイル名はともかくbinを指定するとaddできる

 

---------------日本語を使う際のエンコードの設定-------------

プロジェクトの作成時にEncodingでShift_JISを選択しないと日本語が文字化けする。

小技、覚えておきたいこと

ーーーー&&演算子についてーーーー

&&演算子では、直前に実行した式が偽なら、後の式は実行しない性質があります。

次のマクロは、&&演算子の性質を利用したSWAPマクロです。

#define SWAP(a,b)  ( (a != b) && (a += b,b = a - b,a -= b) )

 (苦C)より

 

(a != b)が偽になると、その後の処理が無効化される

 

ーーーー文字列を任意の位置からコピーするーーーーーーー

 strncpy で部分文字列を取り出す

 コピー元の文字列を渡すときに、文字列の先頭でなく +pos して渡します。
 strncpy は '\0' を付加しないので、取り出し後に自分で NULLストップする必要があります。

#include <stdio.h>
#include <string.h>
main() {
    char str[] = "01234567890";
    char t[64]; 

    strncpy( t, str+3, 5 ); //strの先頭+3の位置から5文字をtにコピー
    t[5] = '\0';            //取り出した文字数分の最後に'\0'を入れる
    printf( "#%s#\n", t );
}

 実行結果

#34567#

c言語 enumについて

enumを宣言する際、

 

enum{OPEN-S,OPEN-W,}

のようにすると

「〇行目に}をつけ忘れています」

とエラーを吐く

 

enum{OPEN_S,OPEN_W,}

のようにすべし

 

 

又、enumを戻り値としたい場合は

int sample(int);

int get = sample(int);

のようにintで受ける

苦C 17章ー3

ドラッグへの対応 - 苦しんで覚えるC言語(苦C)

 

int main(int argc,char *argv[]);
argcはコマンドラインの数、argvは文字配列へのポインタ変数です。
文字配列へのポインタ変数と聞くと使い方が難しそうですが、
実際には次のようにするだけです。

printf("%s",argv[0]);
このようにすれば、0番目(1番最初)のコマンドラインを表示できます。
argv[0] の要素数を変えれば、それに対応するコマンドラインにアクセスできます。

 

ーーーーーーーーーー

文字列配列a[ ],b[ ] があり、それぞれのポインタを格納した文字配列ポインタc[ ]が存在する。

 

c[0][2] のようにすると、a[2]が参照される。

(0番目の要素内の2番目を参照)