欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5101|回復: 17
收起左側

單片機向主機發送字符串程序,有幾個問題請教一下

[復制鏈接]
ID:668004 發表于 2020-7-9 09:57 | 顯示全部樓層 |閱讀模式
/*        名稱:單片機向主機發送字符串
        說明:單片機按一定的時間間隔向主機發送字符串,發送內容在虛擬終

端顯示。
*/
#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
回復

使用道具 舉報

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 換行
回復

使用道具 舉報

ID:775776 發表于 2020-7-9 13:41 | 顯示全部樓層
被其他調用的函數一定放在前面 如果用不同的.c文件 把函數寫到。h文件其他文件 引用這個。h文件也就可以調用該函數了
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 09:41 | 顯示全部樓層
小黑的大表舅 發表于 2020-7-9 12:01
不是函數聲明,就是函數,功能不是標的清清楚楚嗎。
while(T1=0)是把T1賦值為0,同時該表達式的結果也是0 ...

您好  viod main()和viod 其他有怎樣的區別?加了main()就是主函數是嗎
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 09:42 | 顯示全部樓層
lwh999995 發表于 2020-7-9 12:44
1. 你打void錯了,是函數沒有返回值的意思
2. == 判斷的條件, = 賦值
3. \0  字符串結尾都有\0,  \r\n 換 ...

\0啥意思啊
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 09:44 | 顯示全部樓層
小黑的大表舅 發表于 2020-7-9 12:01
不是函數聲明,就是函數,功能不是標的清清楚楚嗎。
while(T1=0)是把T1賦值為0,同時該表達式的結果也是0 ...

你說的很清楚,程序說的不是很清楚
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 09:49 | 顯示全部樓層
wulin 發表于 2020-7-9 12:44
1.主函數前面的三個函數是子函數,供主函數調用,放在主函數前面一般不需要另外聲明。
2.==是測試,=是賦 ...

1.放在后面是需要聲明是嗎?

4.那原來C是十六進制數是嗎?如果要將數據B轉換成字符碼就是b+‘A’???十六進制和字符碼有怎樣的對應關系呢?
回復

使用道具 舉報

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')------------------------這個是標準的格式嗎
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 10:02 | 顯示全部樓層
lwh999995 發表于 2020-7-9 12:44
1. 你打void錯了,是函數沒有返回值的意思
2. == 判斷的條件, = 賦值
3. \0  字符串結尾都有\0,  \r\n 換 ...

是加了‘\0’---------加了單引號
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 10:04 | 顯示全部樓層
wangyuejia2015 發表于 2020-7-9 13:41
被其他調用的函數一定放在前面 如果用不同的.c文件 把函數寫到。h文件其他文件 引用這個。h文件也就可以調 ...

能舉個例子不
回復

使用道具 舉報

ID:800866 發表于 2020-7-10 10:11 | 顯示全部樓層
QWE4562012 發表于 2020-7-10 09:41
您好  viod main()和viod 其他有怎樣的區別?加了main()就是主函數是嗎

main()就表示主函數,和加不加void沒有關系,加void說明主函數沒有返回值,void可以省略不寫
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 10:12 | 顯示全部樓層
hei512020 發表于 2020-7-10 10:11
main()就表示主函數,和加不加void沒有關系,加void說明主函數沒有返回值,void可以省略不寫

有返回值怎么寫
回復

使用道具 舉報

ID:668004 發表于 2020-7-10 11:39 | 顯示全部樓層
wulin 發表于 2020-7-9 12:44
1.主函數前面的三個函數是子函數,供主函數調用,放在主函數前面一般不需要另外聲明。
2.==是測試,=是賦 ...

你好 哥  幫忙推薦一款適合我學習的開發板  我去學習
回復

使用道具 舉報

ID:158375 發表于 2020-7-10 12:46 | 顯示全部樓層
建議樓主找一本c語言方面的書,稍微閱讀一下,免得在這里浪費大家的時間。。。。。。
回復

使用道具 舉報

ID:668004 發表于 2020-7-11 11:08 | 顯示全部樓層
笨笨兔 發表于 2020-7-10 12:46
建議樓主找一本c語言方面的書,稍微閱讀一下,免得在這里浪費大家的時間。。。。。。

我的帖子  你不要吭聲
回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表