📄 pwm.c
字号:
/*************************************************
本程序通过2407的pwm单元产生占空比连续变化的pwm波形
**************************************************/
#include "register.h"
unsigned char i=0,direct=0;
int pwmval=0;
initsys()
{
asm(" setc INTM ");
asm(" setc SXM ");
asm(" clrc OVM ");
asm(" clrc CNF ");
*SCSR1=0X82FE; //CLKIN=10M,CLKOUT=2*CLKIN=20M
*WDCR=0X0E8;
*IMR=0X0002;
*IFR=0X0FFFF;
WSGR=0X00; //禁止所有等待状态
}
int initpwm()
{
*MCRA=*MCRA|0X0CC0; //初始化IO口
*ACTRA=*ACTRA|0X0606;/*PWM1,5高位有效,PWM2,6低位有效*/
*DBTCONA=0X0AA8;/*使能死区单元,(10*4)/CLKOUT=2us*/
*T1CON=0X0800; //定时器为连续增减计数模式
*T1PER=1000; /*设置Timer1的周期寄存器值,
定时器周期为2*1000/CLKOUT=100us,对称输出方式*/
*T1CNT=0x0000;
*CMPR1=0;
*CMPR3=0;
*COMCONA=0x8200; //使能pwm
*EVAIMRA=*EVAIMRA|0X0080;
*EVAIFRA=*EVAIFRA|0X0080; //使能Timer1的周期中断和清除标志位
}
main()
{
initsys();
initpwm();
*T1CON=*T1CON|0X0040;
asm(" clrc INTM "); //******开中段******//
while(1)
{
;
}
}
void interrupt timer1int()
{
if(pwmval<1000)
pwmval+=100;
else pwmval=0;
*CMPR1=pwmval;
*CMPR3=pwmval;
*EVAIFRA=*EVAIFRA|0X0080; //******清除中断标志位******//
asm(" clrc INTM ");
return;
}
void interrupt nothing()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -