📄 main.c
字号:
/* PWM模块例程
HCS908_QG8 单片机开发板
实验介绍:
本程序是PWM模块的例程,所用资源为单片机内部TPM模块,所接器件为LED
确定你开发板上拨码开关JP4(图片上的9)的1位处于on,而其他位处于远离on!
实验现象:
LED的闪烁频率逐渐减小,直到熄灭,然后再次点亮,如此循环熄灭点亮!
author:QGL
any question mail me:
libing.qu@free-tech.com.cn
*/
/*****************头文件****************************************/
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
/*********************变量和函数定义****************************/
void PWM_INIT(unsigned int i);
void DELAY_MS(int i);
void TIMER_INIT(void);
void MCU_INIT(void);
char t;
/*********************主函数************************************/
void main(){
unsigned int Period; //PWM周期
unsigned int Duty; //PWM占空比
Period =0x20;//变量初始化
MCU_INIT();
PWM_INIT(Period);//PWM初始化
TIMER_INIT();
Duty = 0;
EnableInterrupts; //PWM占空比为0
while(1){
__RESET_WATCHDOG();
//if(Duty<Period) //判断脉宽是否达到周期的长度(占空比为100%)
Duty=0x10;//Duty+1; //PWM占空比加1
//else{
// DELAY_MS(1000);
//Duty=1;0; //占空比达到100%,设置占空比为0%
// }
//TPMSC=0X10;
TPMC0VH =0x00; //(Duty>>8); ////设置PWM脉宽,设置高字节
TPMC0VL =0x14;// Duty; //设置低字节
TPMSC=0X08;
if(t>=100) {
TPMSC=0X00;}
if(t>=200){
TPMSC=0X08;
t=0;
}
}
}
/***************************MCU初始化函数*******************************/
void MCU_INIT(void){
ICSC1=0x04;
ICSC2=0x40;
ICSTRM=0xa8;
SOPT1=0x42;
SOPT2=0x00;
}
/************************PWM初始化设置**************************/
void PWM_INIT(unsigned int Period)
{
unsigned int Temp=Period;
TPMSC=0X08; //不允许溢出中断,不启动计数,分频因子=4
TPMMODH =0x00;// (Temp>>8); //设置PWM周期
TPMMODL =0x28; //Period;
TPMC0VH = 0x00;//初始化设置PWM脉宽为0
TPMC0VL = 0x14;
TPMC0SC=0X28; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
}
/************************延时函数********************************/
void DELAY_MS(int i) {
int k;
for(k=i;k<i;k--) {
;}
}
/******************定时器中断***************************************/
interrupt 12 void MTIM_ISR(void) {
MTIMSC_TOF=0; // clear TOF
t++;
PTAD_PTAD1=~PTAD_PTAD1; // toggle Port
PTAD_PTAD0=~PTAD_PTAD0;
} /**/
/*******************初始化函数****************************************/
void TIMER_INIT(void) {
ICSC2_BDIV = 3;
PTADD_PTADD0 = 1; //PTA0,PTA1设置为输出
PTADD_PTADD1 = 1;
MTIMCLK_PS = 8; //时钟频率/256
MTIMCLK_CLKS = 0; //定时器时钟为总线时钟
MTIMMOD = 0xff; //设置模数
MTIMSC = 0x60; //使能定时器中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -