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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机C语言的结构体实现字节、位操作
  p; |" R5 M  M6 q( O/ C
6 F5 P! E/ e  a: p2 O
; \6 o/ ?3 F$ ]' C4 z! B$ }8 d
源码:
) R, H/ ]0 j( c
1 s2 z+ r( d9 ^/* ========================================================================= */
6 {  ~# }/ {' [. @/* The information contained herein is the exclusive property of             */
$ N; \1 g8 ?; G6 B/ B/* Sunplus Technology Co. And shall not be distributed, reproduced,          */
3 R+ `) V2 O- x% s* z! |/* or disclosed in whole in part without prior written permission.           */- q4 T9 `1 Y/ a! m  p0 ]! E9 I
/*             (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.                     */. H$ G4 j" R: D; L1 M
/*                    ALL RIGHTS RESERVED                                    */8 ~6 A% G5 R6 j/ ], X) w
/* The entire notice above must be reproduced on all authorized copies.      */) s+ U, G7 J2 T" S+ j5 W! w( T# s
/* ========================================================================= */& u: M& e, f* Y' J
/*                                                                                                                                                          */9 ~7 z, D; N# V4 ~% y# o
/* ========================================================================= */
  S" [+ y- o9 \. o$ D/* Project Name  : AN_SPMC75_0202                                                                             */
  {/ E' H$ d" }/ d/* File Name     : main.c                                                                                                          */
/ T3 j/ ~8 U0 I% Z/* Description   : Easy-to-Use Byte and Bit mode operation using C data          */
, r0 }& K" ?$ V2 f) K2 n3 T& u- D/*                 structure                                                                            */: `9 c+ \# Q& M( r: u+ b
/* Processor     : SPMC75F2413A                                                                                             */& P: d  V; G" z7 l2 X7 u0 a" T
/* Tools             : u'nSP IDE tools v1.18.1A or later version                                 */
! x9 U2 E  H+ N: s: c6 l. P) w+ m$ d/* ========================================================================= */
2 X6 x2 K* u  ^& d( r/* Revision                                                                                                                                         */" R; h" q5 H' E, ]( b0 I, j
/* ========================================================================= */0 m  a* T. \9 a; `. T/ d
/* Version       :  1.00                                                                                                            */2 w  r* ^9 P: I  U( E7 S9 G
/* Date                         : 9.2                                                                                                 */
# i4 r9 R; q7 j/* Modified by   :        更换正规的文件头和最新的头文件                                                         */
3 `: P" N# J+ Q9 }/* Description         :                                                                                                                     */
5 K& O1 a7 X4 ?: q1 m- W- t/* ========================================================================= */  Z- }9 X, _' O) c$ {/ |$ q
# x2 M% a* F4 p4 P8 D, T
#include        "AN_SPMC75_0202.H", q$ G4 i9 H$ C4 [4 F9 Z7 {2 D2 J, L
0 [+ K$ B2 d: g
//===========================================================================' I. B  V. @4 r" A) U
/*
4 F; \& L; m: q: A2 n/ e3 f. Z6 m .Note:+ @- T' t$ @9 T" P. f, A, {# b
         将UInt16型变量variable强制转换为GENBITSDEF类型的指针,( Y! l7 E9 o' C# h9 n0 E. ?5 x2 n
         那么这样一个指针ptr就可以具有GENBITSDEF类型所定义的
& d5 s+ x% n6 v& k3 X         属性和成员,对其操作就可以实现对ptr所指存储空间进行操作。8 g7 |* o# S* V( W9 O
*/
& I5 W* c) @/ Q#define        ptr        ((volatile GENTYPEDEF *)(&variable))        //普通变量强转换类型
# B' c& o4 V2 h2 S" \8 h2 V  x3 {- z( p5 Y! j
main(). K5 w- E- D- H  n/ S0 G2 a- y* A
{
  A: b) L: j+ z2 g) @& l2 P        UInt16 variable = 0;        //UInt16 变量定义7 k8 c2 x) V: x% x2 ]% D
        GENBITSDEF        sBits;                //自定义类型GENBITSDEF 变量定义% v2 O" M. s( V$ J& t7 R% I9 p
        GENBYTEDEF        sByte;                //自定义类型GENBYTEDEF 变量定义
