/* 文件名:TEST_61F02x_PWM345.C
* 功能: FT61F02x-增强型PWM功能演示
* IC: FT61F023 SOP16
* 晶振: 16M/2T
* 说明: 此程序用来演示PWM345功能
* 演示程序中在PWM345脚分别输出2KHz,1KHz,500Hz
* 占空比的为50%的信号
* BY SOILFISH FOR FREEDOM 20230911
-
FT61F023 SOP16
-
---------------
- VDD---------|1(VDD) (VSS)16|--------GND
- NC----------|2(PA7) (PA0)15|---------NC
- NC----------|3(PA6) (PA1)14|---------NC
- NC----------|4(PA5) (PA2)13|---------NC
- PWM4--------|5(PC3) (PA3)12|---------NC
- PWM5--------|6(PC2) (PC0)11|---------NC
- NC----------|7(PA4) (PC1)10|---------NC
- NC----------|8(PC5) (PC4)09|-------PWM3
-
---------------
*/
#include "SYSCFG.h"
//********************宏定义***************************
//PWM引脚输入输出控制
#define PWM3Dir TRISC4
#define SW_ON (PA1)
volatile bit SW_STATUS;
/*-------------------------------------------------
* 函数名:interrupt
* 功能: 中断处理
* 输入: 无
* 输出: 无
--------------------------------------------------*/
void interrupt ISR(void)
{
NOP();
}
void DelayUs(unsigned char Time)
{
unsigned char a;
for(a=0;a<Time;a++)
{
NOP();
}
}
/*----------------------------------------------------
* 函数名:DelayMs
* 功能: 短延时函数
* 输入: Time 延时时间长度 延时时长Time ms
* 输出: 无
----------------------------------------------------*/
void DelayMs(unsigned char Time)
{
unsigned char a,b;
for(a=0;a<Time;a++)
{
for(b=0;b<5;b++)
{
DelayUs(197); //快1%
}
}
}
/*-------------------------------------------------
* 函数名:POWER_INITIAL
* 功能: 上电系统初始化
* 输入: 无
* 输出: 无
--------------------------------------------------*/
void POWER_INITIAL (void)
{
//111 16M
OSCCON = 0B01000001; //IRCF=111=16MHz/2=8MHz,0.125us
INTCON = 0; //暂禁止所有中断
PORTA = 0B00000000;
TRISA = 0B00000010; //PA输入输出 1-输入 0-输出
PORTC = 0B00000000;
TRISC = 0B00000000; //PC输入输出 1-输入 0-输出
WPUA = 0B00000010; //禁止所有PA口上拉
WPUC = 0B00000000; //禁止所有PC口上拉
OPTION = 0B00001000; //Bit3=1,WDT MODE,PS=000=WDT RATE 1:1
MSCKCON = 0B00000000;
//Bit6->0,禁止PA4,PC5稳压输出
//Bit5->0,TIMER2时钟为Fosc
//Bit4->0,禁止LVR
CMCON0 = 0B00000111; //关闭比较器,CxIN为数字IO口
}
/*-------------------------------------------------
* 函数名:PWM_INITIAL
* 功能: PWM3,4,5初始化
* 设置PWM3周期=2^TMRXPS*2^PXPER*[(T3CKDIV+1)/PWM时钟源]
* =2^0*2^8*[(30+1)/16000000]=496us
* PWM4周期=2^TMRXPS*2^PXPER*[(T4CKDIV+1)/PWM时钟源]
-
=2^0*2^8*[(62+1)/16000000]=1.008ms * PWM5周期=2^TMRXPS*2^PXPER*[(T5CKDIV+1)/PWM时钟源]
-
=2^0*2^8*[(124+1)/16000000]=2ms * 设置PWM3周期=2^TMRXPS*2^PXPER*[(T3CKDIV+1)/PWM时钟源]
-
=2^16*2^4*[(9+1)/16000000]=0.6S
--------------------------------------------------*/
void PWM_INITIAL (void)
{
PWM3Dir = 1; //PWM3输出PIN暂为输入模式
//-------------PWM3---------------
PWM3CR0 = 0B00110000; //011 8bit OK
PWM3CR1 = 0B10101000; //64 分频最低 3.8HZ OK
TMR3H = 0;
//1.5Hz
T3CKDIV = 80; //赋值
PR3L = 200; //80%
}
/*-------------------------------------------------
* 函数名:main
* 功能: 主函数
* 输入: 无
* 输出: 无
--------------------------------------------------*/
void main(void)
{
POWER_INITIAL();
PWM_INITIAL();
TMR3ON=1;
PWM3Dir = 0; //PWM3 PIN设为输出模式允许PWM输出
SW_STATUS = 0;
while(1)
{
NOP();
}
}