Код: Выделить всё
/*atmega 328
* 2708.cpp
*27/08/24 настроил uart
* Created: 27.08.2024 21:34:56
* Author : Павел
*/
#define F_CPU 8000000UL // Тактовая частота микроконтроллера
#include <avr/io.h>
#include <util/delay.h> // Библиотека программной задержки
#define BAUD 9600UL // Задание скорости обмена по UART
#define SPEED ((F_CPU+BAUD*8)/(BAUD*16)-1)
#define F_I2C 100000UL
#define TWBR_VALUE (((F_CPU)/(F_I2C)-16)/2)
void out_UART (uint8_t);
void Init_i2c(void) // Настройка режима мастера
{
PORTC |=( 1<<PC5|1<<PC4); // Включим подтяжку на ноги, вдруг юзер на резисторы пожмотился
DDRC &=~(1<<PC5|1<<PC4);
TWBR = TWBR_VALUE; // Настроим битрейт
TWSR = (0<<TWPS1)|(0<<TWPS0);
}
int main(void)
{
UCSR0B = (1<<TXEN0); // Настройка UART на передачу
UCSR0C = (0<<UMSEL00|1<<UCSZ01|1<<UCSZ00);
UBRR0L = SPEED & 0xFF;
UBRR0H = SPEED >> 8;
for(uint8_t adress=0;adress<127;adress++)
{
/*формируем состояние СТАРТ*/
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
/*выдаем на шину пакет SLA-R*/
TWDR = (adress<<1)|1;
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
uint8_t a=TWSR;
//if(a==0x08){
while(!(UCSR0A&(1<<UDRE0))); // Ожидание готовности UART к передаче
UDR0 = a;
//}
//while(!(UCSR0A&(1<<UDRE0))); // Ожидание готовности UART к передаче
//UDR0 =0xFF;
_delay_ms(100);
}
/* Replace with your application code */
while (1)
{
}
}
////////////////////////////////////////////////////////////
// ПРИЕМ/ПЕРЕДАЧА ДАННЫХ UART
////////////////////////////////////////////////////////////
void out_UART(uint8_t data){ // Передача байта через UART
while(!(UCSR0A&(1<<UDRE0))); // Ожидание готовности UART к передаче
UDR0 = data; // Запись в регистр UDR байта данных начинает процесс передачи
}



