找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

采用单片机定时器0的工作方式1写一段5ms的延时函数,请大家帮我看看哪里出了问题?

查看数: 2501 | 评论数: 21 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-5-18 01:20

正文摘要:

一:问题描述 按照文中单片机代码编译下载后,P1口LED不闪烁,一直亮。然后通过Keil uVision5软件仿真,延时时间也不是期望的0.5s。请大家帮我看看是怎么回事? 二:硬件环境 STC12C2052AD  //12MHz ...

回复

ID:645485 发表于 2023-5-19 16:01
ydatou 发表于 2023-5-19 09:14
软件仿真使用stc芯片有问题,要改用通用芯片。
感谢你的话不知被我回复到哪里去了?我晕根据你的方法,问题解决了。再次感谢!
ID:645485 发表于 2023-5-19 15:10
tongguan123 发表于 2023-5-19 11:42
Really?这个我还真不知道!
再次感谢分享!
ID:645485 发表于 2023-5-19 14:15
wulin 发表于 2023-5-19 12:13
这个程序在实物上运行没有任何问题,AUXR &= 0x7F;也可以省略,其默认就是12T。Keil软件仿真STC1T单片机 ...
再次感谢指导!
ID:77589 发表于 2023-5-19 14:11
好久没用51了,围观一下
ID:213173 发表于 2023-5-19 12:13
tongguan123 发表于 2023-5-19 11:40
你好,大侠:        首先非常感谢你花时间回答我的问题,再次表示衷心的感谢!通过对你提供的代码进行编 ...

这个程序在实物上运行没有任何问题,AUXR &= 0x7F;也可以省略,其默认就是12T。Keil软件仿真STC1T单片机结果不一定符合实际。
ID:94253 发表于 2023-5-19 12:11
STC12C2052AD应该是1T单片机吧,计数初值搞错了
ID:645485 发表于 2023-5-19 12:03
yzwzfyz 发表于 2023-5-19 09:28
1、定时器的时钟源是晶振,所以需以根据晶振的频率不计算时间常数。
2、while(TF0 != 1);         是等待 ...
首先感谢分享与帮助!我是最近学习学到定时器这里,想充分理解它,查询功能和中断功能都要学习。实际使用中,当然会用定时器的中断功能,这里使用的查询功能,产生延时的效果,只是理解寄存器的相关配置。
1:定时功能的计数脉冲选择的是内部时钟(或分频、或不分频)得到;
     计数功能的计数脉冲当然是外部脉冲信号了。
2:定时器0的计数溢出标志位TF0在计数溢出后,如果要产生延时,需要软件清零,然后再定义个循环变量,达到延时效果。
ID:645485 发表于 2023-5-19 11:48
ydatou 发表于 2023-5-19 09:14
软件仿真使用stc芯片有问题,要改用通用芯片。

你以前处理过类似的问题吗?
ID:645485 发表于 2023-5-19 11:45
lkc8210 发表于 2023-5-19 10:09
可能是Keil对STC12的速度有点误会
设定500ms,仿真125ms,快了4倍
把12M改为3Mhz就行了
这是什么道理?以前有遇到过同类问题吗???
ID:645485 发表于 2023-5-19 11:42
ydatou 发表于 2023-5-19 09:14
软件仿真使用stc芯片有问题,要改用通用芯片。
Really?这个我还真不知道!
ID:161164 发表于 2023-5-19 10:09
可能是Keil对STC12的速度有点误会
设定500ms,仿真125ms,快了4倍
把12M改为3Mhz就行了
ID:123289 发表于 2023-5-19 09:28
1、定时器的时钟源是晶振,所以需以根据晶振的频率不计算时间常数。
2、while(TF0 != 1);         是等待计数溢出位TF=1,是可以等到的,但它不会自动清0,也即从此后一直为1。因为以后的while(TF0 != 1)会被路过。
3、是外话。这种程序方式延时,严重占用CPU资源,与DELAY并无二样,失去了定时器的设计初衷。
4、较好的做法是,将时常数计算并设计到5ms,起动中断。如此每5ms产生一次中断,在中断服务中做个标记B5MS。主程序凭B5MS标记处理事件,完成后清除B5MS标记。如果处理的事件用时不长,如仅开关一个灯。可以不用B5MS标记,而直接在中断服务程序中处理。
ID:1073939 发表于 2023-5-19 09:14
软件仿真使用stc芯片有问题,要改用通用芯片。

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

ID:213173 发表于 2023-5-18 20:54
tongguan123 发表于 2023-5-18 18:41
顶啥呢,有时间帮我看看喽,分析一下,我是真没辙了。先感谢一下!

楼主这个定时器用法是哪个老师教的?
  1. #include <STC12C2052AD.H>

  2. void Timer0Init(void)                //5毫秒@12.000MHz
  3. {
  4.         AUXR &= 0x7F;                //定时器时钟12T模式
  5.         TMOD &= 0xF0;                //设置定时器模式
  6.         TMOD |= 0x01;                //设置定时器模式
  7.         TL0 = 0x78;                //设置定时初始值
  8.         TH0 = 0xEC;                //设置定时初始值
  9.         TF0 = 0;                //清除TF0标志
  10.         TR0 = 1;                //定时器0开始计时
  11. }


  12. //以下是主程序
  13. void main()
  14. {
  15.         unsigned char num;
  16.         Timer0Init();
  17.         while(1)
  18.         {
  19.                 if(TF0)
  20.                 {
  21.                         TF0=0;
  22.                         TL0 = 0x78;                //设置定时初始值
  23.                         TH0 = 0xEC;                //设置定时初始值
  24.                         num++;
  25.                         if(num==100)
  26.                         {
  27.                                 num=0;
  28.                                 P1=~P1;//P1口取反
  29.                         }
  30.                 }       
  31.         }
  32. }
复制代码
ID:645485 发表于 2023-5-18 18:41
顶啥呢,有时间帮我看看喽,分析一下,我是真没辙了。先感谢一下!
ID:301191 发表于 2023-5-18 17:37
顶一下

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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