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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机C语言的结构体实现字节、位操作9 b/ k' T/ ~% x5 s6 o: H3 @
& X9 u8 p' b  _& e' j+ A5 b8 }

0 U' n2 i% \/ [源码:2 C8 C% N& `+ S1 ^
4 c0 a" |0 F0 Y: w% n* {8 O# ^
/* ========================================================================= */
  T/ p; @, _9 r7 U* d/* The information contained herein is the exclusive property of             */5 w' ?0 i4 j2 G  N. T6 y
/* Sunplus Technology Co. And shall not be distributed, reproduced,          */
( u( r0 T, _! a) I/* or disclosed in whole in part without prior written permission.           */( Y$ u' }. H4 G
/*             (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.                     */
0 v6 }$ n4 A+ X  v1 S: ^  M) Q/*                    ALL RIGHTS RESERVED                                    */5 V9 d$ L" _4 E; J# Z
/* The entire notice above must be reproduced on all authorized copies.      */
7 _" f6 o4 E* x0 A- y4 B/* ========================================================================= */
) g! Z* {6 Y* G/ X, q5 L" l% a/*                                                                                                                                                          */- q$ v' }: X' |7 g0 J9 N( N$ B
/* ========================================================================= */
& N* y6 R  T. T9 x2 Z: |/* Project Name  : AN_SPMC75_0202                                                                             */
7 _# d' d4 A$ s; U' A9 v3 C/* File Name     : main.c                                                                                                          */+ h1 E4 m$ X# c7 c$ t1 u
/* Description   : Easy-to-Use Byte and Bit mode operation using C data          */  U+ c+ M7 g: m' w, n; A$ p
/*                 structure                                                                            */2 Z3 i. p* c3 n8 s, q
/* Processor     : SPMC75F2413A                                                                                             */
" ]1 T$ U& U- w6 G9 b/* Tools             : u'nSP IDE tools v1.18.1A or later version                                 */
; ~7 w  V8 Y2 S+ u% N/* ========================================================================= */  o! u, X, N& `+ C
/* Revision                                                                                                                                         */# C0 N, L- f; }
/* ========================================================================= */3 V0 g  u+ C" P. I- J
/* Version       :  1.00                                                                                                            */
( e, s1 P7 ?8 J- b' Y$ E0 ]/* Date                         : 9.2                                                                                                 */
( T+ Q, e5 |2 h2 }/* Modified by   :        更换正规的文件头和最新的头文件                                                         */2 u, ^& ]; E( T( p6 q7 v9 b
/* Description         :                                                                                                                     */
1 R/ D: b5 h, Y7 r# A/* ========================================================================= */3 Z5 k. v# W7 v- v/ o
, l- S7 a5 M- j6 D' l
#include        "AN_SPMC75_0202.H"& N8 D# m- ]$ |9 R5 D) R" ^3 ~, J  a1 [5 q

* a( f  B; L0 V, f//===========================================================================
5 d; x% R  Z3 Q+ L/*
: \  a$ O4 ^2 ?' F( Q .Note:& _; J1 _0 V* l0 f) r
         将UInt16型变量variable强制转换为GENBITSDEF类型的指针,- h9 l0 q" A- D; I- J
         那么这样一个指针ptr就可以具有GENBITSDEF类型所定义的0 D& H* g0 B. \/ ^
         属性和成员,对其操作就可以实现对ptr所指存储空间进行操作。
5 ^3 U0 s6 L/ `5 D' E$ r9 `*/
. v& r+ s6 E% q* i' |7 C#define        ptr        ((volatile GENTYPEDEF *)(&variable))        //普通变量强转换类型
2 [" \! q( k0 ]9 H6 s' W6 h3 e3 X5 \5 ^
main()% K- y) P4 ?7 R: R
{
: l+ x3 e2 ]8 _        UInt16 variable = 0;        //UInt16 变量定义! f* ?8 S* I& P$ x
        GENBITSDEF        sBits;                //自定义类型GENBITSDEF 变量定义
; x" @- t! h) V. P" [: S        GENBYTEDEF        sByte;                //自定义类型GENBYTEDEF 变量定义7 ]3 p) z+ k$ O/ B" c4 R. C1 e
        GENTYPEDEF        sMixb;                //自定义类型GENTYPEDEF 变量定义
$ m/ H( W% ?2 \& K# g
# i* f7 I1 d( D9 k6 \5 s1 _        P_IOD_Attrib->W = 0xFFFF;        //IOD初始化
  w  o  a3 }( R" K# h) P, h        P_IOD_Dir->W        = 0xFFFF;
' P7 t2 y' z- S- \. j: i        P_IOD_Buffer->W        = 0xFFFF;) @2 f, o$ q; a
        P_IOD_Data->W        = 0x0000;  J- v! }+ W1 p% ^* ?

, o$ v0 M2 J8 V& _# W2 W        sBits.W = 0xA5FF;                //字(Word)操作
* B9 J; u9 M8 g9 ?6 D1 N, c        sBits.B.bit0  = 0;                //位(Bit)操作1 m! w5 W) |' e, ?% z2 S+ {
        sBits.B.bit15 = 0;                //位(Bit)操作
6 ^+ ^! y* M% E* X, k' \! J, ^, m8 Q1 A
        sByte.W = 0xA5FF;                //字(Word)操作$ }0 Y9 }5 e' U  X
        sByte.B.byte0 = 0xA5;        //字节(Byte)操作
) ~0 v# r$ W1 g( L, f9 U2 R1 x        sByte.B.byte1 = 0xFF;        //字节(Byte)操作
; u% c2 h: s2 @
. {& U, X0 i* W; G9 r/ t2 f        sMixb.Word = 0xA5FF;        //字(Word)操作
3 K& X% ?; |' R2 `( N5 v        sMixb.Bits.bit14 = 1;        //位(Bit)操作! P0 A: V0 k3 g0 P) ?* b2 A
        sMixb.Bits.bit15 = 0;        //位(Bit)操作
1 B4 y& J1 ?! ~. {        sMixb.Byte.byte0 = 0;        //字节(Byte)操作: M0 v! b2 M! v! @6 [
        sMixb.Byte.byte1 = 0;        //字节(Byte)操作
, y2 v2 i* u& g$ m1 n# F
3 V) t+ r8 v" @% L8 \# }% K        ptr->Word = 0x90Fe;        //转型后变量的操作方式5 w7 U& t! B: `7 |' L( o
        ptr->Bits.bit0  = 1;
1 Q9 L* _- N8 W3 y: |- ]6 E        ptr->Bits.bit15 = 0;% J. p4 `$ B. l! L, g& O3 E$ Q8 O
        ptr->Byte.byte0 = 0xFF;
( x- L' `, Y* l4 ?, C        ptr->Byte.byte1 = 0x00;
  O  }8 n' d$ v7 ^) _! J6 V# C: h8 {! V. l, U

