找回密码
 注册
关于网站域名变更的通知
查看: 405|回复: 4
打印 上一主题 下一主题

关于51单片机定时器的使用?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-18 10:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
为什么我用这段程序想输出周期10ms的方波,仿真的出来差不多11.5ms为什么误差这么大,问题出在哪,下面是程序和电路(晶振12M,仿真软件默认连接)。
( K' k5 y/ z( h
  • #include
  • #if(1)
  • int count = 0;
  • ***it output = P1^0;
  • void initialize()
  • {
  •     EA = 1;
  •     //EX0 = 1;
  •     //EX1 = 1;//外部中断开启
  •     //IT0 = 1;
  •     //IT1 = 1;//设置外部中断触发方式
  •     ET0 = 1;//定时器中断打开
  •     TMOD = 0x01;//定时器工作方式
  •           TR0 = 1;//启动定时器0
  •     TH0 = 0xFF;//0xFF;//
  •     TL0 = 0x9C;//0xAA;//定时器初值(100us)
  • }
  • int main (void)
  • {
  •         initialize();
  •         while(1)
  •         {
  •     if(count <= 100)
  •     {
  •         if(count <= 30)
  •         output = 1;
  •         else output = 0;
  •     }
  •     else count = 0;
  •         }
  • }
  • void timer0() interrupt 1
  • {
  •     count++;//计数
  •     TH0 = 0xFF;//0xFF;//
  •     TL0 = 0x9C;//0xAA;//重置定时器初值(100us)
  • }
  • #endif

  • 6 N/ W  t# A6 g6 I
/ b4 ]2 k" T4 q3 y4 @" m  z! s
& P+ S  x: ~. [3 _
( C. C/ B( A& L

该用户从未签到

2#
发表于 2022-11-18 11:26 | 只看该作者
给个参考程序:7 U2 u  n; `- H
#include
0 n( Z+ ?0 a1 G2 `6 I#if(1)* l' z( |5 l, X
9 v! Y% P9 g" R2 @
int count = 0;% }  _7 a. S, u

2 o" A' D" y' l+ W5 T1 S***it output = P1^0;8 n6 Z) k# w2 c
2 p5 W5 y6 V2 l$ M# m
  k; m1 Z1 B  d8 I4 d; E
void initialize()
! s+ k" M$ L$ M{
, I, t. C$ D. u: R0 I- u1 j9 \  TMOD|=0X02;
, [$ p& x  K) i5 g/ X' K6 {        TH0=0x9c;
7 x! G( s/ @+ G        TL0=0x9c;6 a/ O$ _* v6 K1 f' J
        TR0=1;//也可以到用时才启动, W! X# N/ u) J, s: p
        ET0=1;  " F/ ]9 X/ g% ]1 {- D$ N: v
       2 l3 U& T, i* t' a7 z
        EA = 1;
: p$ C1 P6 p. O( ~& W   / Y; J1 J( J- [, C
        /*ET0 = 1;//定时器中断打开
& o4 Q( A3 R+ J5 |2 B7 L        TMOD = 0x01;//定时器工作方式 01-16位
- J- [0 O& `( L! c' O' v        TR0 = 1;//启动定时器0
# t6 ^* @# Z3 l& U  Z. i( {/ c" n3 g        TH0 = 0xFF;//0xFF;//
& D7 Q/ H' E- }5 X0 v        TL0 = 0xff;//0x9C 0xAA;//定时器初值(100us)*/
! J& S  i6 E7 m3 D}1 ^' N9 h8 y, R: w$ H0 v4 g

- O. _- i8 v. c  Z5 M* u' _' u  p, f' g. K; o
int main (void)
9 o9 E; j  l/ Y6 N6 j  J$ y{
: |  p4 m* b4 p6 H# o; B' S$ E7 @        initialize();
  x4 ]/ p, X# Y' Y7 b5 ]( G) {6 @1 [4 z0 i) r! w$ A& ~5 X4 ]
        while(1)
# `# s% \+ e# \6 V, [" a        {
; B/ v4 _$ B$ F" @5 @- Y3 S    if(count <= 100)8 k1 o4 v; S' j2 D( X* R
    {: Y/ K" I: T2 Z% A7 m9 g. e, A' j
        if(count <= 50)8 `. T& O6 q3 l5 f
        output = 1;
% L7 P* a& ^8 [) e. |- g% K        else output = 0;
' D/ i9 l& ~; W% l( U    }/ w1 q: Y9 |$ M
    else count = 0;& L: {# @$ U4 h1 V9 |  r
               & K! z% V, ^. g  H0 Y; M& k9 {7 [
  }
9 `  T2 c. ?0 z}
4 o+ [2 ]2 N  P# `9 R1 K1 B) m1 N# J( s
! v# D; u, R7 q; q( {void timer0() interrupt 1/ f3 W" Q' V1 J6 A  v6 w
{
% W. S3 G6 N' I# z+ m- v    count++;//计数
5 i( k4 e/ Q) |5 X" ?# r9 T5 i9 B    //TH0 = 0xFF;//0xFF;//4 q+ M( |, r9 ?3 j% H) w
    //TL0 = 0x9C;//0xAA;//重置定时器初值(100us): P+ Y! V6 C: b% d" ^
}
+ X0 q+ w, Z- c0 C% u) L) y#endif

点评

怎么运行之后差得更远了,10ms只剩7ms,工作方式为什么是这个TMOD|=0X02;  详情 回复 发表于 2022-11-18 13:27

该用户从未签到

3#
 楼主| 发表于 2022-11-18 13:27 | 只看该作者
Dollche 发表于 2022-11-18 11:26
  ^5 U9 z  \7 R: j7 X0 H给个参考程序:
* G2 F0 ]) R, L- O#include% g6 M8 B; g% L% X0 I! ~
#if(1)
: f% y; S2 H- J1 d: }
怎么运行之后差得更远了,10ms只剩7ms,工作方式为什么是这个TMOD|=0X02;
% h, g8 f  Y0 D$ H: v$ z  l( j

点评

//TH0 = 0xFF;//0xFF;// //TL0 = 0x9C;//0xAA;//重置定时器初值(100us) 这两句要注释掉  详情 回复 发表于 2022-11-18 13:36

该用户从未签到

4#
发表于 2022-11-18 13:36 | 只看该作者
niubility 发表于 2022-11-18 13:271 T7 o& F5 f4 m$ T' {9 t
怎么运行之后差得更远了,10ms只剩7ms,工作方式为什么是这个TMOD|=0X02;

- s1 k: t# {; Q( E5 A//TH0 = 0xFF;//0xFF;//
# f; |4 M; {, q3 ?' r  g( S  |//TL0 = 0x9C;//0xAA;//重置定时器初值(100us)
# `6 l% J5 T0 e2 b5 z5 z) O这两句要注释掉
0 K5 e  D( U+ s( B+ {9 T/ ]$ B

该用户从未签到

5#
发表于 2022-11-23 10:02 | 只看该作者
先初始化,再在中断中写定时器的函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-13 17:02 , Processed in 0.156250 second(s), 31 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表