UART一般怎么使用(422、485协议芯片)

UART一般怎么使用(422、485协议芯片),第1张

我觉得这里有两个问题,首先你得SCON配置为0x20,这样事实上你选择的串口工作方式是方式0通过移位寄存器发送和接收数据,而这种工作方式是不能像你在程序里这样直接传递数据的,最好是再看一看器件数据手册,把工作方式调整为方式1,第二个问题就是你用定时器配置好波特率发生器后,根本就没有启动,需要把寄存器TCON里面TR1位置1才能开始工作

看一下uart通信

具体过程:

1设置好uart控制寄存器,自己定义收发缓冲区,以及收发函数,一个两个串口无所谓

2写好中断向量表,自己查查一下uart0,uart2,uart2的中断号,例如

void __irq IRQ_Handler(void)

{

switch(INTOFFSET)

{

case 28: //INT_UART0

Uart0_Int();

break;

case 23: //INT_UART1

Uart1_Int();

break;

case 15: //INT_UART2

Uart2_Int();

break;

}

}

3用公母线将arm与pc相连,打开pc的超级中断,将arm与pc的比特率设置为相同的就可以了。

你用的是AVR单片机吧,这种单片机里面是没有串口接收FIFO的,所以每次只能是接收一个字节数据,否则接收寄存器就溢出了,想接收多个字节指令,就需要你把每次接到的数据一次次串起来,在程序里组装这些数据然后存储

……你自己把逻辑锁死了。收到一回4字节序列后,flag1置位,之后发送数据。可是在发送数据的时候又会进入中断的,由于接收缓冲区中还是那4字节的序列,于是flag1再次被置位……于是乎进入永不停歇的死循环。

你的串口中断应当判断一下是发送还是接收……

先说发送

第一个字节是地址没问题,理论上是不是发送下一字节要根据回应的ACK来决定,但实际实现的时候是直接发送的而不理会其ACK,每发送一个8比特,你要间隔1个比特位供从机向总线上写ACK,然后你再写第二字节数据,同样,空出ACK,然后给出结束位

接收

结构是一样的,地址位要变成读 *** 作,区别在于中间的ACK要由你,主机给出,你给低表示还要继续读,你既然要读两个字节,中间的ACK就要给低,接收完两个数据,你给出高电平,告诉从机你已经不需要读取了,然后你给总线结束位就完事了

以上就是关于UART一般怎么使用(422、485协议芯片)全部的内容,包括:UART一般怎么使用(422、485协议芯片)、求大神帮忙写个ATmega8的UART模块程序,串口调试助手发送信号,并且单片机再发送回来。、PC机与单片机之间的串口通信的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10151582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存