سلام
من یه کد نوشتم، ولی با ارتباط سریال مشکل دارم !
وقتی که تو برنامه تابع USARTReadChar استفاده می کنم، دیگه قسمت USARTWriteChar کلاً کار نمی کنه ! تا اینکه قسمت USARTReadChar رو پاک کنم !
میشه نگاه کنین بگین مشکلش چیه
ممنون
من یه کد نوشتم، ولی با ارتباط سریال مشکل دارم !
وقتی که تو برنامه تابع USARTReadChar استفاده می کنم، دیگه قسمت USARTWriteChar کلاً کار نمی کنه ! تا اینکه قسمت USARTReadChar رو پاک کنم !
میشه نگاه کنین بگین مشکلش چیه
ممنون
کد PHP:
#include <avr/io.h>
#include <util/delay.h>
#include "avrlibdefs.h"
#define USART_BAUDRATE 9600
void USARTInit(uint16_t ubrr_value)
{
UBRRL = ubrr_value;
UBRRH = (ubrr_value>>8);
UCSRC=(1<<URSEL)|(3<<UCSZ0);
UCSRB=(1<<RXEN)|(1<<TXEN);
}
char USARTReadChar()
{
while(!(UCSRA & (1<<RXC)))
{
}
return UDR;
}
void USARTWriteChar(char data)
{
while(!(UCSRA & (1<<UDRE)))
{
}
UDR=data;
}
int main(void)
{
PORTC=0b00000000;
DDRC=0b11111111;
DDRD=0b00000010;
PORTD=0b11111100;
PORTC=0b11111111;
_delay_ms(500);
PORTC=0;
_delay_ms(50);
avr(PORTC).P0=1;
_delay_ms(100);
avr(PORTC).P0=0;
USARTInit(((F_CPU / (USART_BAUDRATE * 16UL))) - 1); //UBRR = 51
while(1)
{
switch (USARTReadChar())
{
case 'l':
avr(PORTC).P0=1;
break;
case 'm':
avr(PORTC).P0=0;
break;
}
if ((avr(PIND).P2)==0)
{
USARTWriteChar('x');
}
_delay_ms(1);
if ((avr(PIND).P2)==1)
{
USARTWriteChar('z');
}
_delay_ms(1);
if ((avr(PIND).P3)==0)
{
USARTWriteChar('p');
}
_delay_ms(1);
if ((avr(PIND).P3)==1)
{
USARTWriteChar('o');
}
_delay_ms(1);
}
}
دیدگاه