久しぶりにPIC16F1827を使ってMCCでAD変換をやってみた。
「PIC16F1827でAD変換して値に応じてLED点灯」
MCCの吐くAD変換の結果を返す部分は、
1 |
return ((adc_result_t)((ADRESH << 8) + ADRESL)); |
となってる。
1 |
ADRESH << 8 |
はゼロになっちゃうんじゃないの?
と思った。
そんなわけないのでカラクリを考えてみた。
後々16ビットに変換(キャストというらしい。)されるんだけど、ビットシフトの際に先に16ビットに変換されるお約束らしい。
あと、キャストと言えば(型)というのを頭に書けばいいらしく、ここではそれが(adc_result_t)となっている。
adc_result_tって何?
と思ってadc.hを見てみると、
1 |
typedef uint16_t adc_result_t; |
と書いてあった。
このtypedefというのは、既存のデータ型に新しい名前をつけるものらしい。
なので、adc_result_tはuint16_t型のことってわけ。
ちなみに「2バイトの符号なし整数」なんだって。
「MPLAB XC8 C Compiler User’s Guide」で斜めに検索してみたけどuint16_tってのはヒットしなかった。
こういう表は載ってた。