発電実験:発電機励磁装置 | 元に戻る |
Ⅶ.プログラミング(準備) 2024/7/2 |
|
| |||||||
1.開発方法 2.プログラムの書き方 3.CONFIG 4.定数値/変数アドレス設定 5.リセットベクター 6.割込みベクター 7.初期化(プログラム内容) 8.メイン処理(プログラム内容) 9.サブルーチン(プログラム項目) 10.割り込みサブルーチン(プログラム項目) 11.テーブル |
|
本 文 |
1.開発方法
|
2.プログラムの書き方
|
3.CONFIG
|
4.定数値/変数アドレス設定 定数に数値を予め入れて置き、プログラム文中では、数値をそのまま記載しても目的が判り難いので、ここで定義した定数を記載する様にしている。 数値の意味はさまざまで、レジスターへ入れるデータ(各インターフェースの設定やメモリー(計算などで使用)のデータとしても使用)、メモリーのアドレスやBitなども表している。 以下に各インターフェースの設定に使用している物の一部を記載し、定義の方法を説明する。 ;定数 ;●CPUの各レジスターの初期値の定数 詳細はMPLABIDEの使い方のプログラミング 定数設定を参照 SET_OSCCON EQU B'11110000' ;8MHz×4 '11110000' SET_OPTION EQU B'00100001' ;(5)=0 ;入出力設定 SET_TRISA_PWMT EQU B'00110000' ;PWM使用時設定 出力=0 CCP5(4)の初期ロックで=1 SET_TRISA EQU B'00100000' ;出力=0 CCP5(4)は出力=0 SET_ANSELA EQU B'00100000' ;RA5(AN4) SET_WPUB EQU B'00000000' ; プルアップ設定 SET_TRISB EQU B'11111110' ; 1,2はロータリーエンコーダ SET_ANSELB EQU B'00000000' SET_IOCBP EQU B'00010000' ; 4は立上りで検出 SET_IOCBN EQU B'00000110' ; 1,2は立下りでフラグ SET_TRISC EQU B'00000000' ;A/D関係 SET_ADCON0 EQU B'00010001' ;6-2:AN4の使用 0:ADCイネーブルビット SET_ADCON1 EQU B'11100000' ;7:右詰め 6-4:A/DクロックFosc/64 2,1-0 基準電圧 ;タイマー関係 SET_TMR0 EQU 0x00 ;0xDA ;割込みサブルーチンで再使用するための定数 SET_T2CON EQU B'00000000' ;PMW用 リセット信号分周期 SET_PR2 EQU 0xFF ;PWM用 タイマーカウント比較値 SET_CCPTMRS1 EQU B'00000000' ;PWM用 CCP5= B'xxxxxx00' SET_CCP5CON EQU B'00111100' ;PWM用 プリスケラーほか設定 SET_CCPR5L EQU 0x80 ;PWM用 出力値デューティ時間 SET_T4CON EQU B'00001011' ;AVR用 割り込み分周期 SET_PR4 EQU D'125' ;AVR用 タイマーカウント比較値 (1)文法説明 最初の行で説明する。 SET_OSCCON EQU B'11110000' ;8MHz×4 '11110000' なお( )内が右側説明文の対応するプログラム定義文 定数名(SET_OSCCON)に、バイナリデータの11110000 (B'11110000')を、入れる(EQU ) データの概要はこのCPUのクロックを32MHz(8MHz×4 '11110000')で動作させると言うことコメント(;)にしている。 以下同様であるが、データの表し方を説明すると、B=binary(2進数)、D=Decimal(10進数)、0x・・=hexadecimal(16進数)、’ ’=アスキー文字(ASCII=American standard code for information interchange)脱線するが、7bitコードで0x00~0x1Fは制御0x20~0x7Eは印刷可能な文字として昔はテレタイプなどのにも使用されているコード。 (2) 各変数の概略説明 最終章の『Ⅷ.プログラム(ソースリスト)』定数値/変数アドレス設定を見ながら下記説明を見てほしい。 ちなみに、ページ数はPIC16F193Xデータシートの参照ページを表している。 SET_OSCCON EQU B'11110000' ;8MHz×4 '11110000' ;□ 内部クロックの周波数の選択をします。 ■OSCCON 108p ; OSCCON = SPLLEN*|IRCF(3:0)|-|SCS(1:0) [108p] ; SPLLEN=1 ソフトPLLイネーブルビット 0=4xPLLは無効 1=4xPLLは有効 ; 但しconfig2[128p]PLLEN=1(PLL使用)の時は4xPLL有効に固定される。 ; IRCF=1110 4ビット15種類のクロックを指定 今回は32MHz=8MHz×4なので、1110 ; SCSはシステムクロックを2ビット 3種類の選択が出来 config1[126p] FOSCで ; 設定したクロックを使用するので、00 となる 以上から OSCCON='1 1110 0 00' となる SET_OPTION EQU B'00100001' ;(5)=0 ;OPTION_REG L=[] ; (7)WPUEN:PLUP[0N](6)INTEDG:RB割込[立下](5)T0CS:Tm0[内部CK](4)T0SE:Tm0[RA4立上] ; (3)PSA:Tm0[割込へ影響](2-0)プリスケーラ レート 000=1:2 001=4,8,16,32,64,128 111=1:256 ;●2~7 9~10ピン RA SET_TRISA EQU B'00000000' ; □PORTA トライステート レジスタ ■TRISA 86P ; ビット 7-0 TRISA<7:0>: PORTA トライステート制御ビット ; 1 = PORTA ピンが入力として設定されている ( トライステート) ; 0 = PORTA ピンが出力として設定されている SET_ANSELA EQU B'00000000' ; □PORTA アナログ選択レジスタ ■ANSELA 86P ; ビット 7-6 未実装:「0」として読み出し ; ビット 5-0 ANSA<5:0>: RA<5:0> の各ピンの機能をアナログまたはデジタルのいずれかに選択します。 ; 0 = デジタル I/O。ピンはポートまたはデジタル特殊機能に割り当てられる ; 1 = アナログ入力。ピンはアナログ入力として割り当てられる(1) デジタル入力バッファは無効 ;●11~18ピン RC SET_TRISC EQU B'00000000' ; □RC0の割り込み設定 ; □PORTC トライステート レジスタ ■TRISC 94P ; ビット 7-0 TRISC<7:0>: PORTC トライステート制御ビット ; 1 = PORTC ピンが入力として設定されている ( トライステート) ; 0 = PORTC ピンが出力として設定されている ;●21~28ピン RB SET_WPUB EQU B'00000000' ; 弱プルアップ PORTB レジスタ ■WPUB 90P ; ビット 7-0 WPUB<7:0>: 弱プルアップ レジスタ ビット ; 1 = プルアップ有効 ; 0 = プルアップ無効 SET_TRISB EQU B'11000110' ; □PORTB トライステート レジスタ ■TRISB 90P ; ビット 7-0 TRISB<7:0>: PORTB トライステート制御ビット ; 1 = PORTB ピンが入力として設定されている ( トライステート) ; 0 = PORTB ピンが出力として設定されている SET_ANSELB EQU B'00000000' ; □PORTB アナログ選択レジスタ ■ANSELB 90P ; ビット 7-6 未実装:「0」として読み出し ; ビット 5-0 ANSB<5:0>: RB<5:0> の各ピンの機能をアナログまたはデジタルのいずれかに選択します。 ; 0 = デジタル I/O。ピンはポートまたはデジタル特殊機能に割り当てられる ; 1 = アナログ入力。ピンはアナログ入力として割り当てられる(1) デジタル入力バッファは無効 SET_IOCBP EQU B'00000000' ; □RBの割り込み設定 ■IOCBP 104P ;立ち上がりエッジの状態変化割り込みレジスタ ; 1=立上がりエッジの状態変化割り込みが有効。 ; エッジ検出時に関連するステータス ビットおよび割り込みフラグがセットされる ; 0=状態変化割り込みは無効 SET_IOCBN EQU B'00000110' ;□RBの割り込み設定 ■IOCBN 104P ; 立ち下がりエッジの状態変化割り込みレジスタ ; 1=立下がりエッジの状態変化割り込みが有効。 ; エッジ検出時に関連するステータス ビットおよび割り込みフラグがセットされる ; 0=状態変化割り込みは無効 ●フラグ ;□RBの割り込みフラグ ■IOCBNF 104P ;状態変化割り込みフラグ レジスタ ; 1=関連ピンで有効な変更が検出された。 ; IOCBPx = 1 のとき RBx で立ち上がりエッジが検出された場合、または ; IOCBNx = 1 のとき RBx で立ち下がりエッジが検出された場合にセットされる ; 0= 変更がない、または検出された有効な変更をユーザーがクリアした ;●その他設定 SET_TMR0 EQU 0x00 ;0xDA ;割込みサブルーチンで再使用するための定数 ;タイマー0の設定 SET_ADCON0 EQU B'00000000' ;アナログの設定値は初期値です。 ;アナログ設定 ; A/D 制御レジスタ0 ■ADCON0: 137P ; ビット 7 未実装:「0」として読み出し ; ビット 6-2 CHS<4:0>: アナログ チャネル選択ビット ; 00000=AN0 00001=AN1 00010=AN2 00011=AN3 00100=AN4 00101=AN5 00110=AN6 ; 00111=AN7 01000=AN8 01001=AN9 01010=AN10 01011=AN11 01100=AN12 01101=AN13 ; 01110=予約 11100=予約 11101=バンドギャップ電圧を使用する温度リファレンス ; 11110=DAC 出力 ( 別名: CVREF 出力) 11111=固定電圧参照 (FVR) バッファ 1 出力 ; ビット 1 GO/DONE: A/D 変換のステータス ビット ; 1 = A/D 変換サイクルが進行中。このビットをセットすると、A/D 変換サイクルが開始します。 ; このビットは、A/D 変換が完了するとハードウェアによって自動的にクリアされます。 ; 0 = A/D 変換完了 ( 進行中ではない) ; ビット 0 ADON: ADC イネーブル ビット ; 1 = ADC が有効 ; 0 = ADC は無効となり、動作電流を消費しない SET_ADCON1 EQU B'00000000' ; A/D 制御レジスタ1 ■ADCON1: 138P ; ビット 7 ADFM: A/D 変換結果フォーマット選択ビット ; 1 = 右詰め。変換結果がロードされる場合、ADRESH の 6 ビット MSB は「0」にセットされる ; 0 = 左詰め。変換結果がロードされる場合、ADRESL の 6 ビット LSB は「0」にセットされる ; ビット 6-4 ADCS<2:0>: A/D 変換クロック選択ビット ; 000=FOSC/2 001=FOSC/8 010=FOSC/32 011=FRC(専用のRCオシレータから供給されるクロック) ; 100=FOSC/4 101=FOSC/16 110=FOSC/64 111=FRC(専用のRCオシレータから供給されるクロック) ; ビット 3 未実装:「0」として読み出し ; ビット 2 ADNREF: A/D ネガティブ電圧リファレンスのコンフィギュレーション ビット ; 0 = VREF- は AVSS へ接続される ; 1 = VREF- は外部の VREF- へ接続される ; ビット 1-0 ADPREF<1:0>: A/D ポジティブ電圧リファレンスのコンフィギュレーション ビット ; 00 = VREF+ は AVDD へ接続される ; 01 = 予約 ; 10 = VREF+ は外部の VREF+ へ接続される ; 11 = VREF+ は内部の固定電圧リファレンスへ接続される SET_INTCON EQU B'10001000' ;割り込み制御レジスタ ■INTCON: 73P ; ビット7 0=禁止 1=許可 GIE: グローバル割り込み(すべてのマスクされていない割り込み)イネーブル ビット ; ビット6 0=禁止 1=許可 PEIE: 周辺装置割り込み(すべてのマスクされていない周辺装置割り込み)イネーブル ビット ; ビット5 0=禁止 1=許可 TMR0IE: Timer0 オーバーフロー割り込みイネーブル ビット ; ビット4 0=禁止 1=許可 INTE: RB0/INT 外部割り込みイネーブル ビット ; ビット3 0=禁止 1=許可 IOCIE: 状態変化イネーブル ビット(1) ; ===== 以下フラグにつき 設定しない 1でソフトウェアでクリアが必要 ===== ; ビット2 0=していない 1=発生した TMR0IF: Timer0 (TMR0 レジスタが)オーバーフロー割り込みフラグ ビット(2) ; 注1: Timer0 がロールオーバ すると TMR0IF ビットがセットされます。 ; Timer0 はリセット時には変化しないため、TMR0IF ビットをクリアする前に初期化が必要です。 ; ビット1 0=していない 1=発生した INTF: INT 外部割り込みフラグ ビット ; ビット0 0=変化しない 1=が変化した IOCIF:状態(少なくとも1つの状態が)変化割込みピンのステート変化割り込みフラグビット SET_PIE1 EQU B'00000000' ;周辺装置割り込みイネーブル レジスタ 1 ■PIE1: 74P ; ビット7 0=無効 1=有効 TMR1GIE: Timer1 ゲート割り込み(アクイジション完了)イネーブル ビット ; ビット6 0=禁止 1=許可 ADIE: A/D コンバータ (ADC) 割り込みイネーブル ビット ; ビット5 0=禁止 1=許可 RCIE: USART 受信割り込みイネーブル ビット ; ビット4 0=禁止 1=許可 TXIE: USART 送信割り込みイネーブル ビット ; ビット3 0=禁止 1=許可 SSPIE: 同期シリアル ポート (SSP) 割り込みイネーブル ビット ; ビット2 0=禁止 1=許可 CCP1IE: CCP1 割り込みイネーブル ビット ; ビット1 0=禁止 1=許可 TMR2IE: TMR2/PR2 一致割り込みイネーブル ビット ; ビット0 0=禁止 1=許可 TMR1IE: Timer1 オーバーフロー割り込みイネーブル ビット SET_PIE2 EQU B'00000000' ;周辺装置割り込みイネーブル レジスタ 2 ■PIE2: 75P ; ビット7 0=禁止 1=許可 OSFIE: オシレータ エラー割り込みイネーブル ビット ; ビット6 0=禁止 1=許可 C2IE: コンパレータ C2 割り込みイネーブル ビット ; ビット5 0=禁止 1=許可 C1IE: コンパレータ C1 割り込みイネーブル ビット ; ビット4 0=禁止 1=許可 EEIE: EEPROM 書き込み完了割り込みイネーブル ビット ; ビット3 0=禁止 1=許可 BCLIE: MSSP バス衝突割り込みイネーブル ビット ; ビット2 0=禁止 1=許可 LCDIE: LCD モジュール割り込みイネーブル ビット ; ビット1 未実装:「0」として読み出し ; ビット0 0=禁止 1=許可 CCP2IE: CCP2 割り込みイネーブル ビット SET_PIE3 EQU B'00000000' ;周辺装置割り込みイネーブル レジスタ 3 ■PIE3: 76P ; ビット7 未実装:「0」として読み出し ; ビット6 0=禁止 1=許可 CCP5IE: CCP5 割り込みイネーブル ビット ; ビット5 0=禁止 1=許可 CCP4IE: CCP4 割り込みイネーブル ビット ; ビット4 0=禁止 1=許可 CCP3IE: CCP3 割り込みイネーブル ビット ; ビット3 0=禁止 1=許可 TMR6IE: TMR6/PR6 一致割り込みイネーブル ビット ; ビット2 未実装:「0」として読み出し ; ビット1 0=禁止 1=許可 TMR4IE: TMR4/PR4 一致割り込みイネーブル ビット ; ビット0 未実装:「0」として読み出し ;● 割込みフラグ関係 ;周辺装置割り込み要求レジスタ 1 ■PIR1: 77P ;ビット7 0=アクティブ 1=非アクティブ TMR1GIF: Timer1 ゲート割り込みフラグ ビット ;ビット6 0=未完・開始 1=完了 ADIF: A/D コンバータ割り込み(変換)フラグ ビット ( ソフトウェアでクリアが必要) ;ビット5 0=フルではない 1=フル RCIF: USART 受信割り込み(受信バッファ)フラグ ビット(RCREG の読み出しでクリア) ;ビット4 0=フル 1=空 TXIF: USART 送信割り込み(送信バッファ)フラグ ビット (TXREG への書き込みでクリア) ;ビット3 0=完了を待機 1=完了 SSPIF: 同期シリアルポート (SSP) 割り込み(送信/ 受信が)フラグ ビット ( ソフトウェアでクリアが必要) ;ビット2 CCP1IF: CCP1 割り込み(TMR1 レジスタの)フラグ ビット ( ソフトウェアでクリアが必要) ; キャプチャ モード:キャプチャが発生 0=していない 1=した ; コンペア モード: 比較一致が生じ 0=ていない 1=した ; PWM モード: このモードでは使用しない ;ビット1 0=していない、1=した TMR2IF: Timer2/PR2 割り込み(の一致が生じ)フラグ ビット (ソフトウェアでクリアが必要) ;ビット0 0=していない、1=した TMR1IF: Timer1 オーバーフロー割り込み(レジスタがオーバーフローし)フラグビット(ソフトウェアでクリアが必要) ;周辺装置割り込み要求レジスタ 2 ■PIR2: 78P ;ビット7 OSFIF: オシレータ エラー割り込みフラグ( ソフトウェアでクリアが必要) ; 0=エラーない 1 = システム オシレータでエラーが発生し、クロック入力が INTOSC に切り替わった ;ビット6 0=していない、1=した C2IF: コンパレータC2割り込み(有効なエッジが検知され)フラグ (ソフトウェアでクリアが必要) ;ビット5 0=していない、1=した C1IF: コンパレータC1割り込み(有効なエッジが検知され)フラグ (ソフトウェアでクリアが必要) ;ビット4 0=未完・開始 1=完了 EEIF: EEPROM書き込み完了割り込み(書き込み動作が)フラグビット(ソフトウェアでクリアが必要) ;ビット3 0=していない 1=した BCLIF: MSSP バス衝突割り込み(検知され)フラグ ビット (ソフトウェアでクリアが必要) ;ビット2 0=していない 1=した LCDIF: LCDモジュール割り込み(フレーム表示を完了し)フラグビット(ソフトウェアでクリアが必要) ;ビット1 未実装:「0」として読み出し ;ビット0 CCP2IF: CCP2 割り込み( TMR1 レジスタ)フラグ ビット (ソフトウェアでクリアが必要) ; キャプチャ モード(キャプチャが発生し) 0=ていない 1=た ; コンペア モード(比較一致が生じ) 0=ていない 1=た ; PWM モード このモードでは使用しない ;周辺装置割り込み要求レジスタ 3 ■PIR3: 79P ;ビット7 未実装:「0」として読み出し ;ビット6 CCP5IF: CCP5 割り込み(TMR1レジスタの)フラグ ビット (ソフトウェアでクリアが必要) ; キャプチャ モード(キャプチャが発生し) 0=ていない 1=た ; コンペア モード(比較一致が生じ) 0=ていない 1=た ; PWM モード このモードでは使用しない ;ビット5 CCP4IF: CCP4 割り込み(TMR1 レジスタの)フラグ ビット (ソフトウェアでクリアが必要) ; キャプチャ モード(キャプチャが発生し) 0=ていない 1=た ; コンペア モード(比較一致が生じ) 0=ていない 1=た ; PWM モード このモードでは使用しない ;ビット4 CCP3IF: CCP4 割り込み(TMR1 レジスタの)フラグ ビット (ソフトウェアでクリアが必要) ; キャプチャ モード(キャプチャが発生し) 0=ていない 1=た ; コンペア モード(比較一致が生じ) 0=ていない 1=た ; PWM モード このモードでは使用しない ;ビット3 0=ていない 1=した TMR6IF:TMR6/PR6一致割り込み(ポストスケールの一致が生じ)フラグビット(ソフトウェアでクリアが必要) ;ビット2 未実装:「0」として読み出し ;ビット1 0=ていない 1=した TMR4IF:TMR4/PR4 一致割り込み(ポストスケールの一致が生じ)フラグ ビット(ソフトウェアでクリアが必要) ;ビット0 未実装:「0」として読み出し その他、メモリーのアドレス、変数は後のプログラム説明で紹介する。 [目次に戻る] |
5.リセットベクター リセットベクターのプログラムは以下です。 (注:プログラム左側のNoは説明の為に記載しています。実際のプログラムではNoは付いていません。) ;############################################ ; リセットベクター ;############################################ 1 ORG 00h ;RESETで0番地から始まる 2 GOTO INIT ;0番地はGOTOでMAIN処理へジャンプ (1)説明 電源を入れ、最初に実行される命令を00hに書き込みます。 今回の場合は、GOTO INITなので、初期化のプログラムへ行く事になる。 [目次に戻る] |
6.割込みベクター 割込みは沢山あり、必要な物だけを定義し、その割込みによりどの様な処理をするかここに記載する。 注意しなければならないのは、この割込み処理で、その他の割込みがかかる(特にタイマー、自動処理の要求)前に処理を終わる必要が有るので、自分の記載した割込みプログラムの処理時間を知っておく必要がある。 (1)説明 割込みはプログラムのコメントに記載の通り、 a. 『BCF INTCON,GIE 』.割込み処理中はその他の割込みを停止する。 b. I/O RBに接続されているボタンとロータリーエンコーダの処理I_RBプログラムへ c. タイマー6:インデシャル動作信号でインデシャル応答試験でこの割込みまで、オシロなどへ信号を出すためのタイマーで1回の割込みで16(ms)の方形波が出る様になっている。 d. タイマー4:AVRの計算周期として使用している。 e. 割込みを許可してメイン処理へ戻る。 『RETFIE 』 [目次に戻る] |
7.初期化(プログラム内容) 初期化のプログラム概要は下記の通りで、全てを見る場合は、ソースリストを参照の事。 初期化では各インターフェースの初期化(定数値/変数アドレス設定で設定している定数を使用して初期化)している。 (1) ラベルについて 最初に記載の『INIT』をラベルと言い、『リセットベクター』で説明した様に、電源を入れた時に最初にこのラベル以下から命令を実行します。 (2) 命令文の概略説明 ラベルの次の『BANK4』は『CONFIG』で説明した マクロBANK4を実行(MOVLB 4)します。 『2.CPUの(3)メモリーマップ』のアドレス値に対しBANK4のレジスター群を読書きする事が出来ます。 インターフェースRBの設定を以下に記載している。RBは入力として、ボタン RB4、ロータリーエンコーダ RB1,2、などは外付けにプルアップ抵抗10kΩが取り付けられている。 他に未使用ですが、LCDの処理完了フラグ用 RB3など入力として使用している。 初期化プログラムでは、 『MOVLW SET_WPUB』は内部プルアップの抵抗(半導体)をインターフェースRBのどれに入れるかのデータをCPUのWレジスターに一旦入れます。今回の場合は、全て使用していないので、データは0です。 『MOVWF WPUB』はWレジスターの内容をWPUBRB(プルアップ使用)のレジスターに入力しRBのプルアップの設定を実行しています。 (3) 初期化の概要 a. 定数のクリアー CLRF ○・・・ b. 各定数に値を設定 c. LCDの初期化プログラムへ CALL LCD_INT ;LCDの初期化 (Ⅴ.プログラミング 1.画面と設定方法(LCD) 参照) d. PWMレジスターの初期化 (フラグがセットされるまで、待つ) PWM_ZYUNBITYU BTFSS PIR1,TMR2IF GOTO PWM_ZYUNBITYU ・ ・ LOOP1 BTFSS PORTA,4 ;CCP5の出力がでるまで待つ GOTO LOOP1 詳細はⅤ.プログラミング 4.PWM回路 参照 e. 割込みを開始する。 [目次に戻る] |
8.メイン処理(プログラム内容) ここで処理しているのは、LCD表示のサブルーチンを呼び出しているだけ。 このプログラムを実行中に各割込み処理が処理される。 割込み処理が処理しきれなくなると、このLCD表示への処理が出来なくなるため、画面のカーソル移動・点滅などに不具合でが出てくる。 END_TEST CALL LCD_CRT ; GOTO END_TEST LCDの詳細は(Ⅴ.プログラミング 1.画面と設定方法(LCD) 参照) [目次に戻る] |
9.サブルーチン(プログラム項目) ここでは、各処理のラベル名と処理の概要を記載し、内容については、『Ⅴ.プログラミング』の各処理内容で説明する。 (1) LCD_INT a. LCD表示用のメモリーバッファー050~06Fに、テーブルLCDD_INT1とLCDD_INT2のデータを転送する。 b. 次にLCDの初期化(4BITモードにする)をする。 この中で、『タイマー』や『LCD_CM』『LCD_CM4』(8bit,4bitコマンド送信と信号線『RW』・『RS』シーケンス)のサブルーチンを多くCALL(サブルーチン呼出し)している。 c. 次に説明する『LCD_CRT』をCALLする。 (2) LCD_CRT LCD表示用のメモリーバッファーの内容をLCDへデータ転送します。 (3) タイマー LCDの初期化時に使用するタイマーでTM1,TM2の合計16bitのタイマーを使用して各時間を経過すれば、ループから抜け出し、元(CALLした所)に戻る。 [目次に戻る] |
10.割り込みサブルーチン(プログラム項目) ここでは、各処理のラベル名と処理の概要を記載し、内容については、『Ⅴ.プログラミング』の各処理内容で説明する。 (1) I_TMR4 A/D変換の指示をして、TM4にAVRの処理周期(2ms)を設定する。 つまり、TM4のタイマー周期で割込みが有ると、割込みをロックして、AVR関係(A/D変換指示、A/Dの値をとってPID処理(OPXをコール)してPWMの値を出すまで)の処理を完了後、この処理を実施して割込みを開始する事になる。 (2) I_TMR6 TM6の割込み処理により下記実行をする。 ポートAの2の信号をクリアーし、割込みを許可する。 (3) I_AD 今は使用していないが、A/D変換処理が完了したら割込みをかける処理です。 もし、AVRの処理がA/Dの変換処理より早くなった場合は使用する必要が出てくる。 将来参考用として残している。 (4) OPX AVR関係の処理の中心でPIDの処理を実施している。 (5) SET_PWM PWMに数値を入れる部分。 (6) I_RB ボタンやロータリーエンコーダを操作した時の処理をここで行っている。 [目次に戻る] |
11.テーブル LCDに関係するデータが記録されている。 各ラベル毎に用途を説明する。 (1) LCDD_INT1 LCD表示データ1 (2) LCDD_INT2 LCD表示データ2 (3) LCD_Mno CSNOからLCDのメモリーに記載するアドレスを取得するためのデータ (4) MNo_AD CSNOから設定するメモリーアドレスを取得する。 (5) MNo_V CSNOから数の最大数を取得する。 [目次に戻る] |