求助串口通信的问题
我用m16和PC通信,电平转换采用MAX232CPE芯片,该芯片周围的5个电容是1uF的钽电容,PC采用串口调试助手(网上下载的)软件进行接收。当给系统通电后后,不能接收到任何字符,若改变串口调试助手的波特率或结束位的个数都会收到一个“00”,每改变一次,收到一个。程序如下
#include <ioM16v.h>
#include <macros.h>
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
#define mclk 8000000
//8M晶振
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1141;j++);
}
void uart_init(uint baud)
{
UCSRB=0x00;
UCSRA=0x00; //控制寄存器清零
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);
//选择UCSRC,异步模式,禁止校验,1位停止位,8位数据位
baud=mclk/16/baud-1 ; //波特率最大为65K
UBRRL=baud;
UBRRH=baud>>8; //设置波特率
UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
//接收、发送使能,接收中断使能
SREG=BIT(7); //全局中断开放
DDRD|=0X02; //配置TX为输出(很重要)
}
void uart_sendB(uchar data)
{
while(!(UCSRA&(BIT(UDRE))));
UDR=data;
while(!(UCSRA&(BIT(TXC))));
UCSRA|=BIT(TXC);
}
void main()
{
uchar i=4;
uchar j='a';
uart_init(19200);
uart_sendB(i);
delay(10);
uart_sendB(j);
delay(10);
uart_sendB(i);
delay(10);
uart_sendB(i);
delay(10);
uart_sendB(i);
delay(10);
uart_sendB(j);
delay(10);
uart_sendB(i);
delay(10);
uart_sendB(i);
delay(10);
} 建议购买我编写的《AVR单片机嵌入式系统原理与应用实践》认认真真的学习,踏踏实实的练习
页:
[1]