ydatou 发表于 2023-5-19 09:14 ![]() ![]() |
tongguan123 发表于 2023-5-19 11:42 ![]() |
wulin 发表于 2023-5-19 12:13 ![]() |
好久没用51了,围观一下 |
tongguan123 发表于 2023-5-19 11:40 这个程序在实物上运行没有任何问题,AUXR &= 0x7F;也可以省略,其默认就是12T。Keil软件仿真STC1T单片机结果不一定符合实际。 |
STC12C2052AD应该是1T单片机吧,计数初值搞错了 |
yzwzfyz 发表于 2023-5-19 09:28 1:定时功能的计数脉冲选择的是内部时钟(或分频、或不分频)得到; 计数功能的计数脉冲当然是外部脉冲信号了。 2:定时器0的计数溢出标志位TF0在计数溢出后,如果要产生延时,需要软件清零,然后再定义个循环变量,达到延时效果。 |
ydatou 发表于 2023-5-19 09:14 你以前处理过类似的问题吗? |
lkc8210 发表于 2023-5-19 10:09 ![]() |
ydatou 发表于 2023-5-19 09:14 |
可能是Keil对STC12的速度有点误会 设定500ms,仿真125ms,快了4倍 把12M改为3Mhz就行了 |
1、定时器的时钟源是晶振,所以需以根据晶振的频率不计算时间常数。 2、while(TF0 != 1); 是等待计数溢出位TF=1,是可以等到的,但它不会自动清0,也即从此后一直为1。因为以后的while(TF0 != 1)会被路过。 3、是外话。这种程序方式延时,严重占用CPU资源,与DELAY并无二样,失去了定时器的设计初衷。 4、较好的做法是,将时常数计算并设计到5ms,起动中断。如此每5ms产生一次中断,在中断服务中做个标记B5MS。主程序凭B5MS标记处理事件,完成后清除B5MS标记。如果处理的事件用时不长,如仅开关一个灯。可以不用B5MS标记,而直接在中断服务程序中处理。 |
tongguan123 发表于 2023-5-18 18:41 楼主这个定时器用法是哪个老师教的?
|
顶啥呢,有时间帮我看看喽,分析一下,我是真没辙了。先感谢一下!![]() |
顶一下 |