本帖最后由 芯圣电子官方QQ 于 2023-7-24 15:27 编辑
下载的问题解决了(见前两贴),我就开始实验下仿真好不好用呢?????
我就在下载的例程里找到了PWM,P22管脚输出的那个例程。然后我看手册上说可以任意映射,我就映射到P10。因为那里有个LED。
程序如下:
#include "intrins.h "
unsigned char i;
unsigned int y;
void delay(void);
/***************************************************************************************
* @实现效果 P22口输出频率为15.69KHz,占空比为34%的方波
***************************************************************************************/
int main()
{
/************************************系统初始化****************************************/
WDTCCR = 0x00; //关闭看门狗
while((CLKCON&0x20)!=0x20); //等待内部高频RC起振
CLKSWR = 0x51; //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
while((CLKSWR&0xC0)!=0x40); //等待内部高频切换完成
CLKDIV = 0x01; //Fosc1分频得到Fcpu,Fcpu=16MHz
/************************************PWM3初始化****************************************/
P1M0 = 0x08; //P10设置为推挽输出
PWM3_MAP = 0x10; //PWM3映射P10口
PWM3C = 0x92; //使能PWM3,关闭中断,允许输出,时钟4分频
//周期计算 = 0xFF / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0xFF /(16000000 / 4)
// = 255 /4000000
// = 63.75us 即15.69KHZ
PWM3P = 0xFF; //PWM周期为0xFF
//有效电平时间计算(即占空比)
// = 0x55 / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0x55 /(16000000 / 4)
// = 85 /4000000
// = 21.25us 占空比为 21.25 / 63.75 = 34%
PWM3D = 0x00; //PWM占空比设置
while(1)
{
for(i=0;i<255;i++)
{
PWM3D = i;
delay();
}
for(i=255;i>0;i--)
{
PWM3D = i;
delay();
}
}
return 0;
}
void delay(void)
{
for(y=0;y<10000;y++)
{
_nop_() ;
}
}
调试时我用了仿真,还算好用,就是不能停在我指定的断点,而是在断点的下边一行,但我观察变量是对的。
注意一下:这个仿真时才供电,不是插上仿真就供电。
以下是视频:
http://v.youku.com/v_show/id_XMzQ0NTMyMzI0OA==.html?spm=a2h3j.8428770.3416059.1
|