|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机入门 程序理解问题
1 t6 n0 n5 z9 u; |
. {; ]& }4 N$ I! J- h! p4 F* ` k: D
下面是51单片机的一个简单的电机程序,想问一下各位朋友,在中断函数void Interruped() interrupt 1里面为什么要将P1口的值暂存?看书上解释说,是为了使高四位不受到影响,但是如果我直接对P1操作也可以电机转起来的,即) [$ w1 u! b l5 W9 R' {; i0 E2 Z
if(beat != 0)7 _: z+ t |5 z4 Q c3 V* L
{
9 b9 c8 Z& H5 x3 r P1 = P1 & 0xF0;
) B4 I1 o% Q* R; j2 y8 s0 R/ r% q: ] P1 = P1 | Beat[index];& C% l/ Y& Y; O, z
index ++;# U* _( Y: y) g
index = index & 0x07;5 h+ a( A0 f) P8 p9 x$ _/ w7 Z
beat--;
; Z# M$ S4 B4 P3 } }
0 r0 s: C1 [0 Q6 Q' o+ A# ^请问有什么区别吗?新手入门不是很理解啊,求解答2 H6 d4 x( {% N& }% n; t- K
; Y% p: m4 X6 d! @1 n G
4 R7 {/ t, \, o$ ?+ a#include<reg52.h>
/ C0 d8 R8 r+ U; v' w! J, runsigned long beat = 0;! E' Q- [" \6 F, z: i2 Y6 S( o
' K* w! R) K* D- g- `7 E0 I
void StartMotor(unsigned long angle);
8 f. n! W6 n+ }, j2 O8 h; svoid mian()% x( w. D5 a$ B- J6 F7 I. b
{
`9 [7 E1 t" h N- U1 E EA = 1;, N" B: f5 e0 X9 f) E) o; e v
TMOD = 0x01;/ ~6 @: n4 N9 A' w+ l7 N. ~* ], E
TH0 = 0xF8;
& j& n! _( `4 a* H TL0 = 0xCD;
' X1 n7 T4 [# y ET0 = 1;" q r7 h. M ?, A/ k4 q' v
TR0 = 1;/ ]0 g& X0 a4 e, x J
9 R5 w4 z$ o# A: U5 ~. i4 @/ i
StartMotor(360*2 + 180);- X5 L* ]* A M2 i# ~% K
while(1);
' } N' Y/ `" n: ? P6 L* S+ p}. i* A4 o0 X( A$ j
7 D: F2 e, b( i! i' a, b" }void StartMotor(unsigned long angle)0 W% E1 Q i: Q
{
, {- N# K1 k' C/ ~4 v( a( U" |( d EA = 0;
/ ^# H) _' ]" `5 g' c, b beat = (angle*4076)/360;9 x$ _, t# A+ H
EA = 1;
0 N, n' K, C: p+ W% N$ \}2 i$ E0 ~9 J# k$ U
void Interruped() interrupt 1
* c" x+ P% o8 i0 @+ U, R0 X0 q{
9 P& [, t# w& U5 X unsigned char tmp;
- P# Q. u& _* b* @+ w) G: h9 w static unsigned char index = 0;8 Y$ ]9 C }' z. R) l3 L
unsigned char code Beat[8]={
' @3 F- t$ A% a+ B/ s! h 0x0E ,0x0C ,0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06% t7 j) ^& D; o1 d
};" W! J" x' z$ |4 P1 @
TH0 = 0xF8;
, r2 K! U# N9 H( j. v) K' i0 R TL0 = 0xCD;0 `% u4 X) ^5 h
+ f2 Z& }1 h7 ~7 ]' k
if(beat != 0)
0 |8 ^ L3 _0 O1 u( @; g5 }9 K6 H {
$ B* R7 h. S v9 b$ f tmp = P1; //将P1口当前值暂存" D, j( S8 r! E- R* Y* d' B
tmp = tmp & 0xF0;
8 X" L, H. Q! r# p0 \) _& N tmp = tmp | Beat[index];
+ |; ?% _. F) q4 N3 B0 h. O& C P1 = tmp;' F; H, D) t1 c, |: `* `4 ?
index ++;0 `3 x% i, b/ N% L
index = index & 0x07;4 L! F; q. l7 Q3 Z- e7 O9 o
beat--;7 H+ t7 k: \3 M; D& U4 u4 q
}
2 b; G/ ?% C+ l1 J8 ~; T' I: Z else
4 T- s$ ?7 D q m { 3 e6 c/ m/ {+ M
P1 = P1 | 0x0F;
, [' g4 ?3 l/ S. Z2 h }
/ m$ Y; o/ B/ o" L) M}
+ ^2 _) G% U& ~- q+ d, C |
|