"); //-->
void Freq_Set( U32 freq );
void Stop( void );
void PWM_Test( void );
void xmain(void) //主函数
{
ChangeClockDivider(3,1); //1:3:6
ChangeMPllValue(127,2,1); //405MHZ
Port_Init(); //端口初始化
Isr_Init(); //中断初始化
PWM_Test(); //PWM测试函数
}
//*******************************************************
//一般PWM定时器的启动步骤如下:
//1,将初始值写入到TCNTBn和TCMPBn中。
//2,设置对应定时器的自动重载位。
//3,设置对应定时器的手动更新位,反向器设置为off状态。
//4,设置对应定时器的启动位来启动定时器,同时清除手动更新位。
//*******************************************************
//定时器0频率设置函数
void Freq_Set( U32 freq )
{
rGPBCON &= ~3; //GPBCON0为10,为特殊功能,设置为定时器0
rGPBCON |= 2; //注意不是普通输出!!
rTCFG0 &= ~0xff; //TCFG0定时器配置寄存器0
rTCFG0 |= 15; //设置定时器0的预分频值为15
//TCFG1定时器配置寄存器1 //设置定时器0的MUX输入为1/8
rTCFG1 &= ~0xf;
rTCFG1 |= 2;
rTCNTB0 = (PCLK>>7)/freq; // 将初始值写入到TCNTBn和TCMPBn中
rTCMPB0 = rTCNTB0>>1; // 50%
rTCON &= ~0x1f; //TCON定时器控制寄存器,0b11101011,
//定时器死区操作停止,
rTCON |= 0xb; //定时器0自动加载开,定时器0输出反向器关,手动更新
rTCON &= ~2; //启动定时器0,同时清除手动更新位。
}
//************************************************************
//关闭定时器1中断函数
void Stop( void )
{
rGPBCON &= ~3; //设置GPB0为01,普通输出
rGPBCON |= 1;
rGPBDAT &= ~1;
}
//PWM测试函数
void PWM_Test( void )
{
U16 freq = 1000 ;
Freq_Set( freq ) ; //频率设置函数
while( 1 )
{
U8 key;
key="rGPGDAT"; //读取按键
if(!(key & (1<<0))) //判断是否是按键1
{
if( freq < 20000 ) //假如是则频率加
freq += 30 ;
Freq_Set( freq ) ;
}
if(!(key & (1<<3))) //判断是否是按键2
{
if( freq > 150 ) //假如是则频率减
freq -= 30 ;
Freq_Set( freq ) ;
}
if(!(key & (1<<5))) //判断是否是按键3
{
Stop() ; //停止
}
}
}
/*这里是整个工程文件压缩包
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。