当サイトのコンテンツはご自身の判断と責任においてご利用ください。営利目的の利用は固くお断りします

更新2022/05/04

Cソースコード定義関数の説明

電子工作の知恵袋Cソースコードの定義関数一覧

PIC16F690汎用Cソースコードには、以下の関数が定義されています。
いずれもPIC16F690の内蔵機能を利用するための関数です。

(1)AD機能とポートの設定

void adinit(unsigned char anselh,unsigned char ansel)
戻り値:なし
指定パラメーター:使用チャネル指定用レジスタ anselh(範囲:0x00~0xff)、ansel(範囲:0x00~0xff)
デフォルト値:なし
使用例: adinit(0x00,0x04);
その他:なし
機能:
 ポートにA/D機能を割り当てたい場合にこの関数で使う前にポートを指定します。
 尚、A/D機能を使用しない場合でもデフォルト値で指定する必要があります。
 指定の仕方は、PICのANSELレジスタとANSELHレジスタの値を指定します。

(2)AD変換(8bit分解能)

unsigned char ad(unsigned char channel)
戻り値: 指定したANxを8ビットA/D変換した値 0x00~0xff
指定パラメータ:チャネル番号(ANxのx部分) channel(範囲:0~11)
デフォルト値:なし
使用例: temp=ad(0x02);
その他:
 基準電圧:電源電圧を使用
 変換時間:約34μS
機能:
 AN0~AN11のいずれか1つを指定してA/D変換を行います。
 事前にadinit()の実行が必要です。
 A/D変換終了通知には割り込みを使用せず、変換が終了するまで待機します。
 変換には電源電圧を基準電圧として使用しますので、安定化電源推奨です。

(3)タイマー初期化

void timerinit(void)
戻り値: なし
指定パラメータ:なし
デフォルト値:なし
使用例: timerinit();
その他:なし
機能:以下の通り
 タイマー1の初期化:1mS周期割り込み
 タイマー2の初期化:RC5からのPWM用設定
 この関数はプログラムの初期化の段階で必ず実行してください。

(4)PWMポート初期化

void pwmportinit(void)
戻り値: なし
指定パラメータ:なし
デフォルト値:なし
使用例: pwmportinit();
その他:なし
機能:
 RC5をPWM出力可能なように設定します。
 この関数実行以前のRC5ポートの入出力設定を上書きして出力側に強制変更します。
 実行と同時にRC5の出力はLになります。

(5)PWM開始

void pwmstart(void)
戻り値: なし
指定パラメータ:なし
デフォルト値:なし
使用例: pwmstart();
その他:なし
機能:
 実行で、内部のPWM用タイマー2が作動しはじめ、RC5からPWM波形が出力されます。
 pwmportinitを事前に実行する必要があります。

(6)PWM停止

void pwmstop(void)
戻り値: なし
指定パラメータ:なし
デフォルト値:なし
使用例: pwmstop();
その他:なし
機能:
 実行で、PWM用タイマーの作動を停止し、RC5のPWM出力がHまたはLのどちらかで停止します。
 停止時は、H・Lのどちらになるかは不定なので、電位を固定したい時は停止前にデューティを0%か100%に設定する必要があります。

(7)PWM周波数設定

void pwmsetfreq(unsigned char prescale,unsigned char pr2data)
戻り値: なし
指定パラメータ:PWM周波数設定用レジスタ prescale(範囲:0,1,2)、pr2data(範囲:0x01~0xfe)
デフォルト値:なし
使用例: pwmsetfreq(0x00,0xfe);
その他:なし
機能:
 RC5から出力するPWMの周波数を設定します。
 PWM周波数は設定直後より反映されます。
 PWMの周波数は以下の式で計算します。
 pr2dataを小さくすることで周波数を上げることができますが、pr2dataは分解能にも関係するため、小さくするとその分 分解能が悪くなります。
 (PWM周波数の設定式)
  PWM周波数=OSC/4/(pr2data+1)/(4^prescale)
   7843Hz/OSC=8MHz/PR2=0xfe/prescale=0
   1960Hz/OSC=8MHz/PR2=0xfe/prescale=1
    490Hz/OSC=8MHz/PR2=0xfe/prescale=2

(8)PWMデューティ設定