' d$ E2 c* s. ~( I1 h7 j8 G        GENTYPEDEF        sMixb;                //自定义类型GENTYPEDEF 变量定义
9 P  R( M* I( k9 R/ ^* S" k# e( e  g- k  O, J' }- f
        P_IOD_Attrib->W = 0xFFFF;        //IOD初始化5 @# j% `  T' |! u; h. \4 G+ }& o
        P_IOD_Dir->W        = 0xFFFF;
8 r8 n. M( d  K. h6 B4 \8 E' _  ^        P_IOD_Buffer->W        = 0xFFFF;( s* B  \! j- b9 o% i
        P_IOD_Data->W        = 0x0000;
9 U5 a; ~: }( {" i1 S( n
& @8 ~% a* H1 v        sBits.W = 0xA5FF;                //字(Word)操作
  H! Q9 N7 @6 q        sBits.B.bit0  = 0;                //位(Bit)操作
; B2 v# w* |0 \' _        sBits.B.bit15 = 0;                //位(Bit)操作( b9 B& D$ U, z! e( l
- [; Y/ M0 |( f8 ]3 E8 F
        sByte.W = 0xA5FF;                //字(Word)操作
1 Z! M- J7 ^/ ?# y- R6 A        sByte.B.byte0 = 0xA5;        //字节(Byte)操作+ J" F. {+ u" D& m1 G1 \
        sByte.B.byte1 = 0xFF;        //字节(Byte)操作! S2 p  t8 e- Y

2 }. }5 I, ]+ N, O' b7 L        sMixb.Word = 0xA5FF;        //字(Word)操作
' L3 G, ^6 A, O) |! X5 ]) E5 W! `: {        sMixb.Bits.bit14 = 1;        //位(Bit)操作% F  Z+ ^/ E" m. x4 B8 _2 b
        sMixb.Bits.bit15 = 0;        //位(Bit)操作& K+ U2 {8 E) Q7 G' V! ^
        sMixb.Byte.byte0 = 0;        //字节(Byte)操作
  p7 |/ b8 v$ a! ?9 z4 F        sMixb.Byte.byte1 = 0;        //字节(Byte)操作. F  w- v4 Y, s  f" p

; j. |; r5 t8 U  ^, T" x# E) @* C        ptr->Word = 0x90Fe;        //转型后变量的操作方式" L; g( D6 A5 r/ F: E4 s7 H& @0 r
        ptr->Bits.bit0  = 1;
' h3 w. K' c, |& ]6 P1 q  F, z        ptr->Bits.bit15 = 0;
& B/ d8 q7 i6 v  V+ e        ptr->Byte.byte0 = 0xFF;
5 a' ?, N! l1 v% l; f% L5 s) q% @        ptr->Byte.byte1 = 0x00;
( g2 a: h. ], m) y0 H2 K
2 q! {, ~0 ]3 |1 N& d/ C% l5 ]6 @* z9 M* [% k; C$ s
        while(1)
8 n% T) \7 I4 s1 w1 g% Q        {
. \! ^7 B1 o1 N4 w6 d                LEDCHG->Byte.byte0 = 0xA5;        //对硬件(IOD)的字节(Byte)操作
' d# s8 i9 a: [: J# a3 ?0 O5 `                LEDCHG->Byte.byte0 = 0x5A;
/ Z/ @* P- a$ u) U0 W4 i) K, X0 L& z+ @7 c  v  Y0 ^' u! q6 q
                LEDCHG->Byte.byte1 = 0xA5;
. K9 l: H+ \  @. d* @                LEDCHG->Byte.byte1 = 0x5A;- R) N4 k# v/ I+ E2 Z
2 {7 x4 G  B+ p+ H7 t
                LEDCHG->Byte.byte0 = 0x00;0 Q- p+ V1 x. b8 g, l
                LEDCHG->Byte.byte0 = 0xFF;
$ c' F* {  A9 B3 m+ x2 x& i9 m6 a5 y" u; D4 E4 t6 T' [( F) P
                LEDCHG->Byte.byte1 = 0x00;
& m5 o. H9 e% H; n                LEDCHG->Byte.byte1 = 0xFF;
# C4 P; m1 k* ~
2 L0 x+ {1 x. W. {5 ]                LEDCHG->Word           = 0x00;        //对硬件(IOD)的字(Word)操作
1 S( N5 C1 D/ u' h
4 A# H) f  h2 t  ]" g3 P+ G                LEDCHG->Bits.bit0 = 1;                //对硬件(IOD)的位(Bit)操作4 V1 v( M, V* f8 ~- h
                LEDCHG->Bits.bit0 = 0;
$ ?1 q6 a; r' Q/ N
' U1 l1 G; \3 c                LEDCHG->Bits.bit5 = 1;! |: s2 p2 [  [) B+ m  m% {  E  X
                LEDCHG->Bits.bit5 = 0;
% H5 x- [8 d9 U% G# L
! X8 l8 ?% J! H* @: Z                LEDCHG->Bits.bit10 = 1;
) z. n8 x( f0 {8 j                LEDCHG->Bits.bit10 = 0;
4 Z$ c, F) I. D6 M* q5 A; N/ L- \0 x3 D2 U/ k) S# m7 ]1 M3 @
                LEDCHG->Bits.bit15 = 1;1 P$ g, [7 [# W' O% h
                LEDCHG->Bits.bit15 = 0;
7 K( r8 w0 w% x- W* ]* y; K  Y' k        }
% R$ P3 m  x: A, v3 L! B}
% @- B$ M% _' E, _5 Y
5 b+ d  N/ f- o下载:6 K+ l9 z6 P% j
游客,如果您要查看本帖隐藏内容请回复

$ m; `4 l! y) G) z( B+ x1 y: ?
! z/ P! [+ q' A3 W! t! E1 j$ _

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-27 20:44 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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