Фрагмент кода ниже
вот когда доходит до этого кода то вместо секунды период работы светодиодов несколько минут
_delay_ms(1000);
SysRED_ON();
Ткните носом пожалуйста.
Код: Выделить всё
#include "avr\io.h"//описаны имена портов в том числе
#include "util\delay.h"
#include <avr/interrupt.h>
#include "GenericHID.h"
#define eeprom EEMEM //подстройка под GCC
typedef unsigned char byte;
typedef unsigned int word;
#define SET_BIT(x) |= (1<<x) //использование - PORTB SET_BIT(5); // "установить" бит5
#define CLR_BIT(x) &=~(1<<x)
#define INV_BIT(x) ^=(1<<x)
#include "eeprom.c"
#define SDAw_port PORTC
#define SDAw_line 2
#define SCLw_port PORTD
#define SCLw_line 0
#define SDAr_port PIND
#define SDAr_line 1
#define SCLr_port PIND
#define SCLr_line 2
#define NUM 1
byte FLAGI=0;//основные системные флаги
#define SysRED_ON() PORTD |= (1 << 3) //в порт 1
#define SysRED_OFF() PORTD &= ~(1 << 3) //в порт 0
#define SysGREEN_ON() PORTD |= (1 << 4) //в порт 1
#define SysGREEN_OFF() PORTD &= ~(1 << 4) //в порт 0
//таймер 100кГц
ISR( TIMER0_OVF_vect )//прерывание первого таймера 100кГц
{
TCNT0=0xEC;//переустановка таймера 100кГц
FLAGI SET_BIT(0);//установим флаг таймера
}//proc
// медленный таймер
ISR( TIMER1_OVF_vect ) // 1 кГц
{
TCNT1=0x06;//переустановка таймера
FLAGI SET_BIT(2);//скорость передачи
if (TimerPrioritet<NUM*_DELAY_PRIORITET) TimerPrioritet++;
//if (TimerRealTime01 < 100) TimerRealTime01++; //замедлитель ДО 10Гц 0,1секунды
}
int main(void)
{
SetupHardware();
_delay_ms(1000);
SysRED_ON();
_delay_ms(1000);
SysRED_OFF();
_delay_ms(1000);
SysGREEN_ON();
_delay_ms(1000);
SysGREEN_OFF();
_delay_ms(1000);
GlobalInterruptEnable();
while (1)
{
HID_Task();
USB_USBTask();
Listen();
}
}
/** Configures the board hardware and chip peripherals for the demo's functionality. */
void SetupHardware(void)
{
#if (ARCH == ARCH_AVR8)
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF);
wdt_disable();
clock_prescale_set(clock_div_1);/* Disable clock division */
#elif (ARCH == ARCH_XMEGA)
/* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */
XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU);
XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL);
/* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */
XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ);
XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB);
PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
#endif
//НАСТРОЙКА ПОРТОВ И ПЕРИФЕРИИ
DDRB = 0b00000001; //выходы где 1
PORTB = 0b11111110; //1-подтяжка если вход
DDRC = 0b00000100; //выходы где 1
PORTC = 0b11111011; //1-подтяжка если вход
DDRD = 0b11111001; //выходы где 1
PORTD = 0b00000110; //1-подтяжка если вход
TCNT0=0xEC;//переустановка таймера 100кГц
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
USB_Init();
}
- Вложения
-
- фьюзы.jpg
- (30.68 КБ) 442 скачивания


