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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5613|回復: 16
打印 上一主題 下一主題
收起左側

關于51單片機的IO位定義

  [復制鏈接]
跳轉到指定樓層
樓主
ID:228371 發表于 2017-10-22 13:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大佬小弟有個地方不明白能不能幫忙解釋一下;
為什么51單片機的IO在用的時候要進行位定義,進行sbit;
不然就會出錯;而直接用哪個口就不會。
比如:我用P0口就不會;
用P0^0;就會出錯;必須進行宏定義或者位操作才不會
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:240022 發表于 2017-10-22 14:30 | 只看該作者
不用位定義,異或結果為一個字節,如果位定義,編譯匯編后使用setb,clr操作位。 所以你現在不用位定義,使用p1異或某一位時,是字節運算,把p1的其它位屏蔽掉,否則取反沒什么 意義。
回復

使用道具 舉報

板凳
ID:241864 發表于 2017-10-22 17:25 | 只看該作者
編譯器編譯規則的問題吧
回復

使用道具 舉報

地板
ID:164602 發表于 2017-10-23 09:03 | 只看該作者
其實,這個問題出在REG51.H頭文件上。
你查看一下這個頭文件就知道,它里面定義了P0、P1、P2、P3,而沒有定義位,所以,你的程序在開始時,就要進行位定義sbit,而不用對口進行定義。
如果你在頭文件中,加上I/O口位的定義,程序里也是可以不定義就直接使用的。
像STC15的頭文件,就定義了位的,可以不再定義而直接使用。
好好理解一下頭文件的作用吧。

評分

參與人數 1黑幣 +5 收起 理由
botgs + 5 贊一個!

查看全部評分

回復

使用道具 舉報

5#
ID:123289 發表于 2017-10-23 13:50 | 只看該作者
其實,每一個都是要定義的,否則編譯系統不認識它,包括P0也不認識。
只是有些定義被“隱藏”了,你不知道而矣,這其中就有P0。
這個隱藏的場所,常常在:INCLUDE XXXX.H中,不信你打開XXXX.H看看,里面有沒有對P0的定義。
回復

使用道具 舉報

6#
ID:212797 發表于 2017-10-24 17:21 | 只看該作者
看看頭文件就明白了,在頭文件里,明確的將P0映射到對應的寄存器地址上,P0就變成一個代號,也就是說,P0已經登記在冊,只要我們在文件中使用它,編譯器知道它指的是什么東西。而P0^0在其他的地方并沒有出現過,要使用當然要自己先聲明或者定義了(注意:P0^0是在異或運算)。
回復

使用道具 舉報

7#
ID:242568 發表于 2017-10-24 22:11 | 只看該作者
位綁定是位,sbit
回復

使用道具 舉報

8#
ID:242746 發表于 2017-10-25 12:15 | 只看該作者
頭文件沒加載或者有問題reg51.h
回復

使用道具 舉報

9#
ID:242770 發表于 2017-10-25 14:02 | 只看該作者
sfr P0    = 0x80; sfr P1    = 0x90; sfr P2    = 0xA0; sfr P3    = 0xB0;
回復

使用道具 舉報

10#
ID:242770 發表于 2017-10-25 14:05 | 只看該作者
sfr P0    = 0x80; sfr P1    = 0x90; sfr P2    = 0xA0; sfr P3    = 0xB0;這是reg52.h頭文件中的定義,之所以你用P0口不會報錯,就是因為頭文件中已經有定義,但是沒有P0^0之類的定義,所以就錯誤,總之,定義一下是沒錯的,即使只是為了增加程序可讀性,對吧!!
回復

使用道具 舉報

11#
ID:242895 發表于 2017-10-25 19:39 | 只看該作者
P0 P1也是定義過的 在reg52.h里看下
回復

使用道具 舉報

12#
ID:1032632 發表于 2023-4-26 08:19 | 只看該作者
重復定義了 頭文件里面有  就直接用P00......Pxx
回復

使用道具 舉報

13#
ID:1010435 發表于 2023-4-26 16:28 | 只看該作者
在REGX52.H中每個針腳都定義了,用的是P0_0,不是P0^0,直接用P0_0就可以。
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
回復

使用道具 舉報

14#
ID:883242 發表于 2023-4-26 21:01 | 只看該作者
因為在c語言里面P0^0是P0異或0的意思。

C51為了擴展c語言讓其能更好的支持51單片機,借用了異或運算符^,但是同時規定必須與sbit配合服用才表示位定義,這樣才不會跟基本c語言語法發生沖突。
回復

使用道具 舉報

15#
ID:1074288 發表于 2023-4-27 09:21 | 只看該作者
在頭文件里,明確的將P0映射到對應的寄存器地址上,P0就變成一個代號,也就是說,P0已經登記在冊,只要我們在文件中使用它,編譯器知道它指的是什么東西。
回復

使用道具 舉報

16#
ID:879348 發表于 2023-4-27 10:01 | 只看該作者
這是編譯器的限制和規則,沒必要深究STC的頭文件有定義可以直接P00
回復

使用道具 舉報

17#
ID:1034262 發表于 2023-4-27 10:01 | 只看該作者
樓主,你將頭文件去掉,你會發現連P0都認不得。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区在线看 | 亚洲成人中文字幕 | 中文字幕亚洲精品在线观看 | 欧美一区二区 | 色综合美女 | 91麻豆精品国产91久久久更新资源速度超快 | 午夜理伦三级理论三级在线观看 | 96av麻豆蜜桃一区二区 | 日本黄视频在线观看 | 99国产精品99久久久久久 | 四虎永久免费地址 | 一区二区三区四区在线视频 | 亚洲一区二区在线播放 | 狠狠草视频 | 人人色视频 | 亚洲精品欧美一区二区三区 | 成人在线一区二区三区 | 妹子干综合 | 欧美区在线观看 | 在线观看国产三级 | 91精品国产一区二区在线观看 | 日韩精品一区二区三区在线播放 | h小视频 | 国产精品国产a级 | 欧美一区二区三区四区视频 | 亚洲淫视频 | 能看的av网站 | 日韩一区二区三区四区五区六区 | 毛色毛片免费看 | av黄色在线| 亚洲福利在线观看 | 韩日在线 | 亚洲国产一区二区三区在线观看 | 91国产视频在线 | 欧美群妇大交群中文字幕 | 久久中文字幕一区 | 日韩av中文 | 国产精品久久久久久中文字 | 久久av综合 | 亚洲精品成人在线 | 国产精品综合 |