|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机入门 程序理解问题
# _- i% n: G) D" x6 I0 \7 d
" b4 Y' m5 k$ ^/ {' s1 p7 R; m2 f$ {( ?2 ~& C! C" f4 ?( Z
下面是51单片机的一个简单的电机程序,想问一下各位朋友,在中断函数void Interruped() interrupt 1里面为什么要将P1口的值暂存?看书上解释说,是为了使高四位不受到影响,但是如果我直接对P1操作也可以电机转起来的,即! a e# I+ Z2 x: o/ ^
if(beat != 0)
/ } U# H2 B" a {
2 }7 u) E" _7 I6 Z3 n P1 = P1 & 0xF0;7 k& _( s3 O% `5 ]2 ?
P1 = P1 | Beat[index];
' M9 Y, ?. Z) P- r. u2 M0 ^ index ++;' a8 t' F* u) V3 _- ^7 Z
index = index & 0x07;
& J1 ^2 Y# g3 s6 n- K3 n beat--;1 m. Z/ e5 U2 a( A/ ~
}3 s$ X! D4 S. p5 n% D0 h: |' u
请问有什么区别吗?新手入门不是很理解啊,求解答 U2 {/ n, I1 p L
+ M; E) B) T; n9 a' @! X' D& g0 E
5 b: B$ w0 d; O#include<reg52.h>3 f; V0 Y: Y6 R
unsigned long beat = 0;
% H; a g( A# N( Z' p- ]1 P# `; G5 C) p+ ^& P. u6 J
void StartMotor(unsigned long angle);' n- G1 a2 Z1 N8 [3 S% h
void mian()# Z, T! W' C8 ~. e- m# x# g" c% S" }
{ G' g- K: Q3 J) x1 H1 V: e! s$ m
EA = 1;1 f4 R. P( d {5 k5 b9 c
TMOD = 0x01;2 \( H' ]' M" n8 L
TH0 = 0xF8;
8 a6 _" C$ v! X( w4 x+ J TL0 = 0xCD;8 a8 a% @& g$ C! ^ T; s H
ET0 = 1;! A4 Q! K+ b7 y" e+ ?/ L& q, ]
TR0 = 1;
% S! {0 s- T+ \ ]) t( `7 a' N$ P" _
StartMotor(360*2 + 180);
# n4 C0 h0 J" H# w" }0 a8 I. q while(1);# z- W# z4 D/ u0 v
}
0 |% m/ {; ^, j' z1 T& ?0 N' C: ~7 C# W- P
& e& {& ]; @7 X0 w) Y! k9 R! t4 L: rvoid StartMotor(unsigned long angle)# L* ^5 u6 m! b# J: _
{ w% t' L, _) i+ F3 u+ w7 b0 f- N( m
EA = 0;
1 [' T8 b* W$ D5 `1 p0 q0 E beat = (angle*4076)/360;
! @" l/ u S, d& d EA = 1; + {8 H- a: W$ m; B5 e% A- Z: C
}/ p/ t! G2 H% d0 E4 o- c
void Interruped() interrupt 1
{, X+ `# j( C& R O3 Q, P{# _7 U9 B, g: I% y3 k; H0 F7 k+ ]
unsigned char tmp;4 U- e. e- j9 C
static unsigned char index = 0;5 l9 \: A+ ^5 f! i! U7 M, G
unsigned char code Beat[8]={: J* L- v# O8 e2 j5 a+ A
0x0E ,0x0C ,0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06- c+ l) P: s: m, T. f; j$ {: a% d
};' @ ~0 ?- Q( s4 [% ?0 i
TH0 = 0xF8;
$ e+ q- c/ C0 Q: ~7 [ TL0 = 0xCD;9 D4 j: w' L3 T( g
, r( w* N2 Q" P# e6 h if(beat != 0)1 [0 t5 Q- |9 e5 F( y5 g
{
' p6 b* x2 j" c1 ]0 _" Q' Q tmp = P1; //将P1口当前值暂存$ ?- B* e9 f- B9 e, J- u- W: J
tmp = tmp & 0xF0;3 ?6 E, \8 s5 \! X E7 G
tmp = tmp | Beat[index];
: Y( K! Z6 x6 U; \% b# L4 ^1 i P1 = tmp;6 l9 O9 a+ X7 B* l& P2 z
index ++;- T) ]. k$ a& J7 c
index = index & 0x07;
9 _7 l& J$ @* \! V$ S/ C7 `6 ^9 S beat--;
5 c4 H6 F; T/ P3 l S6 x/ B# X- z }9 {; Q+ ^1 Z1 L: ~6 C* W
else/ l% A/ @- |0 H) B& o5 T
{
' b4 _4 j$ i, U9 e P1 = P1 | 0x0F;
" v& a+ X/ j& P, }- x& A/ c }
4 e* a$ T8 S% P. K/ q: i}
9 e1 q( I6 A/ O. Q2 N% F |
|