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