久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2789|回復(fù): 15
收起左側(cè)

關(guān)于單片機(jī)IO口定義的問(wèn)題

[復(fù)制鏈接]
ID:542552 發(fā)表于 2022-6-17 23:02 | 顯示全部樓層 |閱讀模式
3.png          
    上圖,為什么在主函數(shù)外直接給P1口賦值,編譯時(shí)會(huì)報(bào)出未定義,編譯通不過(guò)?
下圖,而在主函數(shù)中賦值卻可以通過(guò)編譯。
2.png


回復(fù)

使用道具 舉報(bào)

ID:99525 發(fā)表于 2022-6-18 00:51 | 顯示全部樓層
放在main()函數(shù)前要顯性指明sfr:
sfr P1=0xFE;
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-6-18 07:15 | 顯示全部樓層
P1已經(jīng)在頭文件中被定義為寄存器的地址名:sfr P1 = 0x90;。在函數(shù)外寫(xiě)P1=0xfe;被編譯器當(dāng)變量處理當(dāng)然出現(xiàn)語(yǔ)法錯(cuò)誤。在函數(shù)內(nèi)寫(xiě)P1=0xfe;實(shí)際是把0xfe寫(xiě)入地址0x90的寄存器。
回復(fù)

使用道具 舉報(bào)

ID:372579 發(fā)表于 2022-6-18 09:51 | 顯示全部樓層
在主函數(shù)外要聲明
sbit P1 = 0xFE;
回復(fù)

使用道具 舉報(bào)

ID:542552 發(fā)表于 2022-6-18 12:04 | 顯示全部樓層
aide51 發(fā)表于 2022-6-18 09:51
在主函數(shù)外要聲明
sbit P1 = 0xFE;

1.在keil軟件嘗試了一下,編譯不通過(guò)。
2.sbit是對(duì)位進(jìn)行操作的,而且是對(duì)于能位操作的寄存器才能使用。
如P1^1 = 0XFE; 這樣是沒(méi)有問(wèn)題的
回復(fù)

使用道具 舉報(bào)

ID:542552 發(fā)表于 2022-6-18 12:05 | 顯示全部樓層
雪玉寐影 發(fā)表于 2022-6-18 00:51
放在main()函數(shù)前要顯性指明sfr:
sfr P1=0xFE;

嘗試了,編譯通過(guò)不了。
回復(fù)

使用道具 舉報(bào)

ID:383215 發(fā)表于 2022-6-18 12:29 | 顯示全部樓層
這是樓主編程不規(guī)范造成的,按照我自己的理解,標(biāo)準(zhǔn)的單片機(jī)C語(yǔ)言,第一句是頭文件,頭文件到主函數(shù)之間是庫(kù)文件、常量、變量、子函數(shù)聲明定義、以及各種數(shù)組之類(lèi)的定義,中斷函數(shù)和所有子函數(shù)必須放在主函數(shù)之后,主函數(shù)之前定義的變量是全局變量,子函數(shù)內(nèi)部定義的變量是局部變量,我就是這樣編所有的單片機(jī)程序,所以這方面我基本沒(méi)有出過(guò)問(wèn)題,有人為了偷懶,把子函數(shù)放在主函數(shù)之前,免去了函數(shù)聲明之類(lèi)的語(yǔ)句,我覺(jué)得看著就不舒服,程序就像倒著放一樣,P1=0xfe,這已經(jīng)是實(shí)質(zhì)性的賦值運(yùn)算語(yǔ)句,怎么能放在主函數(shù)前面?
回復(fù)

使用道具 舉報(bào)

ID:542552 發(fā)表于 2022-6-18 12:32 | 顯示全部樓層
wulin 發(fā)表于 2022-6-18 07:15
P1已經(jīng)在頭文件中被定義為寄存器的地址名:sfr P1 = 0x90;。在函數(shù)外寫(xiě)P1=0xfe;被編譯器當(dāng)變量處理當(dāng)然出現(xiàn) ...

那順便幫我看下下面的代碼:
P1 = 0Xfe;
while(1)
        {
                        P1= _crol_(P1,1);
                        Delay(100);
        }
為什么這個(gè)代碼沒(méi)有流水的效果?
我的理解是每一次循環(huán)P1里面的位都向左移一位,不知道我的理解是不是錯(cuò)誤.
如:第一次循環(huán)后:P1 是1111 1101
      第二次循環(huán)后:P1 是1111 1011
然后以此類(lèi)推,產(chǎn)生流水的效果。
實(shí)際過(guò)程中,第一個(gè)燈亮后,第二個(gè)燈亮,然后就一直停留在第二個(gè)燈亮,第三個(gè)燈不亮,后面的燈也不亮。
下面的代碼可以實(shí)現(xiàn)流水燈:
P1 = 0xFE;
        while(1)
        {
                for(k = 0;k < 8;k++)
                {
                        P1= _crol_(P1,1);
                        Delay(100);
                }
        }
回復(fù)