5 S) E- A2 M8 h) f/ F/ x        while(1)
# r" p& g, _- _: s        {  l, K% B  A" h  b
                LEDCHG->Byte.byte0 = 0xA5;        //对硬件(IOD)的字节(Byte)操作
! w& h8 B3 ?% L9 G4 ^                LEDCHG->Byte.byte0 = 0x5A;! Y/ @" O+ Q5 l, O4 m7 m# j( D
* O- P1 e7 r. E6 Q# B  P1 H8 y
                LEDCHG->Byte.byte1 = 0xA5;
7 W2 J' L4 q4 {5 C8 f                LEDCHG->Byte.byte1 = 0x5A;: }/ i' q% T$ _5 h6 z0 r2 j3 M
: D  K$ V4 {/ O7 o( ?, ~
                LEDCHG->Byte.byte0 = 0x00;( T0 h3 Y- I" o  m9 a. b! Y. L
                LEDCHG->Byte.byte0 = 0xFF;
3 X/ ~0 w6 i8 z. c" b; S8 R5 d' [% z( x% d- k4 {
                LEDCHG->Byte.byte1 = 0x00;1 {; n. y' Z% S! E9 ^8 _, a6 d+ x
                LEDCHG->Byte.byte1 = 0xFF;) x+ l5 s* ^! c% o) P/ V
6 \; w) T- U7 {/ `/ S
                LEDCHG->Word           = 0x00;        //对硬件(IOD)的字(Word)操作
- i/ s4 [& k: ~+ [7 v
$ s. {+ z+ ^& G* ^                LEDCHG->Bits.bit0 = 1;                //对硬件(IOD)的位(Bit)操作4 ?2 P5 d4 ^0 _2 L$ E
                LEDCHG->Bits.bit0 = 0;1 ^& U% l# C+ M3 M

# O! X% Y# E% c3 w, Y/ @2 B" h! @                LEDCHG->Bits.bit5 = 1;
. ^) O6 K2 I3 n# Y* j. ]                LEDCHG->Bits.bit5 = 0;
; R$ Y* ~5 c3 E+ _$ ^7 K0 m2 d2 U4 Q
) c" P! D0 O' I* M2 R; }                LEDCHG->Bits.bit10 = 1;1 [* p0 U$ ~  _5 F
                LEDCHG->Bits.bit10 = 0;( g( _; F2 I/ D0 \* p! J
6 }* g0 m6 U) X! T
                LEDCHG->Bits.bit15 = 1;: ^5 h8 C- y( c; t! K
                LEDCHG->Bits.bit15 = 0;- l- j2 V. s+ v4 E+ o! D
        }
8 _- k1 x0 V9 s- P& Z' d" [; N}. M; M1 ~- j0 H. w4 i; \

' x' ]& N, p$ ]0 Y下载:
7 a9 f" h6 M5 \6 w) |
游客,如果您要查看本帖隐藏内容请回复
/ i5 v- ]1 i8 h
8 e/ Y# S) L- b- D' [7 t' T

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 22:21 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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