トピック関連記事
48時間以内の記事は で表示されます
interrupt関数
みなさんこんばんは。
F1827で、以下のプログラム(もとは、猛牛ロックさん作成)ですが、大変重宝しています。
F1827でコンパイルするとエラーが出ます。
IDXは、interrupt関数に!が出ています。
原因を分かったらご教授願います。
/*間欠*/
// PIC16F1827 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define KanketuTime 2
#define DousaTime 1
#define On 0
#define Off 1
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 4000000
int Start;
// プロトタイプ宣言
void InitInterTimer0 (void);
void WaitTime (int cnt);
// メイン関数
void main (void){
OSCCON = 0b01101010;//内蔵発振器 4MHz使用に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0xFF;
// 入出力設定
TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力
TRISB = 0b00000000;//RB0は入力
//初期設定
RA2=Off;//MACH
RA6=Off;
Start=0;
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
int Buzer=0;//
// 永久ループ
while(1){
if(Start==1){//スタートフラグが1なら動作開始
RA2=On;
Buzer=On;
Second(DousaTime);
//RA2=Off;
//Second(KanketuTime);
}
if(Start==0){
if(Buzer==On){
Second(KanketuTime);
RA2=Off;
Buzer=Off;
}
}
}
}
static void interrupt isr()
{//TMR0の割り込み処理(割り込みサブルーチン)
if(INTCONbits.TMR0IF==1){//割り込みがあったら
TMR0 =0 ; // タイマー0の初期化
if(RA6==0){//MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする
if(Start==0){
Start=1;
}
}
if(RA6==1){//MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして
if(Start==1){
Start=0;
//RA2=Off;//機器の動作を強制的に止める。
}
}
INTCONbits.TMR0IF=0;
TMR0=0;
}
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{//割り込み設定
OPTION_REG=0b000000000;//プリスケラ? 2 5ビット=0 WDTは使わない
TMR0=0; //TMR0カウンターを0に
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
// 待ち時間関数}
void Second(int sec){
while(sec >0){
sec--;
__delay_ms(10);
}
}
F1827で、以下のプログラム(もとは、猛牛ロックさん作成)ですが、大変重宝しています。
F1827でコンパイルするとエラーが出ます。
IDXは、interrupt関数に!が出ています。
原因を分かったらご教授願います。
/*間欠*/
// PIC16F1827 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define KanketuTime 2
#define DousaTime 1
#define On 0
#define Off 1
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 4000000
int Start;
// プロトタイプ宣言
void InitInterTimer0 (void);
void WaitTime (int cnt);
// メイン関数
void main (void){
OSCCON = 0b01101010;//内蔵発振器 4MHz使用に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0xFF;
// 入出力設定
TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力
TRISB = 0b00000000;//RB0は入力
//初期設定
RA2=Off;//MACH
RA6=Off;
Start=0;
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
int Buzer=0;//
// 永久ループ
while(1){
if(Start==1){//スタートフラグが1なら動作開始
RA2=On;
Buzer=On;
Second(DousaTime);
//RA2=Off;
//Second(KanketuTime);
}
if(Start==0){
if(Buzer==On){
Second(KanketuTime);
RA2=Off;
Buzer=Off;
}
}
}
}
static void interrupt isr()
{//TMR0の割り込み処理(割り込みサブルーチン)
if(INTCONbits.TMR0IF==1){//割り込みがあったら
TMR0 =0 ; // タイマー0の初期化
if(RA6==0){//MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする
if(Start==0){
Start=1;
}
}
if(RA6==1){//MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして
if(Start==1){
Start=0;
//RA2=Off;//機器の動作を強制的に止める。
}
}
INTCONbits.TMR0IF=0;
TMR0=0;
}
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{//割り込み設定
OPTION_REG=0b000000000;//プリスケラ? 2 5ビット=0 WDTは使わない
TMR0=0; //TMR0カウンターを0に
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
// 待ち時間関数}
void Second(int sec){
while(sec >0){
sec--;
__delay_ms(10);
}
}
Re: interrupt関数
> !が出ています。
元のプログラムと見比べてみてください。
何が変わっているのか。
場所は「!」が付いているので判っているんですよね?
更にコンパイルすればエラーメッセージが出ると思います。
元のプログラムと見比べてみてください。
何が変わっているのか。
場所は「!」が付いているので判っているんですよね?
更にコンパイルすればエラーメッセージが出ると思います。
猛牛ロック 2018/11/27(Tue) 12:42 No.1250
Re: interrupt関数
猛牛ロックさんありがとうございます。
自分なりに、データシートを見たりして、プログラむ見直しをしたりして、
現在は以下の通りですが、
エラーの表示は、
interrupt関数に「!」の表示はそのままです。
でも何度見ても、エラーには思えないプログラム内容です。
エラー原因をわかりましたら、教えてください。
宜しくお願いします。
エラー表示も添えておきます。
なお、グーグル翻訳では、翻訳しきれませんでした。
エラー表示内容
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
make -f nbproject/Makefile-default.mk dist/default/production/LESSON_C.X.production.hex
make[2]: Entering directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
"C:\Program Files (x86)\Microchip\xc8\v2.00\bin\xc8-cc.exe" -mcpu=16F1827 -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/main.p1 main.c
main.c:71:6: error: variable has incomplete type 'void'
void interrupt isr(){//TMR0<82><U+030A><84><82><U+835E><82><U+074F><88><97><9D>
^
main.c:71:15: error: expected ';' after top level declarator
void interrupt isr(){//TMR0<82><U+030A><84><82><U+835E><82><U+074F><88><97><9D>
^
;
2 errors generated.
make[2]: *** [build/default/production/main.p1] Error 1
(908) exit status = 1
nbproject/Makefile-default.mk:106: recipe for target 'build/default/production/main.p1' failed
make[2]: Leaving directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
nbproject/Makefile-default.mk:90: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 1s)
//*****************************
//* 間欠タイマー
//* 16F627A
//* XC8 V1.35
//* No481
//* RA6←MACHからの入力想定
//* RA2←制御機器へ
//*****************************
#include <xc.h>
#define _XTAL_FREQ 4000000 //delay用宣言
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define KanketuTime 2
#define DousaTime 1
#define On 0
#define Off 1
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 4000000
int Start;
//関数宣言
void Second(int sec);
// プロトタイプ宣言
void InitInterTimer0 (void);
// メイン関数
void main (void){
OSCCON = 0b01101010;//内蔵発振器 4MHz使用に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0xFF;
// 入出力設定
TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力
TRISB = 0b00000000;//RB0は入力
//初期設定
RA2=Off;//MACH
RA6=Off;
Start=0;
int Buzer=0;//
void InitInterTimer0 (void);
GIE=1;//全体割り込み許可
// 永久ループ
while(1){
if(Start==1){//スタートフラグが1なら動作開始
RA2=On;
Buzer=On;
Second(DousaTime);
//RA2=Off;
//Second(KanketuTime);
}
if(Start==0){
if(Buzer==On){
Second(KanketuTime);
RA2=Off;
Buzer=Off;
}
}
TMR0=0;
TMR0IF=0;
}
}
void interrupt isr(){//TMR0の割り込み処理
if(TMR0IF==1){//割り込みがあったら
if(RA6==0){//MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする
if(Start==0){
Start=1;
}
}
if(RA6==1){//MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして
if(Start==1){
Start=0;
//RA2=Off;//機器の動作を強制的に止める。
}
}
TMR0=0;
TMR0IF=0;
}
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{
//割り込み設定
OPTION_REG=0b000000000;//プリスケラ? 2 5ビット=0 WDTは使わない
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
// 待ち時間関数}
void Second(int sec){
while(sec >0){
sec--;
__delay_ms(10);
}
}
自分なりに、データシートを見たりして、プログラむ見直しをしたりして、
現在は以下の通りですが、
エラーの表示は、
interrupt関数に「!」の表示はそのままです。
でも何度見ても、エラーには思えないプログラム内容です。
エラー原因をわかりましたら、教えてください。
宜しくお願いします。
エラー表示も添えておきます。
なお、グーグル翻訳では、翻訳しきれませんでした。
エラー表示内容
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
make -f nbproject/Makefile-default.mk dist/default/production/LESSON_C.X.production.hex
make[2]: Entering directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
"C:\Program Files (x86)\Microchip\xc8\v2.00\bin\xc8-cc.exe" -mcpu=16F1827 -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/main.p1 main.c
main.c:71:6: error: variable has incomplete type 'void'
void interrupt isr(){//TMR0<82><U+030A><84><82><U+835E><82><U+074F><88><97><9D>
^
main.c:71:15: error: expected ';' after top level declarator
void interrupt isr(){//TMR0<82><U+030A><84><82><U+835E><82><U+074F><88><97><9D>
^
;
2 errors generated.
make[2]: *** [build/default/production/main.p1] Error 1
(908) exit status = 1
nbproject/Makefile-default.mk:106: recipe for target 'build/default/production/main.p1' failed
make[2]: Leaving directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
nbproject/Makefile-default.mk:90: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/TOSHI/MPLABXProjects/LESSON_C.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 1s)
//*****************************
//* 間欠タイマー
//* 16F627A
//* XC8 V1.35
//* No481
//* RA6←MACHからの入力想定
//* RA2←制御機器へ
//*****************************
#include <xc.h>
#define _XTAL_FREQ 4000000 //delay用宣言
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define KanketuTime 2
#define DousaTime 1
#define On 0
#define Off 1
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 4000000
int Start;
//関数宣言
void Second(int sec);
// プロトタイプ宣言
void InitInterTimer0 (void);
// メイン関数
void main (void){
OSCCON = 0b01101010;//内蔵発振器 4MHz使用に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0xFF;
// 入出力設定
TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力
TRISB = 0b00000000;//RB0は入力
//初期設定
RA2=Off;//MACH
RA6=Off;
Start=0;
int Buzer=0;//
void InitInterTimer0 (void);
GIE=1;//全体割り込み許可
// 永久ループ
while(1){
if(Start==1){//スタートフラグが1なら動作開始
RA2=On;
Buzer=On;
Second(DousaTime);
//RA2=Off;
//Second(KanketuTime);
}
if(Start==0){
if(Buzer==On){
Second(KanketuTime);
RA2=Off;
Buzer=Off;
}
}
TMR0=0;
TMR0IF=0;
}
}
void interrupt isr(){//TMR0の割り込み処理
if(TMR0IF==1){//割り込みがあったら
if(RA6==0){//MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする
if(Start==0){
Start=1;
}
}
if(RA6==1){//MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして
if(Start==1){
Start=0;
//RA2=Off;//機器の動作を強制的に止める。
}
}
TMR0=0;
TMR0IF=0;
}
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{
//割り込み設定
OPTION_REG=0b000000000;//プリスケラ? 2 5ビット=0 WDTは使わない
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
// 待ち時間関数}
void Second(int sec){
while(sec >0){
sec--;
__delay_ms(10);
}
}
Re: interrupt関数
TRさん,猛牛ロックさん,こんばんは。
ちょっとご無沙汰してました。
TRさん,自分で試してないので,?ですが,
多分,プロトタイプの宣言ををしてないからかなと推測します。
static void interrupt isr()
の関数がプロトタイプの宣言をしてなくて,
main関数より後にでてくるからだと思います。
多分コンパイラーは,プログラムの先頭から解釈していきますが,
main関数のなかで,プロトタイプの宣言をしてない関数に出会う,
あるいは,main関数より前に書いてない関数に出会うと,
関数の参照ができなくて,エラーがでます。
プロトタイプの宣言,面倒なので,サブ関数をメインの前に,
記述するといいかもです。
確か,私の流儀では,そうしてました。
ちょっとご無沙汰してました。
TRさん,自分で試してないので,?ですが,
多分,プロトタイプの宣言ををしてないからかなと推測します。
static void interrupt isr()
の関数がプロトタイプの宣言をしてなくて,
main関数より後にでてくるからだと思います。
多分コンパイラーは,プログラムの先頭から解釈していきますが,
main関数のなかで,プロトタイプの宣言をしてない関数に出会う,
あるいは,main関数より前に書いてない関数に出会うと,
関数の参照ができなくて,エラーがでます。
プロトタイプの宣言,面倒なので,サブ関数をメインの前に,
記述するといいかもです。
確か,私の流儀では,そうしてました。
mabo 2018/11/28(Wed) 00:15 No.1252
Re: interrupt関数
No.1249は私の環境ではその部分にはエラーは出ません。
No.1251はMABOさんの言う通り、関数宣言でしょう。
但し、チラッと見ただけですけど、1827用のプログラムになっていないようですし、
内容的にも劣化しているように思います。
No.1251はMABOさんの言う通り、関数宣言でしょう。
但し、チラッと見ただけですけど、1827用のプログラムになっていないようですし、
内容的にも劣化しているように思います。
猛牛ロック 2018/11/28(Wed) 04:22 No.1253
Re: interrupt関数
みなさんこんにちは。
maboさんへ
>プロトタイプの宣言,面倒なので,サブ関数をメインの前に,
記述するといいかもです。
やってみましたが、同じエラーが出ました。
猛牛ロックさんへ
>No.1249は私の環境ではその部分にはエラーは出ません。
そうでしたか〜。
と思って、
IDXにおいて、PICをF627Aに選択して、ビルトしましたが
同じエラーが出ました。
もう、自分レベルにはどうしようもありません。
AM11:51 追記
猛牛ロックさんの 環境 という話から、やむを得ず、
MPLAB のバージョンを変更したら、コンパイルできました。
IDXが3.36
コンパイラが1.42です。
自分には、こんな方法しか思いつきませんでした(泣く
でも、皆さんのおかげで、猛牛ロックさんが考えたプログラムを
自分風にアレンジして、しかも、1827、、違うか1823?の日本語バージョンで
書き込みに成功できて、うれしいです。
感謝申し上げます。
Config、AD、PWM、割り込み、タイマー0 そのほかにも
制御文、等々 学習を深められましたm(__)m
maboさんへ
>プロトタイプの宣言,面倒なので,サブ関数をメインの前に,
記述するといいかもです。
やってみましたが、同じエラーが出ました。
猛牛ロックさんへ
>No.1249は私の環境ではその部分にはエラーは出ません。
そうでしたか〜。
と思って、
IDXにおいて、PICをF627Aに選択して、ビルトしましたが
同じエラーが出ました。
もう、自分レベルにはどうしようもありません。
AM11:51 追記
猛牛ロックさんの 環境 という話から、やむを得ず、
MPLAB のバージョンを変更したら、コンパイルできました。
IDXが3.36
コンパイラが1.42です。
自分には、こんな方法しか思いつきませんでした(泣く
でも、皆さんのおかげで、猛牛ロックさんが考えたプログラムを
自分風にアレンジして、しかも、1827、、違うか1823?の日本語バージョンで
書き込みに成功できて、うれしいです。
感謝申し上げます。
Config、AD、PWM、割り込み、タイマー0 そのほかにも
制御文、等々 学習を深められましたm(__)m
Re: interrupt関数
> IDXが
何度か書いていますけど、これってMPLAB X IDEですよね?せめてXIDEにして欲しいです。
> コンパイラが1.42です。
一度バージョンを2.?に上げましたよね?書式がちょっと変わったのかもしれません。
その辺りはコンパイラのマニュアルを見る必要があります。
基本的に、コンパイラの仕様に従うしかありません。
それは初心者でもベテランでも同様です。
で、学習ですけど、私の思うには人のコードを書き換えても上達しません。
まずはデジタル入出力を使った、簡単なものから始めた方が良いです。
※本文にあたる部分が10行以下のもの。
取り敢えず重要な事は
・C言語の書式を覚える。(宣言、初期化、関数、引数、戻り値、変数の型)
・GPIOを操作出来るようになる。(入出力を正しく操作)
・if文、while文(for文)を覚える。
・変数を使えるようになる(フラグ、カウント)
といった事です。
レジスタを詳しく覚える事は、時間の無駄が大きいです。
レジスタを操作すること自体は重要な事ですけど、逆に言えば、適切に設定するだけの事です。
最低限の事だけにしておいた方が良いです。
何度か書いていますけど、これってMPLAB X IDEですよね?せめてXIDEにして欲しいです。
> コンパイラが1.42です。
一度バージョンを2.?に上げましたよね?書式がちょっと変わったのかもしれません。
その辺りはコンパイラのマニュアルを見る必要があります。
基本的に、コンパイラの仕様に従うしかありません。
それは初心者でもベテランでも同様です。
で、学習ですけど、私の思うには人のコードを書き換えても上達しません。
まずはデジタル入出力を使った、簡単なものから始めた方が良いです。
※本文にあたる部分が10行以下のもの。
取り敢えず重要な事は
・C言語の書式を覚える。(宣言、初期化、関数、引数、戻り値、変数の型)
・GPIOを操作出来るようになる。(入出力を正しく操作)
・if文、while文(for文)を覚える。
・変数を使えるようになる(フラグ、カウント)
といった事です。
レジスタを詳しく覚える事は、時間の無駄が大きいです。
レジスタを操作すること自体は重要な事ですけど、逆に言えば、適切に設定するだけの事です。
最低限の事だけにしておいた方が良いです。
猛牛ロック 2018/11/28(Wed) 18:18 No.1255
Re: interrupt関数
TRさん,猛牛ロックさん,こんばんは。
TRさん,私の環境でコンパイルしてみました。
X IDE 5.03→5.05の最新でした。
X C8 2.00
の最新の環境です。
TRさんのアップした最初のプログラムです。
若干変更しました。まず,プロトタイプの宣言で,
// プロトタイプ宣言
void InitInterTimer0 (void);
void WaitTime (int);
void Second(int);
のようにvoid Second(int);を付け加えました。
それから,ブログの方に掲載しますが,若干の変更をしたら,
コンパイル通りました。
新しい,コンパイラーは,文法にシビアなようです。
それと,xc.h の読み取りのバグがあるようです。
http://mabo52.sakura.ne.jp/files/newmain.c
TRさん,私の環境でコンパイルしてみました。
X IDE 5.03→5.05の最新でした。
X C8 2.00
の最新の環境です。
TRさんのアップした最初のプログラムです。
若干変更しました。まず,プロトタイプの宣言で,
// プロトタイプ宣言
void InitInterTimer0 (void);
void WaitTime (int);
void Second(int);
のようにvoid Second(int);を付け加えました。
それから,ブログの方に掲載しますが,若干の変更をしたら,
コンパイル通りました。
新しい,コンパイラーは,文法にシビアなようです。
それと,xc.h の読み取りのバグがあるようです。
http://mabo52.sakura.ne.jp/files/newmain.c
mabo 2018/11/28(Wed) 21:41 No.1257
Re: interrupt関数
Re: interrupt関数
TRさん,猛牛ロックさん,こんにちは。
今回のプログラム16F1827だったんですね。
以前,猛牛ロックさんにご紹介いただいて,私も使いました。
ただ,クロックが早くなる分,いままで動いていたプログラムが動かなくなったり,
88〜1827への移植に苦労したりました。
LATレジスタ使ったり,間にNOPのアセンブラーいれたり,見よう見まねでやりました。
http://kuri6005.sakura.ne.jp/pic/index.php?%C8%AF%B8%F7%A5%C0%A5%A4%A5%AA%A1%BC%A5%C9%28LED%29%A4%CE%C5%C0%CC%C7%2816F1827%20XC8%29
http://mitt.la.coocan.jp/pic/pic1320_06.html
http://www.microtechnica.tv/faq/faq.cgi?kate=mikroC&faq=16
あたりにその記事があります。私のブログでも,
http://mabo52.sakura.ne.jp/index.php?e=970#cmt257
に関連の記事書いてます。
なんかもういろいろ忘れています。
今回のプログラム16F1827だったんですね。
以前,猛牛ロックさんにご紹介いただいて,私も使いました。
ただ,クロックが早くなる分,いままで動いていたプログラムが動かなくなったり,
88〜1827への移植に苦労したりました。
LATレジスタ使ったり,間にNOPのアセンブラーいれたり,見よう見まねでやりました。
http://kuri6005.sakura.ne.jp/pic/index.php?%C8%AF%B8%F7%A5%C0%A5%A4%A5%AA%A1%BC%A5%C9%28LED%29%A4%CE%C5%C0%CC%C7%2816F1827%20XC8%29
http://mitt.la.coocan.jp/pic/pic1320_06.html
http://www.microtechnica.tv/faq/faq.cgi?kate=mikroC&faq=16
あたりにその記事があります。私のブログでも,
http://mabo52.sakura.ne.jp/index.php?e=970#cmt257
に関連の記事書いてます。
なんかもういろいろ忘れています。
mabo 2018/11/29(Thu) 11:32 No.1259