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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11423|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

求助,如何定義51單片機中位尋址的位為標(biāo)志

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76471 發(fā)表于 2015-4-15 21:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
比如PSW中的F0,可以在程序中判斷為1或為0,還可以置1或清零。我看了郭天詳?shù)囊曨l,他講課直接用一個字節(jié)8位做標(biāo)志,實在是浪費,51的資料RAM從20H到2FH有16字節(jié)共128位可位尋址,請教高手C語言如何定義可尋址位為標(biāo)志
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:74784 發(fā)表于 2015-4-15 22:24 | 只看該作者
以20H到2FH的128位做用戶標(biāo)志最便捷

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:76471 發(fā)表于 2015-4-16 18:52 | 只看該作者
lxa0 發(fā)表于 2015-4-15 22:24
以20H到2FH的128位做用戶標(biāo)志最便捷

如何用,用bit嗎?例如這樣定義,bit flag_0=0x00;這樣只占一位對吧
回復(fù)

使用道具 舉報

地板
ID:74784 發(fā)表于 2015-4-16 22:40 | 只看該作者
steb x

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:76471 發(fā)表于 2015-4-17 19:18 | 只看該作者

用C語言寫呀,setb x;不能通過編譯,而且setb不是關(guān)鍵字,匯編才能用吧
回復(fù)

使用道具 舉報

6#
ID:76471 發(fā)表于 2015-4-17 19:22 | 只看該作者

我回來用bit F1;實現(xiàn)了,還是感謝你的熱情幫助
回復(fù)

使用道具 舉報

7#
ID:76471 發(fā)表于 2015-4-17 20:19 | 只看該作者
還找了個高手,要了個標(biāo)準(zhǔn)C定義位的,據(jù)說用到聯(lián)合、枚舉、結(jié)構(gòu)體啥的,能用到所有用C編程的MCU上,經(jīng)測試使用無問題,同大家分享一下。
/**********************************************************************
標(biāo)準(zhǔn)C位定義
***********************************************************************/
typedef unsigned char INT8U;

volatile union uFlag
{
   INT8U byte;       
   struct {
      INT8U bit0:1;
          INT8U bit1:1;
          INT8U bit2:1;
          INT8U bit3:1;
          INT8U bit4:1;
          INT8U bit5:1;
          INT8U bit6:1;
          INT8U bit7:1;
          }flag;                                                                 //flag不能是關(guān)鍵字
}umyFlag,keyFlag;                                                         //可定義多個字節(jié)做標(biāo)志位


#define F1                                                                umyFlag.flag.bit0
#define F2                                                                umyFlag.flag.bit1
#define F3                                                                umyFlag.flag.bit2
#define F4                                                                umyFlag.flag.bit3
#define F5                                                                umyFlag.flag.bit4
#define F6                                                                umyFlag.flag.bit5
#define F7                                                                umyFlag.flag.bit6
#define F8                                                                umyFlag.flag.bit7
回復(fù)

使用道具 舉報

8#
ID:76471 發(fā)表于 2015-4-17 20:22 | 只看該作者
這方法即使不是可位尋址的位都可以直接用
回復(fù)

使用道具 舉報

9#
ID:95514 發(fā)表于 2016-9-21 17:04 | 只看該作者
在keil里有一個<absacc.h>這個頭文件,這里面的函數(shù)可以滿足你的需要,可以QQ私聊我。3030895463
回復(fù)

使用道具 舉報

10#
ID:137239 發(fā)表于 2016-9-21 21:11 | 只看該作者
可以用bit語句來聲明一位,它只占一位
回復(fù)

使用道具 舉報

11#
ID:111634 發(fā)表于 2016-9-23 20:53 | 只看該作者
本帖最后由 zl2168 于 2016-9-23 20:58 編輯

⒍ 位變量定義方式

80C51片內(nèi)RAM16字節(jié)128位的可尋址位(字節(jié)地址20H2FH,位地址00H7FH),還有11個特殊功能寄存器是可位尋址的,C51編譯器擴充了關(guān)鍵詞bitsbit,用于定義這些可尋址位。位變量也需先定義,后使用。

定義128位可尋址位的位變量

bit  位變量名

例如:

bit  u,v;                      //定義位變量u,v 。

C51編譯器將自動為其在位尋址區(qū)安排一個位地址(1bit)。