void pwmsetduty(unsigned char setduty)
戻り値: なし
指定パラメータ:オン期間値 setduty(範囲:0x00~0xff)
デフォルト値:なし
使用例: setduty(0x7f);
その他:なし
機能:
 RC5から出力するPWMのオンの期間を設定します。
 設定値とデューティ比の関係は以下の通りです。
  設定範囲:0<=setduty<=(PR2+1)
  (例)PR2=0xfeの場合 
     setduty=0x00で オンデューティ比   0%
     setduty=0xffで オンデューティ比 100%
     *0xffまで設定可能ですが、PR2+1を超えた設定は全て100%になる
     *PR2はPWM周波数設定関数pr2dataをいう

(9)一定時間待ち

void wait(unsigned char waittime)
戻り値: なし
指定パラメータ: 待機時間 waittime(範囲0x00~0xff)
デフォルト値:なし
使用例: wait(100);
その他:なし
機能:
 ソフトウエアを用いた簡易タイマーです。
 waittimex1mS分ウエイトします。
 尚、ソフトウエアタイマーで精度が悪いため、特に問題ない場合にのみ使用してください。
 特に割り込みが途中でかかると、タイマー時間がその分伸びますので注意が必要です。
 このタイマープログラムはHI-TECHのCコンパイラーで8MHzクロックに合わせて設定されています。
 他のコンパイラを使用する場合は内部定数の再調整が必要です。

(10)UARTの初期化

void usartinit(unsigned char br)
戻り値: なし
指定パラメータ: ボーレート br(範囲0x00~0xff)
デフォルト値:なし
使用例: usartinit(207);
その他:なし
機能:
 UASRT機能の初期化(使用前に実行すること)を行います。
 送受信パラメータは固定で、start1bit,data8bit,stop1bit,no parityとなります。
 ボーレートの設定値は以下の計算式で算出します。
   ボーレート:OSC/(4*(br+1))
  (例) br=207 :9600bps
      br=103 :19.1kbps
      br= 51 :38.2kbps
      br= 34 :57.6kbps
      br= 16 :115.2kbps
 受信割り込みは許可、送信割り込みは不許可の設定となります。

(11)UART1バイト受信

unsigned char rx1byte(void)
戻り値: 受信した1バイト値
指定パラメータ: なし
デフォルト値:なし
使用例: temp=rx1byte();
その他:なし
機能:
 受信バッファにデータがセットされるまで待機し、セットされたデータがあれば読み取り、そのデータ値を返し終了します。
 尚、データを読み取るまで待機するため、データが確実にあることがわかる割り込み中での使用を推奨します。

(12)UART1バイト送信

void tx1byte(unsigned char txdata)
戻り値: なし
指定パラメータ: 送信したいデータ1バイト値 txdata(範囲0x00~0xff)
デフォルト値:なし
使用例: tx1byte();
その他:なし
機能:
USARTの送信バッファにデータをセットし自動送信します。
もし、送信バッファが空いていない場合は、空くまで待機します。

(13)EEPROM1バイト読み込み

unsigned char eepromread(unsigned char ead)
戻り値: 指定アドレスのEEPROMの値 1バイト
指定パラメータ: 読み取りたいEEPROMのアドレス ead(範囲0x00~0xff)
デフォルト値:なし
使用例: eepromread(0x07);
その他:なし
機能:
内蔵EEPROMの先頭を0としたアドレスを指定し、そのアドレスで指定されたEEPROMの内容を読み取り返す。

(14)EEPROM1バイト書き込み

void eepromwrite(unsigned char ead,unsigned char edat)
戻り値: なし
指定パラメータ: 値を書き込みたいEEPROMのアドレス ead(範囲0x00~0xff) 書き込む値 1バイト edat(範囲0x00~0xff)
デフォルト値:なし
使用例: eepromwrite(0x07,0x55);
その他:なし
機能:以下の通り
内蔵EEPROMの先頭を0としたアドレスを指定し、そのアドレスで指定されたEEPROMに値を書き込む。
書き込みには数十mS必要。

(最新)

(中の人)


電子回路とファームウェア専門の元エンジニアが、初心者の頃の疑問や勉強・経験で知った「そうだったのか」を2009年から書いています。 ⇒続き

ページの先頭へ戻る
シェア
Tweet このエントリーをはてなブックマークに追加