找回密码
 注册
关于网站域名变更的通知
查看: 566|回复: 2
打印 上一主题 下一主题

用单片机C语言的结构体实现字节、位操作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-17 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机C语言的结构体实现字节、位操作
+ G$ U6 p6 V* L: \0 R) ^) G
" H1 e0 V5 b1 G: e$ x8 \$ F) t0 O

" g# W" c$ \' O0 M7 p源码:+ H: n% F. v/ T" x

  [6 a. S$ {6 n1 l9 A0 Y7 k/* ========================================================================= */
4 p+ T* v4 R( g( L# \6 g9 e( Y6 w/* The information contained herein is the exclusive property of             */
+ G% \2 z( `5 K& N* ]+ v/* Sunplus Technology Co. And shall not be distributed, reproduced,          */
# n6 V8 A+ K2 @! u  ?/* or disclosed in whole in part without prior written permission.           */
+ I. P2 W2 g4 C0 \/*             (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.                     */
6 L1 X8 u  J& {, _0 V8 @/*                    ALL RIGHTS RESERVED                                    */5 Z3 X/ a+ U! \4 F" f
/* The entire notice above must be reproduced on all authorized copies.      */, e: z7 u2 x$ s/ _9 m  q( Z, U
/* ========================================================================= */
0 ?* @- C8 ]0 b2 l/*                                                                                                                                                          */$ _. H8 t" `& Q: j& H
/* ========================================================================= */& `+ _3 A1 A- s0 Q: W
/* Project Name  : AN_SPMC75_0202                                                                             */
: k" K; f9 t) w1 l1 Z. ?/* File Name     : main.c                                                                                                          */, o( Z. F5 @/ J
/* Description   : Easy-to-Use Byte and Bit mode operation using C data          */9 [4 b0 v% i9 ~( y0 S: V5 S. U8 r
/*                 structure                                                                            */
- A4 Z/ w9 P6 R+ e+ d* w6 t* J/* Processor     : SPMC75F2413A                                                                                             */
, K. Q% F# X3 q7 F2 E/* Tools             : u'nSP IDE tools v1.18.1A or later version                                 */: ]3 @9 Q! u# E, S6 ~/ D2 y) x6 q
/* ========================================================================= */7 m" |2 O( l5 N
/* Revision                                                                                                                                         */; q2 K+ V+ w/ Z8 r9 T2 m) L) W% P
/* ========================================================================= */
2 X) L* i9 y) u& C8 \2 b0 B: m/* Version       :  1.00                                                                                                            */# e5 ^; V+ ^& t) H& ]
/* Date                         : 9.2                                                                                                 */! R5 E8 i% S* c4 V$ u4 S
/* Modified by   :        更换正规的文件头和最新的头文件                                                         */
. K/ }1 B+ s) z( @  L# v% ^% Z/* Description         :                                                                                                                     */
0 B) P0 s( V4 A1 h  E$ x  L/* ========================================================================= */) v+ D* H1 T0 W% o. M% j2 Z

* y3 B  w" F9 N  S; k  {#include        "AN_SPMC75_0202.H"& Q% F6 B$ j; w, H/ ^1 s( I; A
, P' O" Q8 ]& m" m  g
//===========================================================================
7 T5 B! k' T6 H+ T/*! T  B1 c, Y/ Z8 I" C
.Note:
4 A1 n  k  f- B8 r$ C1 ~& G$ q         将UInt16型变量variable强制转换为GENBITSDEF类型的指针,
$ n/ G" k) B( T8 ~/ v         那么这样一个指针ptr就可以具有GENBITSDEF类型所定义的7 D+ w, M- x* O6 u) b6 K4 m
         属性和成员,对其操作就可以实现对ptr所指存储空间进行操作。7 K" J) h: c6 U
*/
. S: d1 J& U* q$ r#define        ptr        ((volatile GENTYPEDEF *)(&variable))        //普通变量强转换类型" g2 l% d: {3 s) k2 F& S: }" ?0 W. }
/ B2 k" j& {8 e* K9 `
main()) w4 O4 F. p( l$ L3 @. _* }" f
{
/ r% l; Y, [6 @+ n2 O7 o" M/ k        UInt16 variable = 0;        //UInt16 变量定义
" C2 S& l0 U$ R; w3 @( L        GENBITSDEF        sBits;                //自定义类型GENBITSDEF 变量定义
; a9 @: {: I0 W# _0 K+ N. a        GENBYTEDEF        sByte;                //自定义类型GENBYTEDEF 变量定义
) S- `" G# K3 K8 x% e& ~1 F        GENTYPEDEF        sMixb;                //自定义类型GENTYPEDEF 变量定义
( B+ R  a, a. P- _
. M) ]+ y: |' M$ A  q        P_IOD_Attrib->W = 0xFFFF;        //IOD初始化7 r: n; P; r9 x% ]0 j) U, Z
        P_IOD_Dir->W        = 0xFFFF;
- C9 ^# G' ~( b2 r1 R$ z        P_IOD_Buffer->W        = 0xFFFF;
# b' w1 X- G: @$ `2 G+ @2 Z        P_IOD_Data->W        = 0x0000;
& \$ a# y) d' m2 f7 M6 ~5 w6 K' s' q; L0 S$ C1 F7 H2 Y9 w
        sBits.W = 0xA5FF;                //字(Word)操作
" S; _$ x) a6 K: ^        sBits.B.bit0  = 0;                //位(Bit)操作
8 x' E9 T: m$ o- q        sBits.B.bit15 = 0;                //位(Bit)操作3 r2 k' z& a* d

( [: O. Q9 l. k- S        sByte.W = 0xA5FF;                //字(Word)操作
+ O+ n' G5 u5 B        sByte.B.byte0 = 0xA5;        //字节(Byte)操作- j+ u2 C% q' T3 v5 J, R" g1 _
        sByte.B.byte1 = 0xFF;        //字节(Byte)操作9 G2 {( n2 [4 B6 _/ i

% n: s% ^1 o5 B  C" y        sMixb.Word = 0xA5FF;        //字(Word)操作
# l. Q0 L! E# |4 V9 F0 {        sMixb.Bits.bit14 = 1;        //位(Bit)操作" s" `% ^4 w; R% W. Y" `3 |
        sMixb.Bits.bit15 = 0;        //位(Bit)操作
* y6 e* q; e4 P" A        sMixb.Byte.byte0 = 0;        //字节(Byte)操作
6 J9 a) [) V% {! |, B7 P" Y        sMixb.Byte.byte1 = 0;        //字节(Byte)操作5 V( S8 |/ ]9 N

  ^: u; q, p  e        ptr->Word = 0x90Fe;        //转型后变量的操作方式
' `! {' ^3 b5 Q4 \" O( }7 C( o# ~        ptr->Bits.bit0  = 1;
/ J- t  ?: X2 T  E5 j" T        ptr->Bits.bit15 = 0;) j0 Q1 W1 Y7 n! G
        ptr->Byte.byte0 = 0xFF;- j: a5 S' s2 A0 Z3 }
        ptr->Byte.byte1 = 0x00;5 a" `* S. z! F' l# B2 H
! G3 W0 M! Q. v- _( ?" B
% y  ]  h& p) t* j: a9 g0 Y; ^8 t
        while(1)5 t$ r+ @! ?7 Y7 P$ p
        {1 n8 \* n' E4 S5 Q- B+ U1 a: q
                LEDCHG->Byte.byte0 = 0xA5;        //对硬件(IOD)的字节(Byte)操作( z4 w9 V4 C& y& S7 _# _7 A5 y
                LEDCHG->Byte.byte0 = 0x5A;  N2 Y# _  }( ?1 A+ J
$ ^' X5 _4 r5 y1 [$ r4 g2 V$ j: ]
                LEDCHG->Byte.byte1 = 0xA5;0 v( j0 S, C& g* Q3 q) G
                LEDCHG->Byte.byte1 = 0x5A;9 M" K- w& b; V. l1 {3 ]

9 P/ n8 A, N. e: P                LEDCHG->Byte.byte0 = 0x00;
% q- q9 e6 V0 @( X5 |                LEDCHG->Byte.byte0 = 0xFF;
+ M( M  w5 g0 U6 x! m
/ R. m$ O1 W% d, M6 P8 [( j                LEDCHG->Byte.byte1 = 0x00;+ W2 r9 E3 n& I7 p
                LEDCHG->Byte.byte1 = 0xFF;
6 V+ g3 l2 P9 J$ j& A6 R% U5 h' i2 l9 m3 C$ D" ^/ }
                LEDCHG->Word           = 0x00;        //对硬件(IOD)的字(Word)操作) `8 Y# J% p) C4 r4 S

7 W/ Y3 w# u3 }  |4 }                LEDCHG->Bits.bit0 = 1;                //对硬件(IOD)的位(Bit)操作; v7 V0 a  _* Q2 ?  s
                LEDCHG->Bits.bit0 = 0;
) q" m$ R9 e" S8 {" G1 M5 A$ k3 K1 R' _1 ]+ T
                LEDCHG->Bits.bit5 = 1;
8 k; p! p. L& X$ p1 p- X0 W                LEDCHG->Bits.bit5 = 0;$ z4 K, j0 Z+ ~  U  q5 h7 i; }6 m

0 q# F4 i$ X. {                LEDCHG->Bits.bit10 = 1;/ R0 ~2 c9 ~* H" A+ }4 X  N
                LEDCHG->Bits.bit10 = 0;
( `2 o$ y6 A% k
/ F2 q7 w; d, O' ^                LEDCHG->Bits.bit15 = 1;
3 T( L$ U+ ]/ r8 B( L' `1 E& _; v" f                LEDCHG->Bits.bit15 = 0;
3 @/ B) O  G  M% l8 G        }/ i4 `! {0 P+ t- W5 ]& R
}
) r2 I& E* e! o+ O: L( {0 B0 R( j3 L2 o3 K# Y1 K  Z
下载:
( X) [9 I- U, T+ a
游客,如果您要查看本帖隐藏内容请回复

8 x/ ?. _0 Z1 n1 f
4 N- S2 d- V. o3 ^, I& M+ m

该用户从未签到

2#
发表于 2019-1-17 18:15 | 只看该作者
看看楼主的代码

该用户从未签到

3#
发表于 2019-3-12 11:15 | 只看该作者
看看怎么弄的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-21 18:33 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表