PIC 12f683 MPLAB CX8 でのプログラミング
-----------コンフィギュレーション--------------
#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で無駄なラインの動きをさせない。
ショートカットが白紙になった時の対処
%USERPROFILE%\AppData\Local\
に移動して
IconCache.db
を削除して、再起動する。
小技、覚えておきたいこと
ーーーー&&演算子についてーーーー
&&演算子では、直前に実行した式が偽なら、後の式は実行しない性質があります。
次のマクロは、&&演算子の性質を利用した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 17章ー3
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番目を参照)