AVR和51之间的通信,我想实现AVR通过发送1、2来控制51单片机端的亮灭。但是51端接收端的字符是01、02。一直调不同,还请大神帮我看看。谢谢了。51单片机的程序已经完全能通过电脑的PC端实现发送1和2控制灯的亮灭。//这个是AVR的程序。
#include <iom2560v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
#define fosc 12000000
#define baud 9600
/********USART1初始化:发送使能,波特率设定为9600bit/s,异步方式,8位数据,1位停止位********/
void uart1Init(void)
{
UBRR1L = (fosc/(16*baud)-1)%256;
UBRR1H = (fosc/(16*baud)-1)/256;
UCSR1B|= (1<<UCSZ12)|(1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1);
UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);
}
/********USART1初始化:等待UDR1寄存器中的数据发送完毕后,接发送本次数据********/
void uart1SendChar(unsigned char data)
{
while(!(UCSR1A&(1<<UDRE1)));
UDR1 = data;
}
//延时函数
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
//主函数
void main (void)
{
uart1Init();
while(1)
{
//发送字符串
uart1SendChar(1);
delay(1000);
uart1SendChar(2);
delay(1000);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void uart1SendChar(unsigned char data) <---- 改为 int 试试,应该没错呀。就怕是中文状态下的字符。
//这是52端的程序:
#include "reg52.h"
sbit relay1=P3^3;
sbit relay2=P3^2;
/*串口初始化:主要涉及寄存器配置*/
void UartInit(void) //初始化uart
{
TMOD = 0X20;
SCON = 0X50;
PCON = 0X00;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
/*对串口中断相关的寄存器进行配置*/
ES = 1;//串口中断
EA = 1;//CPU总中断
}
//写串口中断响应的服务程序:
void UartISR(void) interrupt 4
{
unsigned char TempDat;
if (RI)/*查询串口是否接收到一个完整的数据*/
{
RI = 0;/*清除标志,准备下一次判断*/
TempDat = SBUF;/*读取串口数据*/
if (1 == TempDat)/*判断串口接收到的数据*/
{
relay1 = 0;
relay2 = 0;
}
else if (2 == TempDat)
{
relay1 = 0xff;
relay2 = 0xff;
}
else
{
}
}
}
void main(void)
{
UartInit();/*调用串口初始化函数*/
while(1)
{
}
}
一周热门 更多>