使用道具 舉報(bào)

ID:542552 發(fā)表于 2022-6-18 12:40 | 顯示全部樓層
kmsj 發(fā)表于 2022-6-18 12:29
這是樓主編程不規(guī)范造成的,按照我自己的理解,標(biāo)準(zhǔn)的單片機(jī)C語(yǔ)言,第一句是頭文件,頭文件到主函數(shù)之間是 ...

學(xué)習(xí)了,學(xué)習(xí)了。出現(xiàn)了語(yǔ)法上的錯(cuò)誤。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-6-18 13:35 | 顯示全部樓層
51520 發(fā)表于 2022-6-18 12:32
那順便幫我看下下面的代碼:
P1 = 0Xfe;
while(1)
  1. #include <reg51.H>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. void Delay(uint k)
  6. {
  7.         uint i,j;
  8.         for(i=k;i>0;i--)
  9.                 for(j=110;j>0;j--);
  10. }

  11. void main()
  12. {
  13.         P1=0xfe;
  14.         while(1)
  15.         {
  16.                 P1= _crol_(P1,1);
  17.                 Delay(100);
  18.         }
  19. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:824490 發(fā)表于 2022-6-18 17:12 | 顯示全部樓層
你這個(gè)是函數(shù)外的賦值代碼,當(dāng)然報(bào)錯(cuò)了。
回復(fù)

使用道具 舉報(bào)

ID:491577 發(fā)表于 2022-6-18 18:31 | 顯示全部樓層
51520 發(fā)表于 2022-6-18 12:32
那順便幫我看下下面的代碼:
P1 = 0Xfe;
while(1)

你的Delay(100);是延長(zhǎng)100us嗎?如果是的話(huà)你的程序其實(shí)已經(jīng)實(shí)現(xiàn)了流水燈的效果,只是你的眼睛不行沒(méi)有看出來(lái)而已。
回復(fù)

使用道具 舉報(bào)

ID:542552 發(fā)表于 2022-6-18 23:21 | 顯示全部樓層

現(xiàn)在可以了,麻煩了。
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2022-6-21 17:17 | 顯示全部樓層
kmsj 發(fā)表于 2022-6-18 12:29
這是樓主編程不規(guī)范造成的,按照我自己的理解,標(biāo)準(zhǔn)的單片機(jī)C語(yǔ)言,第一句是頭文件,頭文件到主函數(shù)之間是 ...

你的程序肯定只有一個(gè).c文件吧
回復(fù)

使用道具 舉報(bào)

ID:383215 發(fā)表于 2022-6-21 23:28 | 顯示全部樓層
天ノ憶 發(fā)表于 2022-6-21 17:17
你的程序肯定只有一個(gè).c文件吧

目前只有一個(gè)c文件夠用了,以前程序越編越長(zhǎng),覺(jué)得可以分成幾個(gè)模塊就好了,后來(lái)發(fā)現(xiàn)Keil有折疊功能,我把所有程序折疊起來(lái),需要修改哪個(gè)打開(kāi)哪個(gè),我現(xiàn)在編的程序不復(fù)雜,不到2000行,等到折疊都很麻煩的時(shí)候再考慮分成幾個(gè)模塊。
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2022-6-24 12:52 | 顯示全部樓層
kmsj 發(fā)表于 2022-6-21 23:28
目前只有一個(gè)c文件夠用了,以前程序越編越長(zhǎng),覺(jué)得可以分成幾個(gè)模塊就好了,后來(lái)發(fā)現(xiàn)Keil有折疊功能,我 ...

肯定是一個(gè)模塊一個(gè).C文件這樣寫(xiě)更方便,需要哪個(gè)模塊直接復(fù)制過(guò)來(lái)改一下配置
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲在线视频 | 天天射色综合 | 天天夜夜操 | 色婷综合网 | 国产精品一区二区免费 | 中文字幕视频在线观看 | 国产一区二区三区在线看 | 国产亚洲精品久久午夜玫瑰园 | 久久久精品一区 | 91久久综合 | 日本精品视频一区二区 | 天堂一区二区三区 | 亚洲综合区| 国产高清精品一区二区三区 | 精品久久久久久久 | 99精品视频在线观看 | 羞羞的视频在线观看 | 色偷偷888欧美精品久久久 | 亚洲综合99 | 91在线视频国产 | 羞羞视频免费观 | 婷婷综合在线 | 一级片网站视频 | 久久亚洲国产精品日日av夜夜 | 久久久国产精品入口麻豆 | 精品在线一区 | 美女天天干 | 欧美一级欧美一级在线播放 | 一区二区在线观看免费视频 | 福利视频二区 | 久久久国产精品视频 | 久久久久久久久99精品 | 三级成人在线观看 | 久久中文字幕一区 | 91精品国产91久久久久久吃药 | 欧美中文字幕一区 | 99精品九九 | av免费观看在线 | 亚洲久久一区 | 欧美1页| 国产精品黄视频 |