找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

32單片機(jī)位帶操作程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:302293 發(fā)表于 2024-12-2 13:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#ifndef __SYS_H
#define __SYS_H         
#include "hk32f030m.h"
#define u16 unsigned int                                                                                                                                    


#ifdef __cplusplus
extern "C" {
        #endif
        typedef struct
        {
                u16 bit0 : 1;
                u16 bit1 : 1;
                u16 bit2 : 1;
                u16 bit3 : 1;
                u16 bit4 : 1;
                u16 bit5 : 1;
                u16 bit6 : 1;
                u16 bit7 : 1;
                u16 bit8 : 1;
                u16 bit9 : 1;
                u16 bit10 : 1;
                u16 bit11 : 1;
                u16 bit12 : 1;
                u16 bit13 : 1;
                u16 bit14 : 1;
                u16 bit15 : 1;
        }Bits16_TypeDef;

        //IO口操作,只對(duì)單一的IO口!
        //確保n的值小于16!
        #define PAout(n)   ( ((Bits16_TypeDef *)(&(GPIOA->ODR)))->bit##n )
        #define PAin(n)    ( ( GPIOA->IDR&(1 << (n)) )>>n )  //輸入

        #define PBout(n)   ( ((Bits16_TypeDef *)(&(GPIOB->ODR)))->bit##n )
        #define PBin(n)    ( ( GPIOB->IDR&(1 << (n)) )>>n )  //輸入

        #define PCout(n)   ( ((Bits16_TypeDef *)(&(GPIOC->ODR)))->bit##n )
        #define PCin(n)    ( ( GPIOC->IDR&(1 << (n)) )>>n )  //輸入

        #define PDout(n)   ( ((Bits16_TypeDef *)(&(GPIOD->ODR)))->bit##n )
        #define PDin(n)    ( ( GPIOD->IDR&(1 << (n)) )>>n )  //輸入

        #ifdef __cplusplus
}
#endif


#endif

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:378108 發(fā)表于 2024-12-31 17:17 | 只看該作者
你這是 位帶?這不是域嗎?

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
AAA_MCU + 12 哈哈哈哈

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:1064915 發(fā)表于 2025-4-10 08:35 | 只看該作者
位帶操作簡(jiǎn)單的說(shuō),就是把每個(gè)比特膨脹為一個(gè) 32 位的字,當(dāng)訪(fǎng)問(wèn)這些字的時(shí)候就達(dá)到了訪(fǎng)問(wèn)比特的目的,比如說(shuō) GPIO 的 ODR 寄存器有 32 個(gè)位,那么可以映射到 32 個(gè)地址上,我們?nèi)ピL(fǎng)問(wèn)這 32 個(gè)地址就達(dá)到訪(fǎng)問(wèn) 32 個(gè)比特的目的。這樣我們往某個(gè)地址寫(xiě) 1 就達(dá)到往對(duì)應(yīng)比特位寫(xiě) 1 的目的,同樣往某個(gè)地址寫(xiě) 0 就達(dá)到往對(duì)應(yīng)的比特位寫(xiě) 0 的目的。

支持了位帶操作后,可以使用普通的加載、存儲(chǔ)指令來(lái)對(duì)單一的比特進(jìn)行讀寫(xiě)。在CM3中,有兩個(gè)區(qū)中實(shí)現(xiàn)了位帶。其中一個(gè)是 SRAM 區(qū)的最低 1MB 范圍,第二個(gè)則是片內(nèi)外設(shè)區(qū)的最低 1MB 范圍。這兩個(gè)區(qū)中的地址除了可以像普通的 RAM 一樣使用外,它們還都有自
己的“位帶別名區(qū)”,位帶別名區(qū)把每個(gè)比特膨脹成一個(gè) 32 位的字。當(dāng)你通過(guò)位帶別名區(qū)訪(fǎng)問(wèn)這些字時(shí),就可以達(dá)到訪(fǎng)問(wèn)原始比特的目的。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表