📄 pwm.c
字号:
#include "regs240x.h"
//#define PWM_MAX 6000
/*void initial()
{
asm(" setc SXM"); // 符号位扩展有效
asm(" clrc OVM"); // 累加器中结果正常溢出
asm(" clrc CNF"); // B0被配置为数据存储空间
SCSR1=0x81FE; // CLKIN=10M,CLKOUT=4*CLKIN=40M
WDCR=0x06f; // 不使能看门狗,因为SCSR2中的WDOVERRIDE
WDKEY=0x5555;
WDKEY=0xaaaa; // 软件禁止看门狗
IMR=0x0000; // 禁止所有中断
IFR=0x0FFFF; // 清除全部中断标志,"写1清0"
WSGR=0X00; // 禁止所有的等待状态
}*/
main()
{
// unsigned int uWork;
// initial();
asm(" setc INTM"); /* 关中断 */
asm(" setc SXM"); /* 符号位扩展有效 */
asm(" clrc OVM"); /* 累加器中结果正常溢出 */
asm(" clrc CNF"); /* B0被配置为数据存储空间 */
WDCR=0x6f;
WDKEY=0x5555;
WDKEY=0xaaaa; /* 关闭看门狗中断 */
SCSR1=0x81fe; /* DSP工作在40MHz */
IMR=0; /* 屏蔽所有可屏蔽中断 */
IFR=0x0ffff; /* 清除中断标志 */
// uWork=WSGR; /* I/O引脚0等待 */
// uWork&=0x0fe3f;
// WSGR=uWork;
// MCRA=MCRA|0x0c0; /* IOPA6-7被配置为基本功能方式,PWM1-2 */
// ACTRA=0x06; /* PWM2低有效,PWM1高有效 */
MCRA=MCRA|0xfc0; /* IOPA6-7被配置为基本功能方式,PWM1-2 */
ACTRA=0x0aaa; /* PWM2高有效,PWM1高有效 PWM4高有效,PWM3高有效 */
DBTCONA=0x00; /* 不使能死区控制 */
CMPR1=0x3000; /* 比较单元1设置 */
CMPR2=0x2000; /* 比较单元2设置 */
CMPR3=0x1000;
T1PER=0x6000; /* 设置定时器1的周期寄存器,以确定不同的输出占空比 */
COMCONA=0x8200; /* 使能比较操作 */
T1CON=0x1000; /* 定时器1为连续增计数模式 */
T1CON=T1CON|0x0040; /* 启动定时器1 */
while ( 1 )
{
CMPR1+=1;
CMPR3+=1;
if(CMPR1>=0x5f00)
CMPR1-=0x4f00;
if(CMPR3>=0x5f00)
CMPR3-=0x4f00;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -