如何用位域給8位暫存器賦值

2021-09-24 23:58:22 字數 964 閱讀 8651

問題描述:

八位暫存器裡的部分位有乙個功能,但是不能位定址,如下圖,應該怎麼把這個暫存器對影成結構體,然後結構體的值直接賦給暫存器呢?

使用位域,將八位暫存器對影成乙個結構體,考慮大小端的問題,pc機把第七位放到高位,mcu把第七位放到低位.

struct pwm_cfg;

將pwm封裝成乙個結構體

struct pwmresiger

;定義聯合體,準備資料交換

union srr2uchar

;主函式

enum pwmncks;

typedef

enum  flagstatus, itstatus;

int _main(int argc, _tchar* ar**)

控制台輸出結果:

size = 1

val = 46;

val = 46;

從結果中來看就是結果是正確的,但是不知道心梗怎樣,還有就是需要乙個聯合體變數,比較麻煩,尋找著直接把結構體給暫存器賦值給位址的方法.

vs完整**

// debug.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include#define ror_8bit(x,y) ((x<>y))

#define rol_8bit(x,y) ((x>>(8-y))|(x<

struct pwm_cfg;

union srr2uchar

;struct pwmresiger

;enum pwmncks;

typedef enum flagstatus, itstatus;

int _tmain(int argc, _tchar* ar**)

8位暫存器

library ieee use ieee.std logic 1164.all use ieee.std logic unsigned.all entity test34 is port clk,oe instd logic d instd logic vector 7 downto 0 q ou...

暫存器標誌位

of overflow flag 溢位標誌 運算元超出機器能表示的範圍表示溢位,溢位時為1.sf sign flag 符號標誌 記錄運算結果的符號,結果負時為1.zf zero flag 零標誌 運算結果等於0時為1,否則為0.cf carry flag 進製標誌 最高有效位產生進製時為1,否則為0...

位操作(暫存器)

stm32中cpu是32位的。最方便快捷的方法是直接操作32位的位址,對某個位址直接賦值是最快的操作,只需要乙個指令。附錄1 在32位的系統中 1字 word 4位元組 byte 1位元組 byte 8位 bit 1b 8bit 1kb 1024b 2 10b 1mb 1024kb 1gb 1024...