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

標題: 51單片機端口使用問題 [打印本頁]

作者: Graves    時間: 2024-11-14 11:06
標題: 51單片機端口使用問題
請教下STC單片機可以用指針變量來控制端口P0、P1這些嗎?正常是sfr P0=0x80;P0=0xAA;能不能用變量的方法來控制?可以的話c語言應該怎么寫?

作者: lkc8210    時間: 2024-11-14 16:08
STC只接受sfr定義端口,然后控制
作者: xiaobendan001    時間: 2024-11-14 16:49
uchar aaa;
P0 = aaa;這樣嗎?
uchar *bbb;
bbb = @aaa;
P0 = *bbb;這樣?
作者: 飛云居士    時間: 2024-11-14 17:16
通過改變指針的值來操作不同的IO端口可以實現的。通過修改指針的指向,讓它指向不同的端口地址,從而實現控制不同的端口。以下是一個示例,展示通過改變指針的值來控制不同的端口:

c
#include <reg51.h>

// 定義端口地址
#define P0_ADDRESS 0x80
#define P1_ADDRESS 0x90

void main() {
    unsigned char xdata *port;  // 定義指針變量
   
    // 指向P0端口
    port = (unsigned char xdata *)P0_ADDRESS;
    *port = 0xAA;  // 控制P0端口輸出0xAA
   
    // 改變指針指向P1端口
    port = (unsigned char xdata *)P1_ADDRESS;
    *port = 0x55;  // 控制P1端口輸出0x55

    while (1) {
        // 主循環
    }
}
在這個示例中,定義了一個指針port,并通過改變該指針的指向來控制不同的端口。首先,指針指向P0端口,并設置輸出值為0xAA;然后,指針指向P1端口,并設置輸出值為0x55。

通過這種方法,你可以靈活地使用指針來控制不同的端口。
作者: 188610329    時間: 2024-11-14 19:06
飛云居士 發表于 2024-11-14 17:16
通過改變指針的值來操作不同的IO端口可以實現的。通過修改指針的指向,讓它指向不同的端口地址,從而實現控 ...

你是夢里學的 51 么?
你知道51的 高位地址 0x80~0xFF 直接訪問 和  間接訪問的區別么?
你知道不知道 當 SP = 0x80 的時候,執行入棧 操作不會改變 P0 的值是什么原因么?
作者: lkc8210    時間: 2024-11-14 23:25
188610329 發表于 2024-11-14 19:06
你是夢里學的 51 么?
你知道51的 高位地址 0x80~0xFF 直接訪問 和  間接訪問的區別么?
你知道不知道  ...

一眼AI回答
作者: Graves    時間: 2024-11-15 09:07
xiaobendan001 發表于 2024-11-14 16:49
uchar aaa;
P0 = aaa;這樣嗎?
uchar *bbb;

uchar *bbb;
bbb = &P0;
*bbb = 0xff;
差不多這意思,試了下(*(unchar * 0x80)) = 0xff是不行的
作者: Graves    時間: 2024-11-15 09:08
lkc8210 發表于 2024-11-14 16:08
STC只接受sfr定義端口,然后控制

所以是不行的嗎?是51的都不行還是說STC的不行
作者: xiaobendan001    時間: 2024-11-15 12:10
Graves 發表于 2024-11-15 09:07
uchar *bbb;
bbb = &P0;
*bbb = 0xff;

&P0是個啥操作?P0本來就是個地址啊
uchar* ppp;
ppp = P0;
*ppp = 0x55;這樣應該可以吧
作者: xiaobendan001    時間: 2024-11-15 12:14
Graves 發表于 2024-11-15 09:07
uchar *bbb;
bbb = &P0;
*bbb = 0xff;

好像PPP = P0不行,=0x80;能編譯,但是好像也不起作用。為何要這么用呢?
作者: lkc8210    時間: 2024-11-15 13:52
xiaobendan001 發表于 2024-11-15 12:10
&P0是個啥操作?P0本來就是個地址啊
uchar* ppp;
ppp = P0;

P0被定義為端口0的寄存器
ppp = P0是把端口0的電平,化為一個地址
如 P0 讀到 1110 1110 (0xEE)
*ppp = 0x55就是把0x55放到地址為0xEE的內存內
作者: lkc8210    時間: 2024-11-15 13:54
Graves 發表于 2024-11-15 09:08
所以是不行的嗎?是51的都不行還是說STC的不行

STC的和ATMEL 的51都不行
其他51沒用過
作者: coody_sz    時間: 2024-11-15 14:47
傳統的51不支持指針訪問特殊功能寄存器(0x80~0xff),但STC的擴展在xdata的特殊功能寄存器可以用xdata指針訪問的。
作者: Graves    時間: 2024-11-15 16:01
xiaobendan001 發表于 2024-11-15 12:10
&P0是個啥操作?P0本來就是個地址啊
uchar* ppp;
ppp = P0;

不是很理解,P0是地址的話那P0=0xAA是什么操作?
作者: Graves    時間: 2024-11-15 16:07
xiaobendan001 發表于 2024-11-15 12:14
好像PPP = P0不行,=0x80;能編譯,但是好像也不起作用。為何要這么用呢?

需要模擬通訊的設備有點多,而且又是同一個協議,但是端口不一樣。這時想到幾種方法
①模擬通訊代碼全部復制粘貼一遍,但是代碼量就太大擠不進
②if_else換端口,要加多個參數,也不太好改端口
所以想把端口當參數來傳,那模擬的通訊只要一份就行
作者: lkc8210    時間: 2024-11-16 22:18
Graves 發表于 2024-11-15 16:07
需要模擬通訊的設備有點多,而且又是同一個協議,但是端口不一樣。這時想到幾種方法
①模擬通訊代碼全部 ...

沒辦法,用51就是要這樣
只能用方法2




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品中文字幕在线观看 | 欧美a级成人淫片免费看 | 干干干操操操 | 亚洲精品一区在线 | 高清久久久 | 精品成人在线视频 | 性色av一区二区三区 | 日韩网站在线观看 | 操操日 | 免费a v网站 | 欧美亚洲高清 | 91五月天| 日韩视频在线观看中文字幕 | 日韩欧美在| 中文字幕一区二区三区精彩视频 | 九九久久在线看 | 一级毛片视频 | 欧美日韩国产综合在线 | 成人h视频在线 | 国产日屁 | 亚洲一区中文字幕 | 国产日韩一区二区 | 国内精品视频一区二区三区 | 玖玖玖在线观看 | 国产精彩视频在线观看 | 亚洲第一免费播放区 | 日本精品一区二区三区四区 | 国产99热在线 | 成人精品在线观看 | 日韩精品一区二区三区视频播放 | 天天干精品 | 精品久久久久一区二区国产 | 亚洲第一av | 美女黄网站 | 天堂三级| 精品成人在线视频 | 国产激情 | 超碰人人人 | 精精国产xxxx视频在线播放7 | 精品一区二区三区不卡 | 久久久久久国产免费视网址 |