⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spwm程序.txt

📁 Spwm的程序
💻 TXT
字号:
#include        "LF2407Regs.h"
#include           "math.h"



#define  PI  2*3.1415926   // 定义2π的值

float AL;
int DFLAG,N;
unsigned int r1[20],r2[20],r3[20];
unsigned int xf = 0;

int t;
int i = 0;
int j = 0;
//  屏蔽中断程序        
void inline disable() 
{
asm(" setc INTM";
}




void        interrupt nothing()
{asm(" CLRC INTM";
        return;                                                // 中断直接返回
}

void        interrupt tint()
{
int flag;
flag=*EVBIFRA&0x0080;
if(flag!=0x0080)
{
  return;}
DFLAG=1;
i++;
if (i >= 20 ) i = 0;
*CMPR4=r1[i];
*CMPR5=r2[i];
*CMPR6=r3[i];
*EVBIFRA=0XFFFF;
j++;
if (j >= 500)
  {
   j = 0;
   xf = ! xf;
  
   }
return;
}





main( )
{
int FCL,FRL;

t=6000;                                // PWM输出初始化
FCL=1000;
FRL=50;
AL=0.4;

DFLAG=1;

N=FCL/FRL;
        disable();                                                // 总中断禁止
        // 系统初始化
        
        asm(" clrc  CNF";            // B0被配置为数据存储空间
        *IMR=0x0002;                 // 使能第1级中断2
        *IFR=0x0FFFF;                        // 清除全部中断标志,"写1清0"
        *SCSR1=0x81FE;                // CLKIN=6M,CLKOUT=4*CLKIN=24M
        *WDCR=0x0E8;                // 不使能看门狗,因为SCSR2中的WD OVERRIDE
                                     // 即WD保护位,用户可通过将WDCR中的WDDIS置1来禁止WD工作
                                //   软件禁止看门狗
        for(j = 0;i < 20;i++)
          {
          r1[i]=t*(0.5+AL*sin(i*PI/N));
          r2[i]=t*(0.5+AL*sin(i*PI/N+PI/3));
          r3[i]=t*(0.5+AL*sin(i*PI/N-PI/3));
          }

        *MCRC=*MCRC|0X007E;        // IOPE1-6被配置为基本功能方式,PWM7-12
        //*MCRC=*MCRC|0X0600;        
       *EVBIFRA=0XFFFF;
       *T3PR=6400;      //*周期值6400;
       *ACTRB=0X0666;                        // PWM12,10,8 低有效,PWM11,9,7 高有效
        *DBTCONB=0X00;                        // 不使能死区控制
        *CMPR4=0X001f;
        *CMPR5=0X002f;
        *CMPR6=0X003f;
        
        *T3CON=0X0B00;  //* 连续增减模式, 八分频,内部时钟,下溢重载
                          // 设置定时器3的周期寄存器,并设置CMPR4-6,以确定不
                                   // 原为0X0B0E

        *COMCONB=0XA600;    // 使能比较操作,下溢重载

        *T3CNT=0;                                // 定时器3为连续增计数模式
*GPTCONB=0X0041;
*EVBIMRA=0X0080;
asm(" CLRC INTM";
*T3CON=*T3CON|0x0040;
while(1)
{
asm ( " idle";
if (xf)
   asm ( " setc  XF";
else
   asm ("  clrc  XF";
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -