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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机C语言的结构体实现字节、位操作
6 N; g4 I& i0 L2 h6 q" }5 A& C6 t+ \2 h9 Z& k) w- ]+ ]
! \& F! K% l2 Q' m/ f) w1 i' a
源码:6 J5 C! M$ h- e" b

( J1 \+ b! Q* r2 W# c2 ]/* ========================================================================= */* q9 ^# }3 J0 R6 Y
/* The information contained herein is the exclusive property of             */
2 x8 J) t9 P" v9 V! Y9 l" W( w2 z/* Sunplus Technology Co. And shall not be distributed, reproduced,          */5 p. y: q* P# ~
/* or disclosed in whole in part without prior written permission.           */
( g# Y& |# }& U- L, q2 [8 i2 x/*             (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.                     */! n/ x1 R- [! A+ [9 Q+ |" V
/*                    ALL RIGHTS RESERVED                                    */
  h( z( }/ O3 O) b6 c/* The entire notice above must be reproduced on all authorized copies.      */! _4 M: B, o7 R) j, p% h; l
/* ========================================================================= */
8 R' _" ]3 l( ^/*                                                                                                                                                          */% C8 ~5 \( f$ t8 |  L
/* ========================================================================= */( N3 `( n/ l* Z0 a
/* Project Name  : AN_SPMC75_0202                                                                             */
. L- \! a5 J. A/* File Name     : main.c                                                                                                          */
6 C/ n; o) j( p& i6 S/* Description   : Easy-to-Use Byte and Bit mode operation using C data          */
+ {! ^8 f( r* {6 {/*                 structure                                                                            */0 _. A/ j6 `* h! B9 ^
/* Processor     : SPMC75F2413A                                                                                             */
1 Z% P( r; n5 B- P; C" p/* Tools             : u'nSP IDE tools v1.18.1A or later version                                 */3 z1 V& M6 y& b# e" l; \0 V; g/ J
/* ========================================================================= */' d+ n9 w: C5 b' m, u  f; o
/* Revision                                                                                                                                         */
5 {& I. }$ H# i' i6 b! L% g/* ========================================================================= */
5 B3 }9 y8 J* T9 o' C! _/ t* m/* Version       :  1.00                                                                                                            */
* D% [* Z$ Z5 t. p# B/* Date                         : 9.2                                                                                                 */
0 I  [* t" N. E, V" T! `/* Modified by   :        更换正规的文件头和最新的头文件                                                         */- a1 h- _# C- {  u
/* Description         :                                                                                                                     */
% H- q8 Y" l" v0 z/* ========================================================================= *// h2 g! |4 b! O" i5 T" Q' r

. T% q7 U' {0 P, Y2 [4 M#include        "AN_SPMC75_0202.H"
  ^+ P8 B. I( A5 O1 z/ ?: d; O* g6 {, ~, h0 r
//===========================================================================
; u, Q4 y5 y- B% n# N/ t/*
3 d- u4 x& k- a+ e .Note:3 G" o6 Y8 X4 _: x: u- S) p7 V
         将UInt16型变量variable强制转换为GENBITSDEF类型的指针,
1 P# W8 r  E! Z  ^/ T8 C         那么这样一个指针ptr就可以具有GENBITSDEF类型所定义的$ L& @. H! S9 Z0 ]
         属性和成员,对其操作就可以实现对ptr所指存储空间进行操作。
/ c5 v+ A$ R* W1 X0 `5 d; n*/- K$ j( w: |8 X5 j
#define        ptr        ((volatile GENTYPEDEF *)(&variable))        //普通变量强转换类型+ Z6 V  {1 T; x
0 l" @8 l5 G9 Y2 T4 I
main()5 P3 B7 W! L, `2 ~; L/ N& E# D
{
% w+ x/ O9 p  y& K4 J$ x  f' V        UInt16 variable = 0;        //UInt16 变量定义2 X& D$ s; ~+ @8 ^) ?
        GENBITSDEF        sBits;                //自定义类型GENBITSDEF 变量定义/ [$ X. V. F: J* [6 D# e  n
        GENBYTEDEF        sByte;                //自定义类型GENBYTEDEF 变量定义- h$ S1 ]( [1 Y
        GENTYPEDEF        sMixb;                //自定义类型GENTYPEDEF 变量定义
6 S( P2 ]9 D7 _9 M. b* O* z+ e- a
5 B1 f; B, a/ t4 |% L6 U        P_IOD_Attrib->W = 0xFFFF;        //IOD初始化
6 W; R* U. S  K5 T8 k% Y4 \" P        P_IOD_Dir->W        = 0xFFFF;5 w# j3 j$ M6 g, z4 V  N) J3 J+ Q
        P_IOD_Buffer->W        = 0xFFFF;. W3 d/ a. C- q$ E! G+ k  k2 @  q% Y
        P_IOD_Data->W        = 0x0000;
9 T( O* q0 M" {! y# u9 m. M( W* q1 |  D+ k% j6 m  M
        sBits.W = 0xA5FF;                //字(Word)操作( p2 F/ k, P& {0 j% p
        sBits.B.bit0  = 0;                //位(Bit)操作
, x6 x4 X+ K" B9 {# d        sBits.B.bit15 = 0;                //位(Bit)操作. U, ~# ~% k+ A) ?
7 K& c% Z: E, d8 P0 @
        sByte.W = 0xA5FF;                //字(Word)操作# R& D/ O7 ]- ~2 Y3 T
        sByte.B.byte0 = 0xA5;        //字节(Byte)操作
5 o. E) t3 `% ?) p, j        sByte.B.byte1 = 0xFF;        //字节(Byte)操作5 ]1 y1 T* {2 [2 o
3 X! [! A" y& [* n4 T: S( Z1 r
        sMixb.Word = 0xA5FF;        //字(Word)操作% E( l" h0 f: L
        sMixb.Bits.bit14 = 1;        //位(Bit)操作
) P, d& V# o' Q6 l# P        sMixb.Bits.bit15 = 0;        //位(Bit)操作% I6 D& v8 i' X: Z" B/ Y  Y1 B
        sMixb.Byte.byte0 = 0;        //字节(Byte)操作
$ Z: s3 a7 m: Q0 g8 D- X        sMixb.Byte.byte1 = 0;        //字节(Byte)操作
; J8 a: x$ K" W. ?* Q% b9 f) N: A
        ptr->Word = 0x90Fe;        //转型后变量的操作方式
9 x5 x% H  b0 K        ptr->Bits.bit0  = 1;
7 L, `1 k. c$ f# \( h2 Y        ptr->Bits.bit15 = 0;/ Z1 W6 z8 b  ^. A- [8 Q$ m% p& Y/ {
        ptr->Byte.byte0 = 0xFF;1 P) W; D9 L4 T) J
        ptr->Byte.byte1 = 0x00;
+ @5 n& g4 T; n# Z2 O' T2 y  U6 |( |* v
. X0 j! s+ m& S! b% W
% n: _/ K" B" k        while(1)$ Y" N& F% x2 Y" F6 K3 K+ c) Y
        {
; ]7 M! `4 L+ d2 V9 \7 R                LEDCHG->Byte.byte0 = 0xA5;        //对硬件(IOD)的字节(Byte)操作/ F5 m( Z. P. s% J+ M
                LEDCHG->Byte.byte0 = 0x5A;
8 u  R- L/ ]1 X% y9 S4 o* F& {1 n* _* E+ l' b/ V
                LEDCHG->Byte.byte1 = 0xA5;
% c5 U7 x0 Q1 Q0 \$ i                LEDCHG->Byte.byte1 = 0x5A;
8 f3 F' h4 E( p2 M& ]( ^# L1 V; N3 [5 u$ i
                LEDCHG->Byte.byte0 = 0x00;: H% ^5 n% @8 B( n- u. f, }
                LEDCHG->Byte.byte0 = 0xFF;5 S# B, A* V2 w2 M

) ^4 s) L5 K1 E6 x' [; N1 r                LEDCHG->Byte.byte1 = 0x00;: \+ Q( M  ]  ~# T* I
                LEDCHG->Byte.byte1 = 0xFF;
9 z5 ~+ ^) t$ P7 F; h1 D4 h7 w( c' z/ K
                LEDCHG->Word           = 0x00;        //对硬件(IOD)的字(Word)操作
3 J" G; Z' H3 H2 ]; y6 }# e/ f2 `2 E5 e9 J3 p1 F1 v1 m
                LEDCHG->Bits.bit0 = 1;                //对硬件(IOD)的位(Bit)操作
$ Y9 [1 Z! ^# |! A& ?                LEDCHG->Bits.bit0 = 0;
3 J$ ^+ h+ p# I. g5 P. p/ t" [, f, x  J  Y9 i
                LEDCHG->Bits.bit5 = 1;
9 t/ w* @5 V1 J" k& A) {9 X1 y                LEDCHG->Bits.bit5 = 0;( ~5 W( _, J2 x3 h2 Y; a5 V

% N9 ~: Y/ ]7 ]% ~: Q! J                LEDCHG->Bits.bit10 = 1;( \2 t+ I& r. }+ ^% ~' m
                LEDCHG->Bits.bit10 = 0;
! u" c+ O1 d/ c5 z' O2 T: q$ P4 C: V3 F/ ]& _
                LEDCHG->Bits.bit15 = 1;( ~4 p+ n/ Y+ t# T
                LEDCHG->Bits.bit15 = 0;5 }) a% B- v* E
        }
9 V$ b+ z( R6 t) g}4 X- Q' \, h) g% c2 ?: ]4 p  m

' a' B9 Y% Z: ?6 ~% k0 [1 w下载:
% p2 H& [' r+ Q: Q# A" Q
游客,如果您要查看本帖隐藏内容请回复
) a3 ]) R( K: [# x

0 ?' i2 j2 Y0 H  O8 ~+ t1 n# J

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-30 12:44 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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