• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

AVR ATMEG16A串口发送时为何不能连续调用发送函数

SANNA 2015-04-23 浏览量:1245

我现用的是AVR ATMEG16A单片机,在用USART串口通信时遇到了百思不得其解的问题,就是在调用串口发送函数发送完一串字符后,若紧接着再调用这个函数就会丢失后面的一次发送过程(就是在串口助手中没有收到("    !注意:字1111111!!!!!.  "),若在这两次的中间加入200ms 的延时,就不会丢失,在串口助手中只能收到第一次和第三次的信息,代码如下:

USART_txout("本产品支持中英文显示,最大显示32个汉字或64个字母/符号,自动换行。",66);
    USART_txout("    !注意:字1111111!!!!!.  ",30);
    clear_screen();
   display_graphic_32x32(1,64,hao);
   display_GB2312string(3,105,"!");
   MS_delay(200);
   USART_txout("    !注意:字母或标点符号只支持英文输入法,否则不会显示.  ",66);

发送函数如下:

void USART_txout(uchar *data,uchar length)
{
      unsigned char i=0;
   for(i=0;i     {
     while ( !( UCSRA & (1<   if(UCSRA&(1<              UCSRA|=(1<   
         UDR = *(data++);
    }
             

    delay(200);//8M的频率,加了和没加也没区别
}

 

void delay(int a)
{
  int i,j;
  for(i=0;i       for(j=0;j<100;j++);
}

不知是不是没用好TXC还是要怎样,做了很多偿试就是不能连续调用,

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  •       加上延时函数
    • 发布于 2015-04-23
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • 发第二句话的时候程序没死掉?
    • 发布于2015-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序能运行,就是不能看到 !注意:字1111111!!!!!.这一串传到助手上,且试了只要在两次发送函数间插入100ms延时就能都发送了,若不加这个延时就不行,8M的CLK下加了1000周期的指令都 不行(试了delay(5),delay(15),delay(20)都不管用,而加个约100ms的MS_delay(200);就可以了),不知到底是哪里写不对,还是说就只能这样了
    • 发布于2015-04-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

AVR ATMEG16A串口发送时为何不能连续调用发送函数