标题: 关于单片机串口通讯的问题 [打印本页]

作者: 小周单片机    时间: 2021-6-5 13:10
标题: 关于单片机串口通讯的问题
是这样的,我在51单片机写了一个串口通讯的程序,我通过串口工具在电脑上发送一个x给单片机,单片机接收到x之后,再把一个x发送给电脑
然后写出来之后的样子是我发送一个x给单片机,但是单片机一直发送x给电脑,而且再发送,单片机没有反应,我的目的是只接受一个数据,后面也能用,希望各位大佬帮帮我
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,i,j,flag,m,n;
//uchar code table[]="i get ";
void delayms(uint);
void UartInit(void)                //9600bps@11.0592MHz
{
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        PCON |= 0x00;                //smod为0
        TH1 = 0xFD;                //设定定时初值
        TL1 = 0xFD;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
        SM0=0;             //调节波特率
        SM1=1;
        REN=1;             //允许单片机串口接收
        EA=1;              //开总中断
        ES=1;                 //开串口中断
}

void main()
{        
        UartInit();            //初始化
        while(1)              
        {        
                if(flag==1)           //检测有没有接收到x
                {
                        flag=0;
                        ES=0;         //关串口中断
                        SBUF=a;            //写给发送寄存器
                        while(TI==0)           //是否写完
                        TI=0;               
                        ES=1;                    //开串口中断
                }
        }
}
void jieshou() interrupt 4
{
        RI=0;
        a=SBUF;
        flag=1;
}


作者: 压着我头发啦    时间: 2021-6-5 16:01
主函数少个;
作者: xuyaqi    时间: 2021-6-5 19:32
改了,你试一下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,i,j,flag,m,n;
//uchar code table[]="i get ";

void delayms(uint);
void UartInit(void)                //9600bps@11.0592MHz
{
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        PCON |= 0x00;                //smod为0
        TH1 = 0xFD;                //设定定时初值
        TL1 = 0xFD;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
        SM0=0;             //调节波特率
        SM1=1;
        REN=1;             //允许单片机串口接收
        EA=1;              //开总中断
        ES=1;                 //开串口中断
}

void main()
{      
        UartInit();            //初始化
        while(1)           
        {      
                if(flag==1)           //检测有没有接收到x
                {
                        EA=0;
                        flag=0;
                        SBUF=a;            //写给发送寄存器
                        while(TI==0);         //是否写完
                        TI=0;               
                        EA=1;

                }
        }
}
void jieshou() interrupt 4
{
        a=SBUF;
        RI=0;
        flag=1;
}
作者: 小周单片机    时间: 2021-6-6 12:23
压着我头发啦 发表于 2021-6-5 16:01
主函数少个;

主函数少了什么?
作者: 小周单片机    时间: 2021-6-6 12:24
xuyaqi 发表于 2021-6-5 19:32
改了,你试一下:
#include
#define uchar unsigned char

可以了,大佬,真牛,哈哈
作者: 小周单片机    时间: 2021-6-6 15:53
压着我头发啦 发表于 2021-6-5 16:01
主函数少个;

emmmmmm,我发现了,少了个分号,while后面,哈哈,真是一个细节,能难我两周,谢谢老哥




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1