找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1518|回复: 4
打印 上一主题 下一主题
收起左侧

求详解这个单片机字符发送函数,初学不久看不懂。拜托各位大师

[复制链接]
跳转到指定楼层
楼主
ID:516910 发表于 2019-4-29 16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
15黑币
void Sent_UART(u8 dat)
{
        ES = 0;
        TI=0;
        SBUF = dat;
        while(!TI);
TI = 0;
ES = 1;
}

void Uart_Send_String(u8 *string)
{
        while(*string)
        {
                Sent_UART(*string++);
                Delay_Us(5);
        }

}

void ESP8266_Init()
{
        Uart_Send_String("AT\r\n");
        Delay_ms(3000);
        Uart_Send_String("AT\r\n");
        Delay_ms(3000);
                                Uart_Send_String("AT+CIPMUX=1\r\n");
        Delay_ms(3000);
                                Uart_Send_String("AT+CIPSERVER=1,8080\r\n");
}

最佳答案

查看完整内容

最重要的是两个子函数值得注意 void Sent_UART(u8 dat) { ES = 0;//开始发送,关串口中断 TI=0;//清空标志位 SBUF = dat;//SBUF寄存器写入数据 while(!TI); TI = 0; ES = 1;//开启串口中断 } void Uart_Send_String(u8 *string) { while(*string) { Sent_UART(*string++); Delay_Us(5);//延时 } } ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:90663 发表于 2019-4-29 16:01 | 只看该作者
最重要的是两个子函数值得注意
void Sent_UART(u8 dat)
{
        ES = 0;//开始发送,关串口中断
        TI=0;//清空标志位
        SBUF = dat;//SBUF寄存器写入数据
        while(!TI);
        TI = 0;
        ES = 1;//开启串口中断
}

void Uart_Send_String(u8 *string)
{
        while(*string)
        {
                Sent_UART(*string++);
                Delay_Us(5);//延时
        }

}
while(*string) 相当于while( *string != 0) 检查的是p所指向的地址中的数据是否为0,但前提是p不能为NULL
回复

使用道具 举报

板凳
ID:516910 发表于 2019-4-30 10:49 | 只看该作者
搂猫睡觉的鱼 发表于 2019-4-30 00:01
最重要的是两个子函数值得注意
void Sent_UART(u8 dat)
{

    *string 带入的是Uart_Send_String("AT\r\n");的内存地址 那么"AT\r\n"地址指向的值是不是指的ASCII编码里边对应的十六进制的值呢?意思就是要逐个字节发送这些值吗?
   还有Uart_Send_String("AT\r\n");这样的语句是什么用法呢?("AT\r\n")这个语法是怎样的呢?
回复

使用道具 举报

地板
ID:516910 发表于 2019-4-30 11:11 | 只看该作者
搂猫睡觉的鱼 发表于 2019-4-30 00:01
最重要的是两个子函数值得注意
void Sent_UART(u8 dat)
{

#include <stdio.h>引用这个头文件发送AT指令不是更简单吗
回复

使用道具 举报

5#
ID:90663 发表于 2019-5-3 10:22 | 只看该作者
首先你说的stdio.h是标准C库里的标准输入输出头文件 并不包括串口的收发,Uart_Send_String("AT\r\n");可以对照具体函数内容看,这个是一位一位发送的直到你的字符串结束,while(*string)就是做检测的。更具体的东西建议你单步调试查看寄存器的相关值,这样更便于理解。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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