找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1336|回复: 6
收起左侧

关于单片机串口通讯的问题

[复制链接]
ID:890771 发表于 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;
}

回复

使用道具 举报

ID:716656 发表于 2021-6-5 16:01 | 显示全部楼层
主函数少个;
回复

使用道具 举报

ID:94031 发表于 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;
}
回复

使用道具 举报

ID:890771 发表于 2021-6-6 12:23 | 显示全部楼层

主函数少了什么?
回复

使用道具 举报

ID:890771 发表于 2021-6-6 12:24 | 显示全部楼层
xuyaqi 发表于 2021-6-5 19:32
改了,你试一下:
#include
#define uchar unsigned char

可以了,大佬,真牛,哈哈
回复

使用道具 举报

ID:890771 发表于 2021-6-6 15:53 | 显示全部楼层

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表