|
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 f4 N- S2 d- V. o3 ^, I& M+ m
|
|