找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机向主机发送字符串程序,有几个问题请教一下

[复制链接]
跳转到指定楼层
楼主
/*        名称:单片机向主机发送字符串
        说明:单片机按一定的时间间隔向主机发送字符串,发送内容在虚拟终

端显示。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//延时
void DelayMS(uint ms)
{
        uchar i;
        while(ms--) for(i=0;i<120;i++);
}
//向串口发送字符
void Putc_to_SerialPort(uchar c)
{
        SBUF=c;
        while(TI==0);
        TI=0;
}
//向串口发送字符串
void Puts_to_SerialPort(uchar *s)
{
        while(*s!='\0')
        {        
                Putc_to_SerialPort(*s);
                s++;
                DelayMS(5);
        }
}
//主程序
void main()
{
        uchar c=0;
        SCON=0x40;                //串口模式1
        TMOD=0x20;                //T1工作模式2
        TH1=0xfd;                //波特率9600
        TL1=0xfd;
        PCON=0x00;                //波特率不倍增
        TI=0;
        TR1=1;
        DelayMS(200);
        //向主机发送数据
        Puts_to_SerialPort("Receiving From 8051...\r\n");
        Puts_to_SerialPort("-------------------------------\r\n");
        DelayMS(50);
        while(1)
        {
                Putc_to_SerialPort(c+'A');
                DelayMS(100);
                Putc_to_SerialPort(' ');
                DelayMS(100);
                if(c==25)        //每输出一遍后加横线
                {
                        Puts_to_SerialPort("\r

\n-------------------------------\r\n");
                        DelayMS(100);
                }
                c=(c+1)%26;
                if(c%10==0)                //每输出10个字符后换行
                {
                        Puts_to_SerialPort("\r\n");
                        DelayMS(100);        
                }
        }
}


问题:
1.主函数前面的三个viod是函数声明吗?


2.while(TI==0);
        TI=0;--------------==0和=0是啥区别?

3.while(*s!='\0')Putc_to_SerialPort(*s);------------这括号里是啥意思


Puts_to_SerialPort("Receiving From 8051...\r\n");
        Puts_to_SerialPort("-------------------------------\r\n");
        DelayMS(50);
        while(1)
        {
                Putc_to_SerialPort(c+'A');
                DelayMS(100);

------------\r\n和c+'A'和("\r\n");都是表示啥?



图片1.png (20.62 KB, 下载次数: 45)

图片1.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:608600 发表于 2020-7-9 12:01 | 只看该作者
不是函数声明,就是函数,功能不是标的清清楚楚吗。
while(T1=0)是把T1赋值为0,同时该表达式的结果也是0,所以永远不会执行while下面的循环
while(T1==0)是如果T1的值为0,T1==0表达式的结果为1,则执行下面的循环;反之,表达式的结果为0,不执行下面的循环
第三个不是很清楚,应该是打印字符吧,打印字符到这个子函数里
回复

使用道具 举报

板凳
ID:213173 发表于 2020-7-9 12:44 | 只看该作者
1.主函数前面的三个函数是子函数,供主函数调用,放在主函数前面一般不需要另外声明。
2.==是测试,=是赋值,while(TI==0);测试括号内容为假跳出死循环。
3.while(*s!='\0')Putc_to_SerialPort(*s); while(*s!='\0')测试指针地址结束符号,*s!='\0'为假跳出死循环。
4.c+'A'将数据c转换成字符码(ASCII码)便于特定显示器显示。
5.\r\n 回车换行。
回复

使用道具 举报

地板
ID:207421 发表于 2020-7-9 12:44 | 只看该作者
1. 你打void错了,是函数没有返回值的意思
2. == 判断的条件, = 赋值
3. \0  字符串结尾都有\0,  \r\n 换行
回复

使用道具 举报

5#
ID:775776 发表于 2020-7-9 13:41 | 只看该作者
被其他调用的函数一定放在前面 如果用不同的.c文件 把函数写到。h文件其他文件 引用这个。h文件也就可以调用该函数了
回复

使用道具 举报

6#
ID:668004 发表于 2020-7-10 09:41 | 只看该作者
小黑的大表舅 发表于 2020-7-9 12:01
不是函数声明,就是函数,功能不是标的清清楚楚吗。
while(T1=0)是把T1赋值为0,同时该表达式的结果也是0 ...

您好  viod main()和viod 其他有怎样的区别?加了main()就是主函数是吗
回复

使用道具 举报

7#
ID:668004 发表于 2020-7-10 09:42 | 只看该作者
lwh999995 发表于 2020-7-9 12:44
1. 你打void错了,是函数没有返回值的意思
2. == 判断的条件, = 赋值
3. \0  字符串结尾都有\0,  \r\n 换 ...

\0啥意思啊
回复

使用道具 举报

8#
ID:668004 发表于 2020-7-10 09:44 | 只看该作者
小黑的大表舅 发表于 2020-7-9 12:01
不是函数声明,就是函数,功能不是标的清清楚楚吗。
while(T1=0)是把T1赋值为0,同时该表达式的结果也是0 ...

你说的很清楚,程序说的不是很清楚
回复

使用道具 举报

9#
ID:668004 发表于 2020-7-10 09:49 | 只看该作者
wulin 发表于 2020-7-9 12:44
1.主函数前面的三个函数是子函数,供主函数调用,放在主函数前面一般不需要另外声明。
2.==是测试,=是赋 ...

1.放在后面是需要声明是吗?

4.那原来C是十六进制数是吗?如果要将数据B转换成字符码就是b+‘A’???十六进制和字符码有怎样的对应关系呢?
回复

使用道具 举报

10#
ID:668004 发表于 2020-7-10 09:54 | 只看该作者
wulin 发表于 2020-7-9 12:44
1.主函数前面的三个函数是子函数,供主函数调用,放在主函数前面一般不需要另外声明。
2.==是测试,=是赋 ...

void Puts_to_SerialPort(uchar *s)
{
        while(*s!='\0')
        {        
                Putc_to_SerialPort(*s);
                s++;
                DelayMS(5);


1.这个void Puts_to_SerialPort(uchar *s)------------定义这个S变量的时候  为什么前面还加一个*?

2. while(*s!='\0')------------------------这个是标准的格式吗
回复

使用道具 举报

11#
ID:668004 发表于 2020-7-10 10:02 | 只看该作者
lwh999995 发表于 2020-7-9 12:44
1. 你打void错了,是函数没有返回值的意思
2. == 判断的条件, = 赋值
3. \0  字符串结尾都有\0,  \r\n 换 ...

是加了‘\0’---------加了单引号
回复

使用道具 举报

12#
ID:668004 发表于 2020-7-10 10:04 | 只看该作者
wangyuejia2015 发表于 2020-7-9 13:41
被其他调用的函数一定放在前面 如果用不同的.c文件 把函数写到。h文件其他文件 引用这个。h文件也就可以调 ...

能举个例子不
回复

使用道具 举报

13#
ID:800866 发表于 2020-7-10 10:11 | 只看该作者
QWE4562012 发表于 2020-7-10 09:41
您好  viod main()和viod 其他有怎样的区别?加了main()就是主函数是吗

main()就表示主函数,和加不加void没有关系,加void说明主函数没有返回值,void可以省略不写
回复

使用道具 举报

14#
ID:668004 发表于 2020-7-10 10:12 | 只看该作者
hei512020 发表于 2020-7-10 10:11
main()就表示主函数,和加不加void没有关系,加void说明主函数没有返回值,void可以省略不写

有返回值怎么写
回复

使用道具 举报

15#
ID:668004 发表于 2020-7-10 11:39 | 只看该作者
wulin 发表于 2020-7-9 12:44
1.主函数前面的三个函数是子函数,供主函数调用,放在主函数前面一般不需要另外声明。
2.==是测试,=是赋 ...

你好 哥  帮忙推荐一款适合我学习的开发板  我去学习
回复

使用道具 举报

16#
ID:158375 发表于 2020-7-10 12:46 | 只看该作者
建议楼主找一本c语言方面的书,稍微阅读一下,免得在这里浪费大家的时间。。。。。。
回复

使用道具 举报

17#
ID:668004 发表于 2020-7-11 11:08 | 只看该作者
笨笨兔 发表于 2020-7-10 12:46
建议楼主找一本c语言方面的书,稍微阅读一下,免得在这里浪费大家的时间。。。。。。

我的帖子  你不要吭声
回复

使用道具 举报

18#
ID:319023 发表于 2020-7-11 11:22 | 只看该作者
还是 去学习C语言吧。  
1.主函数前面的三个viod是是表示子函数调用  无返回值

2.while(TI==0);
        TI=0;----------
==0   是判断 左右两边值是否相等
=0是  把0  赋值给左边

3.while(*s!='\0')Putc_to_SerialPort(*s);------------这括号里是啥意思
表示调用函数的参数是 指针
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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