Сергей Борщ, Так, например, не хочет работать
PORTB=_BV(PORTB1);
mdmitry, Сергей Борщ,Насчёт _BV mdmitry оказался прав, хотя в книге Ю.А. Шпака указано что _BV() библиотечный макрос (Ю.А. Шпак. Программирование на языке С для AVR и PIC микроконтроллеров, стр. 165). Проблема решилась с подключением файла avr/sfr_defs.h В тамошнем примере код до функции отработки прерывания следующий:
CODE
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#if defined(__AVR_AT90S2313__)
# define OC1 PB3
# define OCR OCR1
# define DDROC DDRB
#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
# define OC1 PB1
# define DDROC DDRB
# define OCR OCR1
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || \
defined(__AVR_AT90S4434__) || defined(__AVR_AT90S8535__) || \
defined(__AVR_ATmega163__)
# define OC1 PD5
# define DDROC DDRD
# define OCR OCR1A
#endif
#if defined(COM11)
# define XCOM11 COM11
#elif defined(COM1A1)
# define XCOM11 COM1A1
#endif
enum { UP, DOWN };
unsigned int pwm;
unsigned char direction;
;
К слову, вектор прерывания там тоже нерабочий , вместо
INTERRUPT(SIG_OWERFLOW1)
для корректной работы нужно использовать
ISR(TIMER0_OVF_vect){
OCR0++; if(OCR0==255) OCR0=0;}
Это простенький, реально заработавший в железе пример.
Тем не менее, ситуация достаточно прояснилась , - спасибо всем за помощь. Дело в том , что раньше я писал все свои проекты управления на VHDL, а теперь необходимы некоторые вычисл. мощности, которые проще сделать на МК, нежели на ПЛИС...
Отсуствие единых стандартов всегда будет мучать человечество.