请教大神一个ATmega128的事情

2019-03-24 20:59发布

我最近做单片机的程序,需要通过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一直是低电平,数据发不出去。 求助啊 弄了好几天了,觉得很奇怪 跪求大神 小弟先在此谢过!! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
zhanghao26
1楼-- · 2019-03-25 06:39
PORTE &= ~(1<<2);//再将PE2设置为低电平  这样的话就能设置舵机发出数据,单片机收

在这句话之前延时10ms试试

一周热门 更多>