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