完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`AVR和51之间的通信,我想实现AVR通过发送1、2来控制51单片机端的亮灭。但是51端接收端的字符是01、02。一直调不同,还请大神帮我看看。谢谢了。51单片机的程序已经完全能通过电脑的PC端实现发送1和2控制灯的亮灭。//这个是AVR的程序。
#include #include #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< UCSR1C = (1< } /********USART1初始化:等待UDR1寄存器中的数据发送完毕后,接发送本次数据********/ void uart1SendChar(unsigned char data) { while(!(UCSR1A&(1< UDR1 = data; } //延时函数 void delay(uint ms) { uint i,j; for(i=0;i { for(j=0;j<1141;j++); } } //主函数 void main (void) { uart1Init(); while(1) { //发送字符串 uart1SendChar(1); delay(1000); uart1SendChar(2); delay(1000); } } ` |
|
相关推荐
17个回答
|
|
程序看着没啥毛病呀,看看AVR和51的TXD和RXD是否接错了!?
|
|
|
|
若我说对了请采纳,谢谢。
|
|
|
|
不是的,接的对着呢。T接R,R接T~然后共地。我把两个板子连上之后,然后51连上串口助手,发现接收到的数是01、02,不知道为什么会这样。我51里的对应条件是 SBUF==1或者SBUF==2。 |
|
|
|
程序全部贴出来,接受的数据是16进制01.02还是字符显示01.02
|
|
|
|
阿斯顿地方 发表于 2017-3-4 17:59 void uart1SendChar(unsigned char data) <---- 改为 int 试试,应该没错呀。就怕是中文状态下的字符。 |
|
|
|
//这是52端的程序: #include "reg52.h" ***it relay1=P3^3; ***it 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) { } } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
接收的数据写的是SBUF==1,SBUF==2。 //51的程序是: #include "reg52.h" ***it relay1=P3^3; ***it relay2=P3^4; /*串口初始化:主要涉及寄存器配置*/ 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) { } } |
|
|
|
我忘了,我发你的适合51系列单片机。要用于AVR还需要一个转换板才行。 |
|
|
|
接收的数据是在16进制下显示的01.02,在字符状态下显示的是乱码。 |
|
|
|
什么转换板,按理说不应该需要的,他们的通信协议一样啊。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12010 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 21:12 , Processed in 0.889405 second(s), Total 76, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号