可以用现成的定时器生成器! void Timer0Init(void) //100微秒@11.0592MHz { EA=1; ET0=1; AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0xA4; //设置定时初值 TH0 = 0xFF; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } EA=1; ET0=1; 这两句在开始位,如在结束位,有什么不同. |
hhh402 发表于 2019-4-10 13:30 多谢 |
只是51单片机速度太慢造成的,中断时间太短还没有运算完。改成1kHZ频率,如果仿真正常就说明这个判断是对的,或者把单片机晶振改成30MHZ,如果这时示波器检测的频率大于2500HZ也能说明是51单片机速度太慢造成的。 |
LIZHIZHI1 发表于 2019-4-9 20:51 这个程序放那里?大佬 |
LIZHIZHI1 发表于 2019-4-9 20:51 我试试 |
可以用现成的定时器生成器! void Timer0Init(void) //100微秒@11.0592MHz { EA=1; ET0=1; AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0xA4; //设置定时初值 TH0 = 0xFF; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } 这个很正确! |
robinsonlin 发表于 2019-4-9 13:10 我就是定的0.1ms啊 |
assor 发表于 2019-4-8 21:02 昨天回车键敲快了。 图片没有贴上去。 |
STC.jpg (206.75 KB, 下载次数: 64)
wxxl 发表于 2019-4-8 12:15 不太懂 ![]() |
暖色系GD_ALIU 发表于 2019-4-8 15:19 模拟的就做不到10K吗 |
robinsonlin 发表于 2019-4-8 12:49 初值怎么不对了,大佬。 |
定时器初值问题吧.下载工具里就有定时器代码生成器,输入参数直接复制就行了. |
你首先算一下10us的中断周期,CPU执行中断里的语句时间够不够就明白是怎么回事了。 |
你这个是模拟PWM |
这个你需要考虑下进入中断的最小时间,如果最小时间计算不能做到10Khz,那就是不可以 |
另外,你的计时器初值好像也不对, 试试 |
中断里面除法运算,你以为这些都不占用时间的么? |
可以用现成的定时器生成器! void Timer0Init(void) //100微秒@11.0592MHz { EA=1; ET0=1; AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0xA4; //设置定时初值 TH0 = 0xFF; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } |
飞机翻筋斗 发表于 2019-4-8 10:58 设置了其他的,也是一样的。我程序没写错吧 |
设置成50us电平翻转试试![]() |