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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么我用这段程序想输出周期10ms的方波,仿真的出来差不多11.5ms为什么误差这么大,问题出在哪,下面是程序和电路(晶振12M,仿真软件默认连接)。
2 e( C4 G0 S  U
  • #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

  • ; M4 e3 [3 K# ]3 y% X* h* R
* h1 K; c/ ?8 p2 h

* l$ E( D. y+ u: e; O
) \; n. S' R" Z3 ~: |$ F

该用户从未签到

2#
发表于 2022-11-18 11:26 | 只看该作者
给个参考程序:6 f7 f7 H# H0 V1 y& H0 \; p1 n; G
#include
3 Q( H& q: D4 r: a: f/ I' ]; \3 m#if(1)
/ n# |9 m1 X+ v1 W" }8 \$ n% k1 d2 K; W4 o1 {
int count = 0;
3 P7 ], }. U: q6 D+ I7 [4 {
1 ]) C7 E$ |( k* y( j# Z, ]; {***it output = P1^0;
" @  V, v1 q/ A2 E
# |. ?0 J) ?) `& _0 p
$ W; E2 Y. L7 T' T# Yvoid initialize()
8 h. r, ~+ ^: v  Z5 Z{
( B. w( j* F1 N  TMOD|=0X02;
# \3 X+ ]+ C- H. w) I# c/ A        TH0=0x9c;
* g4 h* S3 j" P        TL0=0x9c;
8 @0 Q+ F$ r# v7 R        TR0=1;//也可以到用时才启动, G& ?, G$ V! ?5 Q
        ET0=1;  + r! y: x1 H9 h' x' l
      
5 F$ V  Q) u& K1 P/ T' h        EA = 1;) ~6 l9 p4 o/ r/ U1 o4 N! x; b& n
   
4 l. I- Z8 D) b  `! m        /*ET0 = 1;//定时器中断打开: \% T2 n% A6 T* O% Z- q- ]4 O! L
        TMOD = 0x01;//定时器工作方式 01-16位
  a4 Y9 m7 c2 K9 J        TR0 = 1;//启动定时器0
& i" V0 ~2 b; \  e5 g5 y        TH0 = 0xFF;//0xFF;//  x# }: w1 }1 t) I3 v1 A4 o& b
        TL0 = 0xff;//0x9C 0xAA;//定时器初值(100us)*/& A, w7 z' {' t% @
}
. m7 H+ ~# [) t; X/ t; {. r) s$ h4 Z) ?
2 Y. `7 K; |1 f# I
1 L# g6 {$ I/ U5 M- @int main (void)# Q- x/ ?- q/ ?; J( r' v. i1 F
{
" B. H: j; C3 S' s6 m        initialize();
0 m! B* `3 H& j8 u( Z, N, W" F% \
5 @$ u9 ?. y- B# z2 W        while(1)
2 {7 {6 d4 i' z# s+ T1 b; a        {
# }, |! _  O. n8 _3 M: i$ q    if(count <= 100)1 h5 l9 T% S, @7 P4 Z: \
    {2 d5 G3 U; k4 {, b
        if(count <= 50)/ Q) y. L0 c! e9 M7 ^2 s! \
        output = 1;
% J! S: j$ P% M" T% `        else output = 0;1 }% X/ d, b/ D
    }
  J* P3 z, f: T6 N3 u' F    else count = 0;& F3 `& a9 t; j2 l' U) j) p
               ! S3 s) e0 R# k
  }
3 t" ]$ d8 X9 ?: r}, M7 _4 [0 @2 K  x+ _
6 @: s4 a& f1 g2 O% S& n
void timer0() interrupt 1
/ m  \/ s9 v# p/ l; Q{3 z2 l8 U2 t7 k6 T7 ?
    count++;//计数
5 _$ Q8 P9 O5 c0 Q8 M2 t, q    //TH0 = 0xFF;//0xFF;//8 w% {& ]8 p" o( r( i
    //TL0 = 0x9C;//0xAA;//重置定时器初值(100us); q9 X$ B! y. e  Q$ `
}% b- n' T5 i. o* T' E" G
#endif

点评

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

该用户从未签到

3#
 楼主| 发表于 2022-11-18 13:27 | 只看该作者
Dollche 发表于 2022-11-18 11:26% Y% h6 p2 [; }! F2 g
给个参考程序:
2 y. T% |7 \8 Z' N2 S#include$ E* i7 @8 g8 h9 {" F# [9 [
#if(1)

2 D6 `1 t9 {5 q) O* v" m1 g% }怎么运行之后差得更远了,10ms只剩7ms,工作方式为什么是这个TMOD|=0X02;
# C+ o) C! e7 {  r) p! D) o

点评

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

该用户从未签到

4#
发表于 2022-11-18 13:36 | 只看该作者
niubility 发表于 2022-11-18 13:27
7 Y5 n% f+ {; P/ X怎么运行之后差得更远了,10ms只剩7ms,工作方式为什么是这个TMOD|=0X02;

* H( c4 d2 l' q% I//TH0 = 0xFF;//0xFF;//' F+ N& N7 j& ~' V
//TL0 = 0x9C;//0xAA;//重置定时器初值(100us)
7 L5 G' u2 z& z: g3 l! y& P0 {* C这两句要注释掉, ^' @+ a  W/ P! w

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 07:36 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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