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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機頭文件中數據存儲區地址宏定義的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:504174 發表于 2019-4-3 16:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#define status                                        (*(volatile unsigned char*)0x80)
sbit                inscolor                                =                status^0;
sbit                voltagesel                                =                status^1;
sbit                E1                                        =                status^2
sbit                E2                                        =                status^3;
sbit                E3                                        =                status^4;

各位大佬看一下這一段宏定義,如果我這么定義數據存儲區的話,inscolor指向的是0x80的最低位嗎?還是會被自動分配到位尋址區去?
這樣定義的匯編操作又是怎么樣的呢?有什么更簡便的方法嗎?除對存儲區數據進行邏輯運算之外的。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2019-4-4 13:08 | 只看該作者
你想一下:status 是不是一定是80H?
如果是:status^0 將是什么?
如果不是:status^0 又是什么?
回復

使用道具 舉報

板凳
ID:401564 發表于 2019-4-4 14:04 | 只看該作者
你這么干的目的是什么?你用的是51單片機嗎?如果 是51的話,你就參考包含的頭文件中的reg52.h的寄存器命名方法來命名
但51和別的單片機卻是有點不同的,就是在寄存器和數據存儲地址上,80H以上的地址名稱它是寄存器和數據存儲器共用的,也就是說0X80這個地址名稱是有兩個東西在用的,一個是P0端口的地址,它是0X80,另一個是數據存儲器,它也是0X80,當你要對0X80這個地址進行操作的時候,它是通過尋址方式的不同來區分你是要操作寄存器還是操作數據存儲器的。
既然你用C,那就應該沒有理由要用匯編去操作硬件,那就沒有必要用C去定義一個數據地址,那就和用匯編是一樣的了,那就是用匯編的方法去用C,沒意義
回復

使用道具 舉報

地板
ID:504174 發表于 2019-4-8 14:45 | 只看該作者
感謝大佬們的解答!
其實我現在屬于卡在匯編和C之間的感覺,經常不知道該用哪種方式去調用數據和操作數據,再加上老板匯編用習慣了經常要求我們一個寄存器掰成8個位來用,一點資源也不能浪費,于是就變成上面這種寫法了,其實我也想用匯編來寫啊,奈何匯編用不熟練,太長的代碼我自己都繞暈了
另外,我看reg51里的寫法,P0口之類對應的端口地址不都是用sfr P0=0x80;這種方式來寫的嗎?sfr應該就是您寫的不同尋址方式吧?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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