|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机入门 程序理解问题
- w% |& }2 g. O. Z& P7 |5 q: j& L; s, Z9 B) V
, V" j0 s6 `4 J6 y: u9 w; G
下面是51单片机的一个简单的电机程序,想问一下各位朋友,在中断函数void Interruped() interrupt 1里面为什么要将P1口的值暂存?看书上解释说,是为了使高四位不受到影响,但是如果我直接对P1操作也可以电机转起来的,即
; q8 V. U0 n6 E( c5 ` if(beat != 0)
- Q" m; \. ?% U- J8 C& j7 w { : }5 H ]! T$ h& a z
P1 = P1 & 0xF0;
9 F ^- P; q: s- f9 M8 M+ ]$ o/ ` P1 = P1 | Beat[index];
2 x" q S# `+ b* a9 _; ?* I# v/ |' O index ++;
7 Y! ?; o' H$ s3 @; |" I! ]: [% r) c index = index & 0x07;
9 x$ s8 s- g1 ^, I% e0 o. Y7 U beat--;5 X6 y; n) U6 O& U+ I; K
}% r$ V# E* o8 Y# X
请问有什么区别吗?新手入门不是很理解啊,求解答
8 t& T! C- [- }8 ^& Z' V+ J* g" ~5 s$ L5 O! p
; s: `7 `3 |* q! Y
#include<reg52.h>
9 \ w. \: o+ J# Eunsigned long beat = 0;8 b* j3 I; m* p
& k7 ^& J. W! k$ c
void StartMotor(unsigned long angle);
) L. r( Z, V% T' Y M( `6 \void mian()
0 z1 ~. G" O+ X2 y{
+ X E- e$ d4 W/ R2 n$ P! q EA = 1;# R8 q% e. i ]2 X5 L# {
TMOD = 0x01;
, v/ n0 v% P$ {4 r TH0 = 0xF8;
) v3 U' { t" ?$ l. m9 y8 Q TL0 = 0xCD;& R3 T7 @7 B* r$ q- ?0 X- E
ET0 = 1;! p5 X' D/ D4 Q" o9 z# v; G# E
TR0 = 1;! r6 l. g6 }, j9 o8 o. z4 c
2 d/ F W* y& L1 B/ B! m3 T StartMotor(360*2 + 180);
0 `" I/ H' l6 B: K4 J3 j while(1);
5 ~* q. b" o" ?% v$ m}
' ^5 l+ l3 P0 m* b F5 z7 C' ^, c$ n6 z. O5 |/ ~
void StartMotor(unsigned long angle)
- n" l7 Y9 e( o/ a6 e. ?* L{
- M7 @3 E3 h2 D# w$ r% k" G7 h EA = 0;; Q8 A% f4 A9 D! M0 F6 z" y
beat = (angle*4076)/360;
0 q! D+ } |% C' W: f EA = 1;
, I' O' u$ k: B; v. C}2 b+ }. m' T7 u
void Interruped() interrupt 1
) r0 S3 t; h* n{
- z O0 Q$ c/ ]- I% I3 m% ^ unsigned char tmp;2 m& |9 J5 p2 x7 I) `* K
static unsigned char index = 0;
* Q" b, H8 `. Z; z+ @; O unsigned char code Beat[8]={+ J" `4 G8 ?, _- C) I+ a( Q" f
0x0E ,0x0C ,0x0D, 0x09, 0x0B, 0x03, 0x07, 0x067 K1 F$ N0 p# H, n' O* ^
};
) t0 @. k8 q) a+ O! L8 \ TH0 = 0xF8;
3 E" E& y* i9 Z7 A5 m1 ] TL0 = 0xCD;
' Q7 W3 j1 l9 u% L, b- V1 z) |) T1 m S# k }6 D( ^
if(beat != 0)! z i' U! C% O2 ^
{
' D1 L! k+ f/ f7 w tmp = P1; //将P1口当前值暂存# `3 ] R/ e, C$ ?
tmp = tmp & 0xF0;
3 q# v+ V# B+ J- X7 J tmp = tmp | Beat[index]; p: o3 c" r" k4 r. n6 d: u* {: ]
P1 = tmp;
6 Z# |1 G" [2 w( X index ++;# X" n; \1 }- r8 S
index = index & 0x07;
8 V, g8 M3 S* A- n1 O2 s beat--;
2 s% [8 w9 j# o& R' [ }
R, m* l& f$ I6 o) D% r( y4 b( m else
% ]2 C7 @0 |+ w' g7 c { & H; m# S. X: e4 X. O
P1 = P1 | 0x0F;
; V1 {7 y4 s0 f% T5 s' Y0 x: j }! s: C/ Q, l% q6 b
} A7 U. o6 k: q0 M: v
|
|