lkc8210 发表于 2022-7-15 16:30 谢谢,开始不知道还要选这个。现在明白了 |
枫清y 发表于 2022-7-15 11:51 你选错了1T,普通8051是12T的 ![]() |
枫清y 发表于 2022-7-15 11:40
|
void Timer0Init(void) //50毫秒@11.0592MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 16位 TL0 = 0x00; //设置定时初始值 TH0 = 0x4C; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } STC89C52 定时器0中断50ms |
本帖最后由 枫清y 于 2022-7-15 11:55 编辑 188610329 发表于 2022-7-15 11:42 void Timer0Init(void) //50微秒@11.0592MHz { AUXR |= 0x80; //定时器时钟1T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xD7; //设置定时初值 TH0 = 0xFD; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 }定时长度为50 找到错那里了,该用笔来算算。大意了,纳闷上面定时为50单位为微秒,我要的是50毫秒。哎呀,真憨啊我。谢谢,果然单片机10天征服我啊,😭 |
枫清y 发表于 2022-7-15 11:34 你确定? (65536-50000)/256 = 0xfd ???? 你计算器按一下看看? |
lkc8210 发表于 2022-7-15 11:24 郭天祥老师在视频中用的TL0=(65536-50000)%256;TH0=(65536-50000)/256;这两个。中断那章郭老师的视频看的云里雾里,之后看了其他up主的视频,说八位定时器可以用软件来算,我就一直用的软件。哪知道这次不行。就咋想都想不明白 ![]() |
lkc8210 发表于 2022-7-15 11:24 大佬又是你,感谢感谢。忘说了。因为直接来定义1秒都达不到跟何况2秒了,所以我采用了50ms,之后再运行40次。那个if就是判断是否中断了40次,也就是2秒。是的话再,t重新计数,同时显示数码管。就这样循环下去。 真的很怪.TL0=(65536-50000)%256; TH0=(65536-50000)/256;用这两个都没问题, TH0 = 0xFD;TL0 = 0xD7;这两个就有问题,按照道理,都是代表50ms,没想到用这个TH0 = 0xFD;TL0 = 0xD7;数码管闪的老快了。正常的话应该LED闪烁两次,数码管显示一次 |
TL0 = 0xD7; TH0 = 0xFD; 0xFDD7 = 64983 计时时间 = 65536 - 64983 = 533 12Mhz晶振为533us 11.0592Mhz晶振为 600us 你是不是在STC-ISP上按错了? ![]() |