|
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$ _
|
|