我最近做单片机的程序,需要通过PC将数据通过USART1发到单片机,然后单片机通过USART0发出去给舵机来控制舵机。舵机接收数据后有返回数据,这时我需要将该返回数据通过USART0接收到单片机,然后由USART1发出到PC上。但是舵机是半双工的,只有一根数据线,我就将ATmega128的PE2(pin4)作为一个方向控制的引脚,通过一个74HC126和74LS04实现。下面是主程序
#include "config.h"
void main(void)
{
unsigned char CmdMsg[15];
unsigned char StsMsg[15];
CLI();
Com_init();
SEI();
PORTE |= (1<<2);// 将PE2初始化为高电平
DDRE |=(1<<2);//将PE2设置为输出
while(1)
{
if(RTbuf_UART1.R_count != 0)
{
unsigned char temp1 = RTbuf_UART1.R_count;
Com_getstring (CmdMsg,temp1,&RTbuf_UART1,1);//将USART1接收到的数据放到CmdMsg中 temp是数据长度
PORTE |= (1<<2);//将PE2设置为高电平 这样的话就能设置为单片机发,舵机收
Com_putstring (CmdMsg,temp1,&RTbuf_UART0,0); //将受到的数据通过USART0发出去
};
PORTE &= ~(1<<2);//再将PE2设置为低电平 这样的话就能设置舵机发出数据,单片机收
if(RTbuf_UART0.R_count != 0)
{
unsigned char temp2 = RTbuf_UART0.R_count;
Com_getstring (StsMsg,temp2,&RTbuf_UART0,0);//单片机通过USART0收回返回信息
Com_putstring (StsMsg,temp2,&RTbuf_UART1,1);//单片机通过USART1将该信息发给PC
};
}
}
可是在实际的调试中,功能却没有实现。不管怎么弄,单片机接收到PC的数据,但是发不出去,按道理说,我在USART0发给电机数据之前将PE2设置为高电平了应该是可以发出去,可是显示PE2的LED一直表明PE2一直是低电平,数据发不出去。
求助啊
弄了好几天了,觉得很奇怪
跪求大神
小弟先在此谢过!!
此帖出自
小平头技术问答
在这句话之前延时10ms试试
一周热门 更多>