#1 2021-10-25 10:35:54

Nifedch
Учасник
Зареєстрований: 2021-10-25
Повідомлень: 2

Помогите разобраться с вызовом обработчика прерывания TIM0_OVF_vect

Помогите разобраться с вызовом обработчика прерывания TIM0_OVF_vect


// the setup routine runs once when you press reset:
void setup() {        
  //конфигурация микроконтроллера        
  DDRB=0x03;    //настройка 0-го и 1-го пина порта В на выход
  GIMSK=0x40;   //разрешение внешнего прерывания INT0
  MCUCR=0x03;   //генерация внешнего прерывания по нарастающему фронту сигнала на выходе INT0
  GIFR=0x00;    //сброс флагов внешнего прерывания INT0 
  TIMSK=0x02;   //разрешение по переполнению таймера / счетчика T0
  TIFR=0x00;    //сброс флагов прерываний таймера / счетчика T0
  sei();    //глобальное разрешение прерываний
}

// the loop routine runs over and over again forever:
void loop() {
  ISR (INT0_vect) {
    PORTB=0x03;   //установка 0-го и 1-го пина в единицу
    GIFR=0x00;    //сброс флагов внешнего прерывания INT0 
    TCNT0=0x64;   //записываем значение 100 в счетный регистр для формирования импульса 5мс на выходах порта В
    TCCR0B=0x02;    //запускаем таймер / счетчик Т0
    sei();    //глобальное разрешение прерываний    
  }

  ISR (TIMER0_OVF_vect) {
    PORTB=0x03;   //установка 0-го и 1-го пина в ноль
    TCCR0B=0x00;    //остановка таймер / счетчик Т0
    TIFR=0x00;    //сброс флагов прерываний таймера / счетчика T0
    sei();    //глобальное разрешение прерываний   
  }


}

Первое прерывание ISR (INT0_vect) он нормально компилирует а на второе прерывание ISR (TIMER0_OVF_vect) выдает ошибку:

Arduino: 1.8.16 (Windows 10), Плата:"Digispark (Default - 16.5mhz)"


C:Program Files (x86)Arduinoarduino-builder -dump-prefs -logger=machine -hardware C:Program Files (x86)Arduinohardware -hardware C:Users-//-AppDataLocalArduino15packages -tools C:Program Files (x86)Arduinotools-builder -tools C:Program Files (x86)Arduinohardwaretoolsavr -tools C:Users-//-AppDataLocalArduino15packages -built-in-libraries C:Program Files (x86)Arduinolibraries -libraries C:Users-//-DocumentsArduinolibraries -fqbn=digistump:avr:digispark-tiny -ide-version=10816 -build-path C:Users-//-AppDataLocalTemparduino_build_949308 -warnings=none -build-cache C:Users-//-AppDataLocalTemparduino_cache_471186 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.micronucleus.path=C:Users-//-AppDataLocalArduino15packagesdigistumptoolsmicronucleus2.0a4 -prefs=runtime.tools.micronucleus-2.0a4.path=C:Users-//-AppDataLocalArduino15packagesdigistumptoolsmicronucleus2.0a4 -prefs=runtime.tools.avr-gcc.path=C:Users-//-AppDataLocalArduino15packagesarduinotoolsavr-gcc4.8.1-arduino5 -prefs=runtime.tools.avr-gcc-4.8.1-arduino5.path=C:Users-//-AppDataLocalArduino15packagesarduinotoolsavr-gcc4.8.1-arduino5 -verbose F:TahoTaho.ino

C:Program Files (x86)Arduinoarduino-builder -compile -logger=machine -hardware C:Program Files (x86)Arduinohardware -hardware C:Users-//-AppDataLocalArduino15packages -tools C:Program Files (x86)Arduinotools-builder -tools C:Program Files (x86)Arduinohardwaretoolsavr -tools C:Users-//-AppDataLocalArduino15packages -built-in-libraries C:Program Files (x86)Arduinolibraries -libraries C:Users-//-DocumentsArduinolibraries -fqbn=digistump:avr:digispark-tiny -ide-version=10816 -build-path C:Users-//-AppDataLocalTemparduino_build_949308 -warnings=none -build-cache C:Users-//-AppDataLocalTemparduino_cache_471186 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.micronucleus.path=C:Users-//-AppDataLocalArduino15packagesdigistumptoolsmicronucleus2.0a4 -prefs=runtime.tools.micronucleus-2.0a4.path=C:Users-//-AppDataLocalArduino15packagesdigistumptoolsmicronucleus2.0a4 -prefs=runtime.tools.avr-gcc.path=C:Users-//-AppDataLocalArduino15packagesarduinotoolsavr-gcc4.8.1-arduino5 -prefs=runtime.tools.avr-gcc-4.8.1-arduino5.path=C:Users-//-AppDataLocalArduino15packagesarduinotoolsavr-gcc4.8.1-arduino5 -verbose F:TahoTaho.ino

Using board 'digispark-tiny' from platform in folder: C:Users-//-AppDataLocalArduino15packagesdigistumphardwareavr1.6.7

Using core 'tiny' from platform in folder: C:Users-//-AppDataLocalArduino15packagesdigistumphardwareavr1.6.7

Detecting libraries used...

