最终目的生成多个周期的方波,并且按键可选
目录
1-先生成1个100hz
PIC单片机的PWM波的简单调制+proteus仿真实现直流电机的启动
工作需要,捣鼓两天,了解了下寄存器的配置,参考网上现有帖子,改了下配置
搞了一个100HZ方波
【这里要贴图,待补,表示不是说白话】【太阳有点大,将就看吧】
关键点
由于100HZ,时间挺长的,可以使用内部1Mhz, 晶振
然后,
根据这个,算出,PR2
根据这个,
算出划红线的内容。注意点:
(CCPRXL:CCPXCON<5:4>) 看做一个整体
比如,对方帖子里,算出来的是
511,那么转成二级制 : 0b: 111111111 ,(这个用系统计算机可以算),
然后,最前面补0 ,0111 1111 11
也就是说: CCPR1L = 0111 1111 ; CCP1CON<5:4> = 11
再根据规格书内容
//bit 7-6 未实现:读为 0,
//bit 5-4 CCPxX:CCPxY:PWM 最低有效位(10位分辨率的低两位)
//捕捉模式:未用
//比较模式:未用
//PWM 模式:这些位是 PWM 占空比的低 2 位。
//这个需要你根据你自己相应的PWM来取值。
//高 8 位在 CCPRxL 中
//剩下四位,设置1100
//bit 3-0 CCPxM<3:0>:CCP 模式选择位
//11xx = PWM 模式
所以的到了寄存器CCPR1L=0X7F.CCP1CON= 0X3C[这个跟他不一样].
---2023年12月7日---
算这些其实挺费时的, 大伙可以用EXCEL的表格,套下函数,把公式给写进去,还挺好用
如下
回归程序,里面有这句话
while(!TMR2IF);
先看成 while(语句);
再回顾常规的:
-
while(表达式)
-
{
-
循环语句;
-
}
-
while语句的执行流程是:
-
首先,计算条件表达式的值。
-
如果条件表达式的值为true,执行循环体,然后回到第一步。
-
如果条件表达式的值为false,跳出while语句,继续执行后面的代码。
-
现在, 先看成 while(语句);
可以看成
while(表达式)
{
没有
循环语句;
}
套用
表达式结果为true,循环语句要被执行;如果为false,就不执行。
(!TMR2IF)如果为true,(!TMR2IF)结果为真, 没有循环语句要被执行==>就是空执行,即等待;
(!TMR2IF)如果为false,就不执行,跳出当前,其执行后面的。
那么, !TMR2IF 要 真, 就是1--》那么, !TMR2IF 要 = 1,TMR2IF 就是= 0
( 因为,前面有个 ! ,取反)
所以,再回头看,while(!TMR2IF);
意思就是, TMR2IF = 0 (即,TIMER2 还没溢出)就一直等待,等待其溢出;
一旦溢出,TMR2IF = 1, 取反就是 !TMR2IF =0 ,while 表达式为 假,跳出循环,其执行后续的;
【为啥写这些,因为,我老是看迷糊...】