打印
[51单片机]

欢迎大师们来挑刺(C51串口通信)

[复制链接]
2130|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小分子|  楼主 | 2016-9-4 11:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*******************************
MCU通过串口向电脑发送一串字符串
*******************************/

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

bit g_TranEnd = 1;                                                                  //发送完毕标志

void InitUart();
void DelayMs(uint ms);

void main()
{
        char *string = "I LOVE YOU!";
       
        InitUart();
        while (1)
        {
                if ((*string != '\0') && (1 == g_TranEnd))                //当字符串不为‘\0'且发送完标志为1时进行发送
                {
                         SBUF = *string++;
                        g_TranEnd = 0;
                        DelayMs(2);                                                                        //等待发送结束,发送一个数据帧至少要1MS,而执行一条语句一般需要几十个US,如果不延时,程序只能停留在IF处。
                   }       
        }
       
}

void InitUart()
{
        TMOD &= 0x0F;                                   //清空T1的控制位
        TMOD |= 0x20;                                   //配置T1工作方式为2,即自动重装模式;
        TH1 = 0xFD;                                           //晶振为11.0592MHZ,波特率为9600
        TL1 = TH1;                                           //将TH1中的数据添加到TL1中
        PCON = 0x00;                                   //波特率正常不倍增
        SCON = 0x50;                                   //配置串口工作模式为1,且开启接收功能
        TR1 = 1;                                           //串口的波特率发生器由T1(T2)产生,开启定时器T1;
        ES = 1;                                                   //开启串口中断
        EA = 1;                                                   //开启总中断
}

void UartIRQ() interrupt 4
{
        if (1 == TI)
        {
                 TI = 0;
                g_TranEnd = 1;
        }
               
}

void DelayMs(uint ms)   //11.0592MHZ,延时1MS
{
        uint x,y;
        for(x=ms;x>0;x--)
        {
                for(y=113;y>0;y--);
        }
}

相关帖子

沙发
xyz549040622| | 2016-9-4 13:33 | 只看该作者
c51的串口还挑刺。。。

使用特权

评论回复
板凳
jpaekeo| | 2016-9-4 16:25 | 只看该作者
用定时器2串口通信,有编程实例没有

使用特权

评论回复
地板
yklstudent| | 2016-9-4 20:53 | 只看该作者
串口发送采用查询为什么不采用常规做法,走肥猪流

使用特权

评论回复
5
llh1979| | 2016-9-4 21:04 | 只看该作者
只要你的延时时间不是刚好,就会降低效率

使用特权

评论回复
6
ihafd| | 2016-9-4 22:33 | 只看该作者
???

使用特权

评论回复
7
lihui567| | 2016-9-5 08:25 | 只看该作者
用中断法非常不错

使用特权

评论回复
8
416356084| | 2016-9-5 10:19 | 只看该作者
单纯的发送,,,

使用特权

评论回复
9
小分子|  楼主 | 2022-1-4 10:38 | 只看该作者
感谢各位老师们的指点。

使用特权

评论回复
10
qin552011373| | 2022-1-7 14:21 | 只看该作者
这个有什么挑的

使用特权

评论回复
11
ayb_ice| | 2022-1-8 08:29 | 只看该作者
不如直接查询TI标志,省空间,速度还快些

使用特权

评论回复
12
粤原点科技| | 2022-1-8 18:01 | 只看该作者
本帖最后由 粤原点科技 于 2022-1-8 18:02 编辑
unsigned char String[]="I LOVE YOU";
unsigned char *pString=String;
野指针了解一下。

使用特权

评论回复
13
xianghou| | 2022-1-11 00:10 | 只看该作者
入门者的水平还用得着挑刺啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

68

帖子

1

粉丝