"C:\Users\-//-\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5/bin/avr-g++" -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -w -x c++ -E -CC -mmcu=attiny85 -DF_CPU=16500000L -DARDUINO=10816 -DARDUINO_AVR_DIGISPARK -DARDUINO_ARCH_AVR "-IC:\Users\-//-\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny" "-IC:\Users\-//-\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\variants\digispark" "C:\Users\-//-\AppData\Local\Temp\arduino_build_949308\sketch\Taho.ino.cpp" -o nul

Generating function prototypes...

"C:\Users\-//-\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5/bin/avr-g++" -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -w -x c++ -E -CC -mmcu=attiny85 -DF_CPU=16500000L -DARDUINO=10816 -DARDUINO_AVR_DIGISPARK -DARDUINO_ARCH_AVR "-IC:\Users\-//-\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny" "-IC:\Users\-//-\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\variants\digispark" "C:\Users\-//-\AppData\Local\Temp\arduino_build_949308\sketch\Taho.ino.cpp" -o "C:\Users\-//-\AppData\Local\Temp\arduino_build_949308\preproc\ctags_target_for_gcc_minus_e.cpp"

"C:\Program Files (x86)\Arduino\tools-builder\ctags\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\Users\-//-\AppData\Local\Temp\arduino_build_949308\preproc\ctags_target_for_gcc_minus_e.cpp"

Компиляция скетча...

"C:\Users\-//-\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5/bin/avr-g++" -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=attiny85 -DF_CPU=16500000L -DARDUINO=10816 -DARDUINO_AVR_DIGISPARK -DARDUINO_ARCH_AVR "-IC:\Users\-//-\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny" "-IC:\Users\-//-\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\variants\digispark" "C:\Users\-//-\AppData\Local\Temp\arduino_build_949308\sketch\Taho.ino.cpp" -o "C:\Users\-//-\AppData\Local\Temp\arduino_build_949308\sketch\Taho.ino.cpp.o"

In file included from C:Users-//-AppDataLocalArduino15packagesdigistumphardwareavr1.6.7corestiny/WProgram.h:8:0,

                 from C:Users-//-AppDataLocalArduino15packagesdigistumphardwareavr1.6.7corestiny/Arduino.h:4,

                 from C:Users-//-AppDataLocalTemparduino_build_949308sketchTaho.ino.cpp:1:

F:TahoTaho.ino: In function 'void loop()':

Taho:18:3: error: expected unqualified-id before string constant

   ISR (INT0_vect) {

   ^

Taho:18:19: error: a function-definition is not allowed here before '{' token

   ISR (INT0_vect) {

                   ^

In file included from C:Users-//-AppDataLocalArduino15packagesdigistumphardwareavr1.6.7corestiny/WProgram.h:8:0,

                 from C:Users-//-AppDataLocalArduino15packagesdigistumphardwareavr1.6.7corestiny/Arduino.h:4,

                 from C:Users-//-AppDataLocalTemparduino_build_949308sketchTaho.ino.cpp:1:

Taho:26:3: error: expected unqualified-id before string constant

   ISR (TIMER0_OVF_vect) {

   ^

Taho:26:25: error: a function-definition is not allowed here before '{' token

   ISR (TIMER0_OVF_vect) {

                         ^

exit status 1

expected unqualified-id before string constant

Понимаю что ошибка скорее всего синтаксическая, возможно нужно подключить библиотеку или возможно нужно описать сами вектора прерывания. но пока информацию не нашел что да как по этому прошу помощи у знающих. Заранее спасибо.

Неактивний

#2 2021-10-25 10:52:34

Nifedch
Учасник
Зареєстрований: 2021-10-25
Повідомлень: 2

Re: Помогите разобраться с вызовом обработчика прерывания TIM0_OVF_vect

Проблема решена переносом скобки подпрограммы loop() в нужное место.

окончательно программа стала выглядеть так:

// the setup routine runs once when you press reset:
void setup() {
  //конфигурация микроконтроллера
  DDRB = 0x03;  //настройка 0-го и 1-го пина порта В на выход
  GIMSK = 0x40; //разрешение внешнего прерывания INT0
  MCUCR = 0x03; //генерация внешнего прерывания по нарастающему фронту сигнала на выходе INT0
  GIFR = 0x00;  //сброс флагов внешнего прерывания INT0
  TIMSK = 0x02; //разрешение по переполнению таймера / счетчика T0
  TIFR = 0x00;  //сброс флагов прерываний таймера / счетчика T0
  sei();    //глобальное разрешение прерываний
}

// the loop routine runs over and over again forever:
void loop() {
}

ISR (INT0_vect) {
  PORTB = 0x03; //установка 0-го и 1-го пина в единицу
  GIFR = 0x00;  //сброс флагов внешнего прерывания INT0
  TCNT0 = 0x64; //записываем значение 100 в счетный регистр для формирования импульса 5мс на выходах порта В
  TCCR0B = 0x02;  //запускаем таймер / счетчик Т0
  sei();    //глобальное разрешение прерываний
}

ISR (TIMER0_OVF_vect) {
  PORTB = 0x03; //установка 0-го и 1-го пина в ноль
  TCCR0B = 0x00;  //остановка таймер / счетчик Т0
  TIFR = 0x00;  //сброс флагов прерываний таймера / счетчика T0
  sei();    //глобальное разрешение прерываний
}

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму