求助,单片机串口全双工

2019-07-15 19:53发布

一个单片机串口同时接收、发送数据,为什么不能实现?程序如下:
#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;
               
          }
}

本人新手,请大神们指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
lifekiller
2019-07-16 03:31
依然落叶飘零 发表于 2014-5-7 11:27
程序只有一半,串口通信不工作多数都是波特率不对。例外串口中断的时候要对发送触发的中断和接收触发的中断 ...

不好意思,不知道怎么就发了半段,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;
               
          }
}



一周热门 更多>