楼主学习心态还是蛮好的 但学习的方法并不对 一有问题就问,不管问题有多简单,总之是觉得不懂都要问 可是,学习本身就是去学你本身不会的东西呀,你都会了,还学什么呢? "如果高效简单"这个问题是如何产生的? 是你想要高效简单还是项目要求?或者是作业要求的? 编程并不是高效简单就是好的 就拿定时器中断来说, 使能一些相关中断,人家都是: EX0=1; ET0=1; EA=1; EX1=1; ET1=1, 为什么不用IE=0x8f;呢?难道这一条语句不更加"高效简单"吗? 看出这里头有什么不同吗? STC15最高效的PWM用片上的PWM功能,而不是用定时器,如果片上没有,那就换单片机,价钱差不多一样的 如果一定要用定时器,最高效的是汇编语言,但汇编不一定会简单 |
24到100us 的变化增量是多少? 1us?5us?10us?不同增量对单片机的速度要求很不一样 |
设PWM周期是T,脉冲宽度是P,PW1、PW2这两个相差180度的输出。 做个定时中断,中断周期=T1,保证:T=2*N*T1,T>P;N由你选,要保证占空比好调节就行了!实际只要做到N是P、T/2、的公约数即可。 调置一个计数器X。 中断服务程序: 1、X=X+1;中断计数,处理脉冲宽度,占空比的时机。 2、当X=T时,清X=0;即一个周期完成从头再计。 3、当X=0时,置PW1=1;相位0度,PW1开始。 4、当X=P时,清PW1=0;PW1正脉冲结束。 5、X=T/2时,置PW2=1;相位180度,PW2开始。 6、X=(T/2+P) MOD T 时,清PW2=0;PW2正脉冲结束。 注,分两种情况处理PW2正脉冲结束时间: P<T/2时,X=T/2+P 时PW2正脉冲结束 P>=T/2时,X=T/2+P-T=P-T/2 时PW2正脉冲结束; 简单吧。 |