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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机C语言的结构体实现字节、位操作3 d" D3 p) c& b0 @* n3 x- e  d

: N9 G, N% x; g3 F1 @7 q# y( \

+ b; o8 C: Y1 I源码:
, C- ?, |, O) p+ _
' y! M$ h% A1 n8 p, K/ n/* ========================================================================= */# M. h" y3 F+ l4 ^
/* The information contained herein is the exclusive property of             */
/ ]8 V3 Y% o( l( o/* Sunplus Technology Co. And shall not be distributed, reproduced,          */- \  z% I6 V1 o: _
/* or disclosed in whole in part without prior written permission.           */
3 w  y2 k7 p) h% R/*             (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.                     */3 l0 j) z4 E. W/ x5 Z, f& [
/*                    ALL RIGHTS RESERVED                                    */
, t7 w& W( s! m; e/* The entire notice above must be reproduced on all authorized copies.      */' x, \5 k& ?5 ^4 F( \" ]
/* ========================================================================= */
3 d6 ]: o4 I( `$ k5 H0 p: W/ m/*                                                                                                                                                          */
" v% \& d7 k' R6 e# ~2 d/* ========================================================================= */7 A9 j4 F1 a/ M. V% i
/* Project Name  : AN_SPMC75_0202                                                                             */% |' a! X* V" w
/* File Name     : main.c                                                                                                          */& p  f8 z% l+ {# y
/* Description   : Easy-to-Use Byte and Bit mode operation using C data          */
2 ], T6 i' c- P6 L( y/*                 structure                                                                            */
+ q  n9 y! d. t' K/* Processor     : SPMC75F2413A                                                                                             */* C( I: K. H; O7 g# T' ]3 e
/* Tools             : u'nSP IDE tools v1.18.1A or later version                                 */
) i# C2 \$ k" D3 x' v* B/ W/* ========================================================================= */# {+ T) n9 z3 y5 t
/* Revision                                                                                                                                         */0 v% `" U/ w; n* n
/* ========================================================================= */, L. N+ {( T  l' Y  h' \
/* Version       :  1.00                                                                                                            */# ]4 E6 b; X3 x* v1 d3 Z
/* Date                         : 9.2                                                                                                 */
3 Q$ ^- f* y+ n) s( R* c/* Modified by   :        更换正规的文件头和最新的头文件                                                         */
4 V6 C9 n. _0 \8 H9 Q' p7 t% X6 @/* Description         :                                                                                                                     */
# X9 D( j9 g6 D/ u/* ========================================================================= */8 d9 o% L) D2 g
/ D9 Q! h/ g7 N2 a2 k) i  b
#include        "AN_SPMC75_0202.H"
6 ^  L( O$ }2 ^/ L  k8 A
9 S0 T3 Y! z8 c: T* ^//===========================================================================3 N2 n' |* q/ K/ P, W& o( [
/*  u& G, F  [0 l2 u0 q9 g
.Note:
7 ^2 W- H: g# m4 n. \: {         将UInt16型变量variable强制转换为GENBITSDEF类型的指针,( J' T( w3 ?" A" T" [+ F
         那么这样一个指针ptr就可以具有GENBITSDEF类型所定义的1 Z& v& A0 Y4 ~. E: w0 E. T
         属性和成员,对其操作就可以实现对ptr所指存储空间进行操作。4 r% Y5 h9 o% d8 Q  K! ?* r% r
*// y2 q7 z8 \: J8 h  t6 X7 M# p, z3 q
#define        ptr        ((volatile GENTYPEDEF *)(&variable))        //普通变量强转换类型
& Q& n& |6 n+ g- y6 n2 N
) O3 a4 k) O) F# cmain()
3 @  v4 g9 x: h) K( L% G{0 @$ M  N4 @9 z3 N3 d. S
        UInt16 variable = 0;        //UInt16 变量定义
+ h# T& A3 B4 ^% [  S# R1 J6 m        GENBITSDEF        sBits;                //自定义类型GENBITSDEF 变量定义
5 ?! `1 x6 r, c" H  F% {# N        GENBYTEDEF        sByte;                //自定义类型GENBYTEDEF 变量定义5 x, H2 o" l0 C1 ?& a3 `
        GENTYPEDEF        sMixb;                //自定义类型GENTYPEDEF 变量定义
" U! Y1 [5 M) r
3 V8 V( {9 X; l8 k/ y% G        P_IOD_Attrib->W = 0xFFFF;        //IOD初始化
4 j& W' {8 a. v. Z8 x        P_IOD_Dir->W        = 0xFFFF;
' x% N( f. D; e5 t; r4 {        P_IOD_Buffer->W        = 0xFFFF;
$ ]# x% R1 j" R0 J        P_IOD_Data->W        = 0x0000;9 F0 @0 G- Z- Q7 t2 t! e
9 H' B; J! T: x+ z5 j! S" r* h
        sBits.W = 0xA5FF;                //字(Word)操作) F1 j6 ?" f$ V/ j
        sBits.B.bit0  = 0;                //位(Bit)操作
0 S" u* e0 c3 ], j# S        sBits.B.bit15 = 0;                //位(Bit)操作- b5 V( C( E8 y
" P  d3 S4 u- Q( _' ~7 R! m
        sByte.W = 0xA5FF;                //字(Word)操作. N" O: P* C( n
        sByte.B.byte0 = 0xA5;        //字节(Byte)操作
, i! s1 k8 n  @2 a. @1 B: H  O2 l        sByte.B.byte1 = 0xFF;        //字节(Byte)操作( ?7 ?3 U) u+ h( @! a8 A. f
- ^/ `7 G( l% d* x, X# _' V; l
        sMixb.Word = 0xA5FF;        //字(Word)操作9 Y5 Q/ q9 D' ^  K; x# @# {3 n
        sMixb.Bits.bit14 = 1;        //位(Bit)操作. y7 v6 [# b0 p+ L* o4 M# O9 E' b
        sMixb.Bits.bit15 = 0;        //位(Bit)操作
- l; s% a! ?2 V3 ?0 ]/ U' c        sMixb.Byte.byte0 = 0;        //字节(Byte)操作5 W; h+ I. l7 p* {$ g5 U2 U( l
        sMixb.Byte.byte1 = 0;        //字节(Byte)操作
* [7 |( a" j# ^& H4 Y; O/ c2 c, F) V! g5 w
        ptr->Word = 0x90Fe;        //转型后变量的操作方式
0 v: i6 \- \: z; C1 I, K; E        ptr->Bits.bit0  = 1;9 d/ q4 r6 i* m  c' Z
        ptr->Bits.bit15 = 0;( W" P/ Y. A, J5 a% S, Y/ ~( N
        ptr->Byte.byte0 = 0xFF;
9 D# R# u' @; p0 @1 i1 A        ptr->Byte.byte1 = 0x00;& U8 Q- M9 |$ u& r  H7 C
7 p8 L3 x3 d- [$ [' v9 Y

) t1 ^& m+ J2 @, [* t4 c0 s        while(1)
7 a# O/ _( a; P" v( }& D        {
! T2 V1 Y+ O  u" r                LEDCHG->Byte.byte0 = 0xA5;        //对硬件(IOD)的字节(Byte)操作# B! G, `5 _! ]; S; w8 z( h/ ~
                LEDCHG->Byte.byte0 = 0x5A;
* g& q, f  h* ?3 S" O
4 f; Z, c: \" x# ^; w                LEDCHG->Byte.byte1 = 0xA5;; O1 }# s: U! q
                LEDCHG->Byte.byte1 = 0x5A;
* B, m! v6 L( a: @
: J+ a9 G& l0 x& C0 F! j4 W. x, o                LEDCHG->Byte.byte0 = 0x00;
0 c4 y0 s/ Z& E0 U% B8 m8 r0 e                LEDCHG->Byte.byte0 = 0xFF;% U" K* ^9 _) P/ ^/ @* p6 Y

8 s8 p5 {$ i. R. r0 E' c                LEDCHG->Byte.byte1 = 0x00;
: {+ k$ V7 b- \1 J                LEDCHG->Byte.byte1 = 0xFF;! p. k" v6 c, e7 f4 o% n1 b
: V' d% |' O+ |
                LEDCHG->Word           = 0x00;        //对硬件(IOD)的字(Word)操作
; R; B4 I1 `1 b& c4 j5 x' G6 _: }% p! i  E4 d1 T5 G
                LEDCHG->Bits.bit0 = 1;                //对硬件(IOD)的位(Bit)操作
, U1 ~3 c3 B& Y7 b) R; h# P                LEDCHG->Bits.bit0 = 0;7 y! }& |. Q2 x% @

$ f8 ]7 d3 m0 k8 A                LEDCHG->Bits.bit5 = 1;
7 z" ]/ R  Y+ a8 r5 `9 p$ B$ k                LEDCHG->Bits.bit5 = 0;
& S4 [! D, B. R3 Q" J5 v% ~3 z! @, F2 E+ t, H
                LEDCHG->Bits.bit10 = 1;
6 l1 {* [$ T1 I) T                LEDCHG->Bits.bit10 = 0;
! D6 i1 X: P0 L' o3 E9 z9 q/ ?7 z! M/ U4 \, w+ o, q
                LEDCHG->Bits.bit15 = 1;
  x  h$ ^; x1 a                LEDCHG->Bits.bit15 = 0;) g# K) z5 f  z- T1 s2 }
        }
4 n3 D; H& l4 M% c: G}
3 U  l9 m( h  v" l7 C
0 S1 g* I7 p7 r下载:
$ O" B# M2 d( s$ k: j
游客,如果您要查看本帖隐藏内容请回复
' f$ O2 p7 ~3 C* O6 @
9 R3 j' a* {5 j3 \0 r

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-13 01:36 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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