對于4-5中已經(jīng)按存儲器類型bdata定位的字節(jié),其每一可尋址位,可按如下方法定義:

unsigned char bdata  flag;        //定義字符型變量flag,存儲器類型bdata

bit  f0=flag^0;                   //定義位標(biāo)識符f0,為flag0

bit  f1=flag^1;                //定義位標(biāo)識符f1,為flag1

上述第一條語句先定義了一個字符型變量flag,存儲器類型bdata,C51編譯器將自動為其在片內(nèi)RAM位尋址區(qū)(20H2FH)安排一個字節(jié)(8bit),第23條語句則分別定義f0f1為該字節(jié)第0、1位的位標(biāo)識符。注意,“^”不是運算符,僅指明其位置,相當(dāng)于匯編中的“.”。

定義11個特殊功能寄存器可尋址位的位變量

80C51單片機11個可尋址位的特殊功能寄存器中,有6SFRPSWTCON、SCON、IE、IPP3),它們每一可尋址位有位定義名稱,C51庫函數(shù)reg51.h也已對其按MCS-51中取的位定義名稱(必須大寫)全部作了定義,并賦予了既定的位地址。只要在頭文件中聲明包含庫函數(shù)reg51.h,就可按位定義名稱直接引用。但是,還有5SFRACCB、P0、P1P2),可尋址位沒有專用的位定義名稱,只有位編號,但這些位編號不符合ANSI C標(biāo)識符要求,例如,ACC.0、P1.0等(C51標(biāo)識符規(guī)定不可用小數(shù)點),應(yīng)重新定義。其格式如下:

sbit  位變量名=位地址常數(shù)

其中,位地址常數(shù)必須是該位變量既定的真實位地址。例如:

sbit  P10=0x90;                          //定義位標(biāo)識符P10,位地址90HP1.0

sbit  P10= 0x90^0;              //定義位標(biāo)識符P10,為90HP1口)第0

sbit  P10= P1^0;             //定義位標(biāo)識符P10,為P1口第0

上述第1條語句是直接用P1.0的位地址,第2條語句是用P1口的字節(jié)地址加位編號,第3條語句是用P1口特殊功能寄存器名加位編號。

需要說明的是,若用戶不按既定的位定義名稱引用6SFR中的可尋址位,另起位變量名,則也須對其重新定義。雖然C51允許用關(guān)鍵詞sbit定義這些位變量,體現(xiàn)了C51編譯功能的多樣性和完整性,但編者還是建議讀者不要去重新定義6SFR中的可尋址位,而直接使用預(yù)處理命令,既省事又不易出錯。

需要指出的是,使用sbit定義11個特殊功能寄存器可尋址位的位變量,因其具有不變的真實地址,屬于全局變量,應(yīng)放在主函數(shù)之前(參閱4-6)。

需要注意的是,不要混淆bitsbit的區(qū)別。bit用于普通位變量,而sbit位用于特殊功能寄存器中可位尋址的位變量(有既定位地址)。


以上摘自張志良編著
80C51單片機實用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9


書中電路和程序設(shè)計有詳細(xì)說明,程序語句條條有注解。


回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线观看网站 | 国产伦一区二区三区 | 日韩中文字幕在线视频 | 国产综合精品一区二区三区 | 91精品久久久久久久久 | 欧美中文一区 | 日韩精品一区二区三区免费观看 | 狠狠色狠狠色综合日日92 | 91精品国产综合久久久久 | 91国内外精品自在线播放 | 日本天堂视频在线观看 | 韩日在线 | 国产精品69毛片高清亚洲 | 欧美色偷拍 | 蜜桃黄网 | 天天操夜夜骑 | 搞黄网站在线观看 | 一区二区三区四区视频 | 日韩欧美国产精品 | 亚洲色图图片 | 国产视频二区在线观看 | 欧美 日韩 综合 | 欧美久久一区二区 | 日本一区二区三区在线观看 | 亚洲欧美国产精品一区二区 | 久久999 | 香蕉一区| 亚洲精品国产电影 | 精品欧美一区二区三区久久久 | 韩日av片 | 中文字幕一区二区三区四区五区 | 在线看一区二区 | 亚洲欧美成人影院 | 91精品欧美久久久久久久 | 日韩中文不卡 | 国产成人免费 | 天天操夜夜操 | 欧美精品欧美精品系列 | www.99re| 亚洲国产精久久久久久久 | 天堂一区二区三区 |