EDA365电子工程师网

标题: 51单片机定时器中断函数内能不能重置该定时器 [打印本页]

作者: 看海去不去    时间: 2017-7-22 14:47
标题: 51单片机定时器中断函数内能不能重置该定时器
51单片机模式1为16为定时计数器,1、在定时器模式1的中断函数内重置该定时器,能否实现自动重装的效果?2、自己以流水灯为例试了一下,好像不可以,大家帮忙看一下程序有没有问题。(定时器定时10s,变量i,用来加倍定时)/ U/ b- O4 C) c! y5 W3 M- ~7 p8 @

: `4 y4 P1 a4 M#include <reg52.h>$ j5 U) c$ t2 I% x; w' P9 I* `, L
#define uint unsigned int6 \; ]5 b0 U0 _0 h) k
uint data i = 0;  c4 n# q# c4 }8 _5 _
void time0_init(void)1 v1 [. V$ T5 q0 N4 U" b
{
$ A8 h+ ~+ B; O& F3 [ TMOD = 0x02;4 I0 l! [2 T: d$ ~( V" n
TH0 = (65536-60000)/256;3 i7 c- @6 [% q" O( f: c. {
TL0 = (65536-60000)%256;
& u3 G: Q- Y, A3 h8 v) Z' A EA = 1;4 B1 q2 K# u2 Q" z0 e, o
ET0 = 1;
5 h3 O0 @9 u; U TR0 = 1;4 x$ a* S$ g2 k4 {
}. M- }9 Z+ Z1 P4 g( ]

8 o- b1 q! r% _- L" |% B6 m9 Y  F& B% S. \
int main()9 T. h' t! A5 d4 r4 Y
{   n( {9 K# Z9 G1 f8 i* j3 A
  P1=0xfe;8 f+ L; V' D8 C& ~
  time0_init();% Z% i4 k; y' A" P
while(1);
+ a5 F& _, ]5 b}
- v/ y1 s4 b+ T9 k! I! s
# ^. t/ _, F' [! }$ a9 U4 P5 H1 L9 t
) m6 U$ y, ]% W7 u
void flash(void) interrupt 16 z# G3 \. p  i$ }; T6 D
{   
; I9 w+ r- g' N0 w1 Z   time0_init();- C5 s8 a/ \5 @7 o. _* B' X" b
     if(i>9)4 w: @# P7 d% {8 t% e1 y
  { 3 n. I, c3 n( I4 @4 p! W5 q
    if(P1==0x7f)
1 K* p- A$ k. c$ M       {$ V6 m$ x4 P3 t
        P1=0xfe;2 F1 P. _- a" A" h1 H% H1 k. ?
       }
( ~) A. r9 a6 K$ C  O& V    else
. Q, |2 E, s9 H9 J    {
& d0 H( S6 A+ B+ u; d3 X% U; E        P1<<=1;
3 S! p4 H0 }* ^7 f( q' u4 g/ g) l    P1|=0x01;
; q5 T& N) H5 r. t) T    }
  _4 O7 g1 c7 V  f) G   i=0;
" d7 ]; S/ c5 ?* e/ C  }0 a2 ?+ J# N' w4 K( G
else * Z7 K2 L1 [6 X' J2 S7 I
  i++;; t( ?1 X# l8 P1 F9 R# R& N, n
}2 _5 t. ?0 ?# I7 G% d

+ H& j: E7 e: C
4 g  e" p: x: M& F$ q
1 e6 u: Y: S5 `- E/ C# d
作者: 刘萍的小跟班    时间: 2017-7-25 12:54
定时器方式2是8位自动重装的定时计数器,通过设置TMOD来设置M1M0选择方式二,这样定时比较精确。初值的计算会有些不同。自己参考一下资料吧




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2