標(biāo)題:
STC8/32單片機(jī)學(xué)習(xí)筆記1:指針指向具體數(shù)字地址、取值 、宏定義
[打印本頁(yè)]
作者:
liu888888
時(shí)間:
2022-12-11 22:00
標(biāo)題:
STC8/32單片機(jī)學(xué)習(xí)筆記1:指針指向具體數(shù)字地址、取值 、宏定義
STC8頭文件中
#define CKSEL (*(unsigned char volatile xdata *)0xfe00) /* 主時(shí)鐘源選擇 */
0xfe00
是整型數(shù)字,在這里一個(gè)是地址門牌號(hào)數(shù)字;
(unsigned char volatile xdata *)
是強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換成指針類型,該指針指向unsigned char型數(shù)據(jù)(1字節(jié)8bit);
(unsigned char volatile xdata *)0xfe00
////// 是指xdata外部可尋址擴(kuò)存儲(chǔ)區(qū)的房間門牌號(hào)首地址是0xfe00的指針,存的數(shù)據(jù)類型是unsigned char(只占一個(gè)字節(jié)存儲(chǔ)單元房間8bit) 類型,volatile 是指這是個(gè)隨時(shí)變化量,每次需不厭其煩從此地址門牌號(hào)0xfe00內(nèi)讀取新鮮數(shù)據(jù)再傳送,若傳輸過程被打斷了,再傳需重新讀取數(shù)值,后再傳送,不許接著傳送中斷前保留的那個(gè)暫存值。
*
(unsigned char volatile xdata *)0xfe00 ///// 前 加
*
是讀取地址門牌號(hào)0xfe00內(nèi)的數(shù)據(jù),由于該數(shù)據(jù)長(zhǎng)度是一個(gè)字節(jié)的char型,只讀取0xfe00一個(gè)房間內(nèi)數(shù)據(jù)值(若是int16位數(shù)據(jù),需讀取0xfe00和0xfe01兩房間2個(gè)字節(jié)數(shù)據(jù),每個(gè)房間放一個(gè)字節(jié)8bit數(shù)據(jù) )。
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
/////// 將 *(unsigned char volatile xdata *)0xfe00 加括號(hào)整包裹起來,宏定義 為
CKSEL
,替換成易懂簡(jiǎn)短的字符標(biāo)識(shí),后面方便調(diào)用不易出錯(cuò)。
作者:
hjc5035
時(shí)間:
2023-1-5 17:23
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
這個(gè)可以這么理解吧?
從里層往外看,
有指針變量* (0xfe00),0xfe00是變量的首地址,該地址內(nèi)的內(nèi)容為unsigned char volatile xdata類型,即占用外部存儲(chǔ)空間0xfe00空間的易失性的無符號(hào)字符型變量(8bit);
外層的
*
(unsigned char volatile xdata *)0xfe00,就是說該指針變量指向了0xfe00,然后將其宏定義為 CKSEL
其本質(zhì)是就是定義了一個(gè)存放于0xfe00的無符號(hào)字符型變量,特點(diǎn)是變量首地址確定在0xfe00了
類似于定義了一個(gè)指針變量 unsigned char volatile xdata *p,而&p=0xfe00。
我的理解就是這樣,各位看看有無問題。
作者:
MCU2023
時(shí)間:
2023-11-12 09:26
不錯(cuò),大家解釋得很清楚,學(xué)到了。
作者:
白水大蝦2016
時(shí)間:
2024-5-7 13:42
入坑又搞了一個(gè)STC32G12K128想把所有的O/I口用起來搞一個(gè)花式彩燈,先試著將51例程中流水燈程序?qū)隨TC32中,顯示操作成功但沒有一個(gè)O/I 口有輸出信號(hào),毛病出在哪里呢??jī)?nèi)部頻率選的是11.0592。后來又將程序?qū)朐蠸TC11F08XE芯片結(jié)果8燈全部閃爍狀可能是速度變快了,為什么呢?求解!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1