Помогите разобраться Вот код для mega8515 При передаче символа через UART пин не дергается ( 0 и 1 устанавливается при записи в порт PD1 - Проверено на другом коде):
#define F_CPU 11058200UL
#if defined(F_CPU)
//fosc = 11.0592 MHz U2X = 0 UBRR=5
#define BR_115200 5 // boundrate 115200
//#define B8_2 2 //8 bits data 2 stop bits
#define B8_1 1 //8 bits data 2 stop bits
#endif
#ifndef BR_115200
#define F_CPU 11058200UL
#define BR_115200 71 //boundrate 9600
#endif
#include <avr/io.h>
#include <avr/eeprom.h> // не забываем подключить
#include <util/delay.h> // нужна для функции _delay_ms();
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/sleep.h>
#include <string.h>
void Port_init(void)
{
//1 = output, 0 = input
DDRA = 0; // устанавливаем PORTA как вХОД
DDRB = 0XFF; // устанавливаем PORTB как выход
DDRC = 0XFF; // устанавливаем PORTD как выход кроме PD01
DDRD=0b11111110;
PORTD=0b11111110;//все на выход кроме нулевого
SFIOR|=(1<<PUD); //off pullup
}
void usart_transmit( unsigned char data)
{
while (!( UCSRA & (1<<UDRE)))
UDR = data;
//_delay_ms(30);
}
#if defined(B8_1)
void usart_init(unsigned int bd) // USART initialization
{
/*
If URSEL is zero during a write operation, the UBRRH value will be updated.
If URSEL is one, the UCSRC setting will be updated.
*/
UCSRC &= ~_BV(URSEL);
/* Set baud rate */
UBRRH = (unsigned char)(bd>>8);
UBRRL = (unsigned char)bd;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN) | (1<<TXEN);
/* Set frame format: 8data, 1stop bit */
UCSRC = (1 << URSEL) | (0<<USBS) |(3<<UCSZ0);
}
#endif
#if defined(B8_2)
/* инициализаци¤ UART */
void usart_init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
#endif
#define SW12_ON PORTD|=(1<<PD6)
#define SW12_OFF PORTD&=~(1<<PD6)
/***************************************************/
int main(void)
{
Port_init();
usart_init(BR_115200); // USART initialization
while(1)
{
usart_transmit(0x55);
SW12_ON;
_delay_ms(50);
SW12_OFF;
_delay_ms(50);
}
}
UART mega8515 нет сигнала на пине TXD (AVRSTUDIO 6.2)
UART mega8515 нет сигнала на пине TXD (AVRSTUDIO 6.2)
- Вложения
-
- mega8515_fusses.JPG
- FUSSES
- (19.44 КБ) 319 скачиваний
Re: UART mega8515 нет сигнала на пине TXD (AVRSTUDIO 6.2)
Проблема решена Надо было помянять Эти строчки местами
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);