やるべき機能 †
- 書き込み
- Digital IO/Analog I
- タイマー割り込み→TMR0
- PWM
- 外部通信(USERT, I2C, SPI)
データシート疑問点とその解決 †
- RA0 General Purpose IO
- AN0 AD Channel
- レジスタには行があり、Bankとよぶ(00-1F, 90-9Fのように)
- PORTAが双方向ポートで、TRISAがその向き。
- ANSELはinputのみをアナログにする?
- アセンブリ用語
- W アキュムレータ(一般用語)、ワーキングレジスタ(PIC用語)。tmp変数に相当。
- F Function Register: そこに読み書きするとビヘイビアが出たり読めたりする。(TRIS, Rなど)
- L リテラル
- prescaler 分周器
- Communication 通信
- SINGLE IN-LINE CONNECTOR ピンソケット
PIC16F887 †
疑問 †
- configの説明はいったいどこにあるのか。
- ブラウンアウトリセットとは
- データコードプロテクションとは
- PORTAを直接書き換えてもだめで、RA0などをいじるとOKなのはなぜか。
- _XTAL_FREQを20MHzにしたらむしろ点滅周期が遅くなったのはなぜか。
- Applications/microchip/doc/chipsにconfigの説明が書いてある。
- Cプログラム上で利用可能なピンのディレクティブをどこで調べればいいのか(PORTA, RA0など)。
- simulatorがあるとの噂、どのように利用するのか。
- PWMのactive low, highとは何か。
- timer一つで複数のPWMの駆動ができるということか。
- timerがいろんな所に使われているが併用はできるのか。
Config †
デジタル入出力 †
#include <xc.h>
#pragma config BOREN = OFF //4VブラウンアウトリセットOFF
#pragma config CPD = OFF //データーコードプロテクションOFF
#pragma config FOSC = INTRC_CLKOUT //内部発振使用
#pragma config MCLRE = OFF //マスタークリアー機能OFF(RA5入出力として使用)
#pragma config WDTE = OFF //ウォッチドッグタイマーOFF
#pragma config CP = OFF //プログラムコードプロテクションOFF
#pragma config LVP = OFF //低電圧プログラム書き込みOFF
#pragma config PWRTE = ON //パワーアップタイマーON
#define _XTAL_FREQ 20000000 // delay用
int main(void) {
ANSEL = 0b00000000; // dddddddd
TRISA = 0b11110000; // iiiioooo
while (1) {
RA3 = RA5;
RA0 = 1;
__delay_ms(150);
RA0 = 0;
__delay_ms(150);
}
}
delay †
- __delay_us, __delay_msを利用する。
- 引数に変数を入力してはいけない
- 可変にしたい場合は、以下のようにする。
for(i=0;i<n;i++)__delay_ms(10);/*10msをn回繰り返し*/
TIMER0 †
- 4/システムクロック周波*プリスケーラ設定値 [s]周期で呼ばれる。