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