微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助,单片机串口全双工

求助,单片机串口全双工

时间:10-02 整理:3721RD 点击:
一个单片机串口同时接收、发送数据,为什么不能实现?程序如下:
#include<reg51.h>
#include"type.h"
uint8 SigNum[100];
int i;
void USART_Init(void)
{
        TMOD = 0x20;//将定时器1设置为方式2,8位自动重装模式
        SCON = 0x50;//串口控制寄存器,使串口工作在方式1,并且接受使能
        PCON = 0x00;//该寄存器第一位为串口波特率倍速控制位,这里不倍速
        TH1 = 0xfd;  //11.0592M晶振,波特率9600
        TL1 = 0xfd;
        TR1 = 1;//开启定时器1
        ES = 1;//开启串口中断
        EA = 1;//开启总中断
}
void Send_Dat(uint8 dat)
{       
        SBUF = dat;
        while(TI==0);
        TI=0;
}
void main()
{
        uint8 a=0;
        USART_Init();
        while(1)
        {         
                   for (i=0;i<100;i++)
        {  
                  SBUF= SigNum[i];
                  
                         while(TI==0);
                 TI=0;
                        }
                i=0;       
        }
}
void USART_INTR() interrupt 4        //串口中断
{
        if(RI)
        {
                RI = 0;
        for(i=0;i<100;i++)
        {       
        SigNum[i]=SBUF;       
                }               
        i=0;
               
          }
}
本人新手,请大神们指教

程序只有一半,串口通信不工作多数都是波特率不对。例外串口中断的时候要对发送触发的中断和接收触发的中断都处理。

不好意思,不知道怎么就发了半段,void main(){
        uint8 a=0;
        USART_Init();
        while(1)
        {         
                   for (i=0;i<100;i++)
        {  
                  SBUF= SigNum;
                  
                         while(TI==0);
                 TI=0;
                        }
                i=0;
      }
}
void USART_INTR() interrupt 4        //串口中断
{
        if(RI)
        {
                RI = 0;
        for(i=0;i<100;i++)
        {       
        SigNum=SBUF;        SBUF= SigNum; while(TI==0);
                TI=0;
                }
                       
        i=0;
               
          }
}

你就犯了我说的错误了,串口没有对发送中断处理。你可以在发送函数Send_Dat中把中断关了,或者在中断函数里面加

  1. if(TI )
  2. {
  3.     TI = 0;
  4. }

复制代码


否则TI=1的时候不断触发中断。

谢谢,明白了,我再试试

单片机作为从机,串口全双工工作还有点意义,作为主机,暂时我还没有看到明显的效果!为此思考中……

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top