Ср фев 09, 2022 23:50:58
Вс фев 13, 2022 17:31:58
Ср фев 23, 2022 16:29:31
Чт фев 24, 2022 19:24:30
#define F_CPU 24000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
_PROTECTED_WRITE (CLKCTRL.OSCHFCTRLA, CLKCTRL_FRQSEL_24M_gc); //Установка частоты
PORTC.DIR= PIN6_bm; //Порт 6 на выход
while (1)
{
PORTC.OUT|= PIN6_bm; //Установка на порте 6 лог.1
_delay_ms(1000);
PORTC.OUT&=~PIN6_bm; //Установка на порте 6 лог.0
_delay_ms(1000);
}
}
PORTC.DIRSET= PIN6_bm;
while (1)
{
PORTC.OUTSET= PIN6_bm;
_delay_ms(1000);
PORTC.OUTCLR=PIN6_bm;
_delay_ms(1000);
}
PORTC.DIRSET= PIN6_bm;
while (1)
{
PORTC.OUTTGL= PIN6_bm;
_delay_ms(1000);
}
Сб фев 26, 2022 10:43:42
Вс фев 27, 2022 12:00:09
Вс фев 27, 2022 12:28:35
Пн фев 28, 2022 16:22:05
#define F_CPU 24000000UL
#define USART1_BAUD_RATE(BAUD_RATE) ((float)(64 * F_CPU / (16 * (float)BAUD_RATE)) + 0.5)
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
static int uart_putchar(char c, FILE *stream);
static int uart_getchar(FILE *stream);
static FILE mystd = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); //Поток
int main(void)
{
_PROTECTED_WRITE (CLKCTRL.OSCHFCTRLA, CLKCTRL_FRQSEL_24M_gc); //Настройка частоты кварца
PORTC.DIRSET = PIN0_bm; /* set pin 0 of PORT C (TXd) as output*/
PORTC.DIRCLR = PIN1_bm; /* set pin 1 of PORT C (RXd) as input*/
USART1.BAUD = (uint16_t)(USART1_BAUD_RATE(9600)); //Задаем скорость
USART1.CTRLC = USART_CHSIZE_8BIT_gc|USART_SBMODE_2BIT_gc; //Формат: 8Бит, 2 Стоп кадра
USART1.CTRLB = USART_TXEN_bm|USART_RXEN_bm; //Включить Передатчик и приемник.
stdout=&mystd;
stdin=&mystd;
while (1)
{
if (USART1.STATUS & USART_RXCIF_bm) //Проверяем наличие данных
{
char str[80];
scanf("%s", str); //Читаем данные
printf("%s\n", str); //Печатаем то что прочитали
}
//printf("Hello World!\n");
}
}
static int uart_putchar(char c, FILE *stream) //отправка данных по USART
{
if (c == '\n') uart_putchar('\r', stream);
while(!(USART1.STATUS & USART_DREIF_bm));
USART1.TXDATAL=c;
return 0;
}
static int uart_getchar(FILE *stream) //чтение данных по USART
{
while(!(USART1.STATUS & USART_RXCIF_bm));
return USART1.RXDATAL;
}
Сб мар 05, 2022 18:58:15
//////////////////////////////////////////////
// Макроопределения //
//////////////////////////////////////////////
#define TWI0_BAUD(F_SCL, T_RISE) ((((((float)F_CPU / (float)F_SCL)) - 10 - ((float)F_CPU * T_RISE))) / 2)
#define TWI_IS_CLOCKHELD() TWI0.MSTATUS & TWI_CLKHOLD_bm
#define TWI_IS_BUSERR() TWI0.MSTATUS & TWI_BUSERR_bm
#define TWI_IS_ARBLOST() TWI0.MSTATUS & TWI_ARBLOST_bm
#define TWI_IS_BUSBUSY() ((TWI0.MSTATUS & TWI_BUSSTATE_BUSY_gc) == TWI_BUSSTATE_BUSY_gc)
#define TWI_WAIT() while (!((TWI_IS_CLOCKHELD()) || (TWI_IS_BUSERR()) || (TWI_IS_ARBLOST()) || (TWI_IS_BUSBUSY())))
//////////////////////////////////////////////
// Инициализация I2C //
//////////////////////////////////////////////
void I2C_Init()
{
TWI0.MBAUD = (uint8_t)TWI0_BAUD(I2C_SCL_FREQ, 0);
TWI0.MADDR = 0x00;
TWI0.MDATA = 0x00;
TWI0.MCTRLA = TWI_ENABLE_bm;
TWI0.MSTATUS = TWI_RIF_bm | TWI_WIF_bm | TWI_CLKHOLD_bm | TWI_RXACK_bm |TWI_ARBLOST_bm | TWI_BUSERR_bm | TWI_BUSSTATE_IDLE_gc;
}
//////////////////////////////////////////////
// Старт условие I2C //
//////////////////////////////////////////////
uint8_t I2C_Start(uint8_t address)
{
uint8_t ticks = 254;
TWI0.MADDR =address;
while ((!((TWI_IS_CLOCKHELD()) || (TWI_IS_BUSERR()) || (TWI_IS_ARBLOST()) || (TWI_IS_BUSBUSY())))&&(ticks!=0))ticks--;
if (ticks!=0) return OK_I2C;
else return ERR_I2C;
}
//////////////////////////////////////////////
// Запись I2C //
//////////////////////////////////////////////
uint8_t I2C_Write (uint8_t data)
{
uint8_t ticks = 254;
TWI0.MDATA = data;
while ((!((TWI_IS_CLOCKHELD()) || (TWI_IS_BUSERR()) || (TWI_IS_ARBLOST()) || (TWI_IS_BUSBUSY())))&&(ticks!=0))ticks--;
if (ticks!=0) return OK_I2C;
else return ERR_I2C;
}
//////////////////////////////////////////////
// Чтение I2C //
//////////////////////////////////////////////
uint8_t I2C_Read (uint8_t acknowl)
{
uint8_t ticks = 254;
TWI0.MSTATUS = TWI_CLKHOLD_bm;
while ((!((TWI_IS_CLOCKHELD()) || (TWI_IS_BUSERR()) || (TWI_IS_ARBLOST()) || (TWI_IS_BUSBUSY())))&&(ticks!=0))ticks--;
if (acknowl == ACK) TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc;
else TWI0.MCTRLB = TWI_ACKACT_NACK_gc;
return TWI0.MDATA;;
}
//////////////////////////////////////////////
// Стоп условие I2C //
//////////////////////////////////////////////
void I2C_Stop ()
{
TWI0.MCTRLB |=TWI_MCMD_STOP_gc;
}
Вс мар 06, 2022 18:56:47
#define F_CPU 24000000UL //Частота МК
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
_PROTECTED_WRITE (CLKCTRL.OSCHFCTRLA, CLKCTRL_FRQSEL_24M_gc); //Настройка частоты МК
PORTC.DIRSET= PIN6_bm; //Пин Светодиода
RTC.CLKSEL = RTC_CLKSEL_OSC32K_gc; //Тактирование от внутреннего кварца 32к
RTC.INTCTRL=RTC_OVF_bm; //Прерывание при переполнении
RTC.CTRLA=RTC_RTCEN_bm; //Включить Таймер
RTC.PER = 0x8000; //Совпадение и сброс 0x8000=32768Hz
sei(); //Разрешить прерывание
while (1){}
}
ISR(RTC_CNT_vect)
{
PORTC.OUTTGL= PIN6_bm; //Инвертировать пин светодиода
RTC.INTFLAGS = RTC_OVF_bm; //Сбросить флаг прерывания
}
#define F_CPU 24000000UL //Частота МК
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
_PROTECTED_WRITE (CLKCTRL.OSCHFCTRLA, CLKCTRL_FRQSEL_24M_gc); //Настройка частоты МК
PORTC.DIRSET= PIN6_bm; //Пин Светодиода
RTC.CLKSEL = RTC_CLKSEL_OSC32K_gc; //Тактирование от внутреннего кварца 32к
RTC.PITCTRLA=RTC_PITEN_bm|RTC_PRESCALER_DIV16384_gc; //Включить PIT + Каждые 16384 такта
RTC.PITINTCTRL=RTC_PI_bm; //Включить прерывания PIT
sei(); //Разрешить прерывание
while (1){}
}
ISR(RTC_PIT_vect)
{
PORTC.OUTTGL= PIN6_bm; //Инвертировать пин светодиода
RTC.PITINTFLAGS = RTC_PI_bm; //Сбросить флаг прерывания
}
Чт май 19, 2022 14:43:22
Пт сен 22, 2023 22:31:00
Вт сен 26, 2023 19:53:09
Вс окт 08, 2023 21:39:14