R
rongo024
Guest
Olen kirjoittanut koodin AVR atmega64 USART viestintä, mutta se ei toimi laitteistossa.Mutta jos minä koe tätä koodia (tehtyään hex) ja Proteus se toimii.
minun koodi:
Koodi:# Include <avr/io.h>
# Define F_CPU 8000000UL
# Include <util/delay.h>
# Include <string.h># Define baudrate_1 9600UL
# Define baudrate_0 4800UL# Define ubrrval_1 (((F_CPU) / (baudrate_1 * 16UL)) -1)
# Define ubrrval_0 (((F_CPU) / (baudrate_0 * 16UL)) -1)haihtuvien unsigned char m1 [] = "baud_4800";void com_init_1 (void) / / viestintä initialization
(
UBRR1H = ubrrval_1>> 8;
UBRR1L = ubrrval_1;
UCSR1C | = (1 <<USBS1) | (1 <<UCSZ11) | (1 <<UCSZ10);
UCSR1B | = (1 <<TXEN1) | (1 <<RXEN1);
)void com_init_0 (void)
(UBRR0H = ubrrval_0>> 8;
UBRR0L = ubrrval_0;
UCSR0C | = (1 <<USBS0) | (1 <<UCSZ01) | (1 <<UCSZ00);
UCSR0B | = (1 <<TXEN0) | (1 <<RXEN0) | (1 <<RXCIE0);
)unsigned char uartgetc0 (void)
(
while (! (UCSR0A & (1 <<RXC0)));
palata UDR0;
)unsigned char uartgetc1 (void)
(
while (! (UCSR1A & (1 <<RXC1)));
palata UDR1;
)void uartgets1 (void)
(
unsigned char i = 0;
unsigned char c;
for (i = 0; i )
(
c = uartgetc1 ();
))
void uartgets0 (void)
(
unsigned char i = 0;
unsigned char ch;
for (i = 0; i )
(
ch = uartgetc0 ();
)
)
void uartputc0 (unsigned char tiedot)
(
while (! (UCSR0A & (1 <<UDRE0)));
UDR0 = tieto;
_delay_ms (100)
void uartputc1 (unsigned char tiedot)
(
while (! (UCSR1A & (1 <<UDRE1)));
UDR1 = tieto;
_delay_ms (100)
void uartputs0 (unsigned char m [], sign char LEN)
(
unsigned char i = 0;
for (i = 0; i <len; i )
(
uartputc0 (m );
)
)
void uartputs1 (unsigned char m [], sign char LEN)
(
unsigned char i = 0;
for (i = 0; i <len; i )
(
uartputc1 (m );
)
)int main (void)(
DDRE & = ~ (1 <<PE0);
DDRE | = (1 <<PE1);
DDRD & = ~ (1 <<PD2);
DDRD | = (1 <<PD3);
com_init_0 ();
com_init_1 ();
SEI ();while (1)
(
uartputs0 (4800, 4);
uartputc0 ("m");
_delay_ms (1000);
uartputs1 (9600, 4);
_delay_ms (1000);
uartputc1 ("m");
_delay_ms (1000);
)return 0;
)
minun koodi:
Koodi:# Include <avr/io.h>
# Define F_CPU 8000000UL
# Include <util/delay.h>
# Include <string.h># Define baudrate_1 9600UL
# Define baudrate_0 4800UL# Define ubrrval_1 (((F_CPU) / (baudrate_1 * 16UL)) -1)
# Define ubrrval_0 (((F_CPU) / (baudrate_0 * 16UL)) -1)haihtuvien unsigned char m1 [] = "baud_4800";void com_init_1 (void) / / viestintä initialization
(
UBRR1H = ubrrval_1>> 8;
UBRR1L = ubrrval_1;
UCSR1C | = (1 <<USBS1) | (1 <<UCSZ11) | (1 <<UCSZ10);
UCSR1B | = (1 <<TXEN1) | (1 <<RXEN1);
)void com_init_0 (void)
(UBRR0H = ubrrval_0>> 8;
UBRR0L = ubrrval_0;
UCSR0C | = (1 <<USBS0) | (1 <<UCSZ01) | (1 <<UCSZ00);
UCSR0B | = (1 <<TXEN0) | (1 <<RXEN0) | (1 <<RXCIE0);
)unsigned char uartgetc0 (void)
(
while (! (UCSR0A & (1 <<RXC0)));
palata UDR0;
)unsigned char uartgetc1 (void)
(
while (! (UCSR1A & (1 <<RXC1)));
palata UDR1;
)void uartgets1 (void)
(
unsigned char i = 0;
unsigned char c;
for (i = 0; i )
(
c = uartgetc1 ();
))
void uartgets0 (void)
(
unsigned char i = 0;
unsigned char ch;
for (i = 0; i )
(
ch = uartgetc0 ();
)
)
void uartputc0 (unsigned char tiedot)
(
while (! (UCSR0A & (1 <<UDRE0)));
UDR0 = tieto;
_delay_ms (100)
void uartputc1 (unsigned char tiedot)
(
while (! (UCSR1A & (1 <<UDRE1)));
UDR1 = tieto;
_delay_ms (100)
void uartputs0 (unsigned char m [], sign char LEN)
(
unsigned char i = 0;
for (i = 0; i <len; i )
(
uartputc0 (m );
)
)
void uartputs1 (unsigned char m [], sign char LEN)
(
unsigned char i = 0;
for (i = 0; i <len; i )
(
uartputc1 (m );
)
)int main (void)(
DDRE & = ~ (1 <<PE0);
DDRE | = (1 <<PE1);
DDRD & = ~ (1 <<PD2);
DDRD | = (1 <<PD3);
com_init_0 ();
com_init_1 ();
SEI ();while (1)
(
uartputs0 (4800, 4);
uartputc0 ("m");
_delay_ms (1000);
uartputs1 (9600, 4);
_delay_ms (1000);
uartputc1 ("m");
_delay_ms (1000);
)return 0;
)