2 Commits
Author SHA1 Message Date
stud126797 a591a87f9c Загрузил(а) файлы в '' 2023-06-23 05:42:04 +00:00
stud124688 b344a3564a Загрузил(а) файлы в '' 2023-06-21 13:20:11 +00:00
3 changed files with 116 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "device_ring_buffer.h"
#include "UART.h"
#define F_CPU 16000000
#define CONF_UART_BAUD 300
#define BAUD CONF_UART_BAUD
struct rb ring_buff_receive;
struct rb ring_buff_transmit;
inline void uart_initialize(void)
{
UCSR0B=0;
UCSR0C=0;
UCSR0B =(1<<RXEN0)|(1<<TXEN0); // Включаем приём и передачу по UART
UCSR0B |= (0<<UDRIE0); // Разрешаем или нет прерывание при очистке регистра данных
UCSR0B |= (0<<TXCIE0); // Разрешаем или нет прерывание при завершении передачи
UCSR0B |= (1<<RXCIE0); // Разрешаем или нет прерывание при приёме
UCSR0C = (1<<USBS0) | (3<<UCSZ00);
sei();
}
ISR(UART_RXC_vect)
{
register unsigned char received_data = UDR0;// Забираем принятые данные
rb_put(&ring_buff_receive, received_data);
}
// Функция отправки байта
void UART_Transmit(struct rb* _rb)
{
if (_rb->count > 0)
{
if (UCSR0A & (1 << UDRE0))
{
char data;
rb_get(&ring_buff_transmit, &data);
UDR0 = data;
}
}
}
struct rb* get_rb_receive(void)
{
return &ring_buff_receive;
}
struct rb* get_rb_transmit(void)
{
return &ring_buff_transmit;
}
/*int main(void) {
sei();
uart_initialize();
DDRD = 0xFF;
uint8_t buff[] = {0x48, 0x45, 0x4C, 0x4C, 0x4F, 0x21, 0x09};
UART_Transmit(buff);
while (1) {
UART_Transmit(buff);
}
}*/
+9
View File
@@ -0,0 +1,9 @@
#ifndef UART_H
#define UART_H
inline void uart_initialize(void);
void UART_Transmit(struct rb* _rb);
struct rb* get_rb_receive(void);
struct rb* get_rb_transmit(void);
#endif /*UART_H*/
+39
View File
@@ -0,0 +1,39 @@
/*
* main.c
*
* Created: 18.06.2023 19:53:46
* Author: Lada Yuzhakova
*/
#include "UART.h"
#include "modbus.h"
#include "timer.h"
#include "device_adc.h"
#include "device_ring_buffer.h"
#include "gpio.h"
#include <avr/io.h>
int main(void)
{
// Èíèöèàëèçàöèè
adc_init();
uart_initialize();
modbus_init();
gpio_init();
rb_initialize(get_rb_receive());
rb_initialize(get_rb_transmit());
// Çàïóñêàåì òàéìåð
setup_timer();
while(1)
{
// Ôóíêöèÿ ïðèåìà ìîäáàñ-çàïðîñà
modbus_rtu();
// Ôóíêöèÿ ôîðìèðîâàíèÿ ìîäáàñ-îòâåòà
modbus_answer();
// Îòïðàâëÿòü îòâåò ïî óàðò
UART_Transmit(get_rb_transmit());
}
return 0;
}