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

標題: 單片機向主機發送字符串程序,有幾個問題請教一下 [打印本頁]

作者: QWE4562012    時間: 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 (20.62 KB, 下載次數: 75)

圖片1.png

作者: 小黑的大表舅    時間: 2020-7-9 12:01
不是函數聲明,就是函數,功能不是標的清清楚楚嗎。
while(T1=0)是把T1賦值為0,同時該表達式的結果也是0,所以永遠不會執行while下面的循環
while(T1==0)是如果T1的值為0,T1==0表達式的結果為1,則執行下面的循環;反之,表達式的結果為0,不執行下面的循環
第三個不是很清楚,應該是打印字符吧,打印字符到這個子函數里
作者: wulin    時間: 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 回車換行。
作者: lwh999995    時間: 2020-7-9 12:44
1. 你打void錯了,是函數沒有返回值的意思
2. == 判斷的條件, = 賦值
3. \0  字符串結尾都有\0,  \r\n 換行
作者: wangyuejia2015    時間: 2020-7-9 13:41
被其他調用的函數一定放在前面 如果用不同的.c文件 把函數寫到。h文件其他文件 引用這個。h文件也就可以調用該函數了
作者: QWE4562012    時間: 2020-7-10 09:41
小黑的大表舅 發表于 2020-7-9 12:01
不是函數聲明,就是函數,功能不是標的清清楚楚嗎。
while(T1=0)是把T1賦值為0,同時該表達式的結果也是0 ...

您好  viod main()和viod 其他有怎樣的區別?加了main()就是主函數是嗎
作者: QWE4562012    時間: 2020-7-10 09:42
lwh999995 發表于 2020-7-9 12:44
1. 你打void錯了,是函數沒有返回值的意思
2. == 判斷的條件, = 賦值
3. \0  字符串結尾都有\0,  \r\n 換 ...

\0啥意思啊
作者: QWE4562012    時間: 2020-7-10 09:44
小黑的大表舅 發表于 2020-7-9 12:01
不是函數聲明,就是函數,功能不是標的清清楚楚嗎。
while(T1=0)是把T1賦值為0,同時該表達式的結果也是0 ...

你說的很清楚,程序說的不是很清楚
作者: QWE4562012    時間: 2020-7-10 09:49
wulin 發表于 2020-7-9 12:44
1.主函數前面的三個函數是子函數,供主函數調用,放在主函數前面一般不需要另外聲明。
2.==是測試,=是賦 ...

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

4.那原來C是十六進制數是嗎?如果要將數據B轉換成字符碼就是b+‘A’???十六進制和字符碼有怎樣的對應關系呢?
作者: QWE4562012    時間: 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')------------------------這個是標準的格式嗎
作者: QWE4562012    時間: 2020-7-10 10:02
lwh999995 發表于 2020-7-9 12:44
1. 你打void錯了,是函數沒有返回值的意思
2. == 判斷的條件, = 賦值
3. \0  字符串結尾都有\0,  \r\n 換 ...

是加了‘\0’---------加了單引號
作者: QWE4562012    時間: 2020-7-10 10:04
wangyuejia2015 發表于 2020-7-9 13:41
被其他調用的函數一定放在前面 如果用不同的.c文件 把函數寫到。h文件其他文件 引用這個。h文件也就可以調 ...

能舉個例子不
作者: hei512020    時間: 2020-7-10 10:11
QWE4562012 發表于 2020-7-10 09:41
您好  viod main()和viod 其他有怎樣的區別?加了main()就是主函數是嗎

main()就表示主函數,和加不加void沒有關系,加void說明主函數沒有返回值,void可以省略不寫
作者: QWE4562012    時間: 2020-7-10 10:12
hei512020 發表于 2020-7-10 10:11
main()就表示主函數,和加不加void沒有關系,加void說明主函數沒有返回值,void可以省略不寫

有返回值怎么寫
作者: QWE4562012    時間: 2020-7-10 11:39
wulin 發表于 2020-7-9 12:44
1.主函數前面的三個函數是子函數,供主函數調用,放在主函數前面一般不需要另外聲明。
2.==是測試,=是賦 ...

你好 哥  幫忙推薦一款適合我學習的開發板  我去學習
作者: 笨笨兔    時間: 2020-7-10 12:46
建議樓主找一本c語言方面的書,稍微閱讀一下,免得在這里浪費大家的時間。。。。。。
作者: QWE4562012    時間: 2020-7-11 11:08
笨笨兔 發表于 2020-7-10 12:46
建議樓主找一本c語言方面的書,稍微閱讀一下,免得在這里浪費大家的時間。。。。。。

我的帖子  你不要吭聲
作者: 隨風飄遠    時間: 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);------------這括號里是啥意思
表示調用函數的參數是 指針




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1