// 该程序利用EVB模块的PWM7--PWM12引脚产生不同占空比的方波
#include "f2407_c.h"
// 屏蔽中断程序
void inline disable()
{
asm(" setc INTM");
}
// 系统初始化子程序
int initial()
{
asm(" setc SXM"); // 符号位扩展有效
asm(" clrc OVM"); // 累加器中结果正常溢出
asm(" clrc CNF"); // B0被配置为数据存储空间
SCSR1=0x81FE; // CLKIN=10M,CLKOUT=4CLKIN=40M
WDCR=0x0E8; // 不使能看门狗,因为SCSR2中的WDOVERRIDE
// 即WD复位后的缺省值为1,故可以用
// 软件禁止看门狗
IMR=0x0000; // 禁止所有中断
IFR=0x0FFFF; // 清除全部中断标志,"写1清0"
WSGR=0x00; // 禁止所有的等待状态
}
// EVB模块的PWM初始化程序
int pwminitial()
{
MCRC=MCRC|0x007E; // IOPE1-6被配置为基本功能方式,PWM7-12
ACTRB=0x0666; // PWM12,10,8 低有效,PWM11,9,7 高有效
DBTCONB=0x00; // 不使能死区控制
CMPR4=0x1000;
CMPR5=0x3000;
CMPR6=0x5000;
T3PR=0x6000; // 设置定时器3的周期寄存器,并设置CMPR4-6,以确定不
// 同的输出占空比
COMCONB=0x8200; // 使能比较操作
T3CON=0x1000; // 定时器3为连续增计数模式
}
// 该中断服务程序主要是为了防止干扰,不做任何其它操作
void interrupt nothing()
{
return; // 中断直接返回
}
// 主程序
main( )
{
disable(); // 总中断禁止
initial(); // 系统初始化
pwminitial(); // PWM输出初始化
T3CON=T3CON|0x0040; // 启动定时器3
while(1)
{
; //等待中断发生
}
}