zlhbkd 发表于 2012-3-10 20:52:33

485通过485转232与pc通信问题

mega8的485通信,我用一个485转232连接pc机,用串口调试助手显示数据,全是80,00这样的十六进制数,是怎么回事啊?有没有人遇到过这种问题?

xivisi 发表于 2012-3-10 21:05:57

波特率???

zlhbkd 发表于 2012-3-10 21:07:06

回复【1楼】xivisiLiYong
-----------------------------------------------------------------------
波特率都是9600,下面是程序,不知道哪的问题
#include <iom8v.h>
#include <macros.h>


void delay_1ms(void)   //1ms延时函数
{
unsigned int i;
for (i=0;i<1128;i++)
{}
}

void delay(unsigned int n)            //延时n毫秒
{
unsigned int i;
for (i=0;i<n;i++)                   //执行n次1毫秒延时
delay_1ms();
}

void uartinit(unsigned short baudrate)
{
       unsigned short UBRRtemp;
UBRRtemp=( 8000000/16/baudrate-1 );
//设置波特率
UBRRH = UBRRtemp>>8;
UBRRL = UBRRtemp;
//设置数据位停止位 8, 1
UCSRC |= ( (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0) ); //UCSRC = 0b10000110;
//使能UART,使能中断
UCSRB |= ( (1<<RXCIE) | (1<<TXCIE)|(1<<TXEN)|(1<<RXEN) );

/*UBRRH=0x00;
UBRRL=51;
UCSRB=(1<<TXEN);
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);*/
}

void uartsendchar(unsigned char data)
{
       while(!(UCSRA&(1<<UDRE)));

UDR=data;
}

void main(void)
{
       unsigned char data1 = 'A';
unsigned char data2 = 'B';

uartinit(9600);
//DDRD|=(1<<DDD4);
DDRD=(1<<PD1)|(1<<PD4);
PORTD=(1<<PD4);

while(1)
{
        uartsendchar(data1);
delay(100);
uartsendchar(data2);
delay(100);
}
}

machangsong521 发表于 2014-4-17 14:24:31

我也遇到类似情况了,接收的数据总是不对,波特率什么的都检查了
页: [1]
查看完整版本: 485通过485转232与pc通信问题