|
#include "ioCC2530.h"
#define LED1 P1_0
unsigned char pwm_period = 100; //定義PWM的周期
unsigned char pwm_duy = 90; //定義PWM的占空比
unsigned char t_count = 0; //間隔定時(shí)次數(shù)累計(jì)
/*==================端口初始化函數(shù)======================
功能:初始化LED1和SW按鍵
將P1_0設(shè)置為通用I/O端口的輸出模式
關(guān)閉LED1燈
設(shè)計(jì):廣東職業(yè)技術(shù)學(xué)院 歐浩源
時(shí)間:2017年10月19日
========================================================*/
void Init_Port()
{
P1SEL &= ~0x01; //將P1_0設(shè)置為通用I/O端口
P1DIR |= 0x01; //將P1_0設(shè)置為輸出方式
LED1 = 1; //輸出1--關(guān)燈,輸出0--開燈
}
/*=================定時(shí)器1初始化函數(shù)=====================
功能:初始化定時(shí)器1
使用內(nèi)部16MHz晶振,定時(shí)周期1ms,
使用模模式,開啟通道0的輸出比較模式,
分頻系數(shù)8,打開相應(yīng)的定時(shí)中斷
設(shè)計(jì):廣東職業(yè)技術(shù)學(xué)院 歐浩源
時(shí)間:2017年10月19日
========================================================*/
void Init_Timer1()
{
/*=內(nèi)部16MHz晶振8分頻定時(shí)0.1ms的最大計(jì)數(shù)值為0x00c8=*/
T1CC0L = 0xc8; //設(shè)置最大計(jì)數(shù)值的低8位
T1CC0H = 0x00; //設(shè)置最大計(jì)數(shù)值的高8位
T1CCTL0 |= 0x04; //開啟通道0的輸出比較模式
T1IE = 1; //使能定時(shí)器1中斷
T1OVFIM = 1; //使能定時(shí)器1溢出中斷
EA = 1; //使能總中斷
T1CTL = 0x06; //分頻系數(shù)是8,模模式
}
/*================定時(shí)器1中斷服務(wù)函數(shù)====================
功能:1ms間隔定時(shí)中斷服務(wù)函數(shù)
對(duì)間隔定時(shí)次數(shù)進(jìn)行累加,即t_count++
t_count < pwm_duy, 輸出高電平
pwm_duy < t_count < pwm_period, 輸出低電平
t_count = pwm_period,t_count清0,輸出高電平
每完成一個(gè)PWM改變一個(gè)占空比,實(shí)現(xiàn)呼吸燈
設(shè)計(jì):廣東職業(yè)技術(shù)學(xué)院 歐浩源
時(shí)間:2017年10月19日
========================================================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
T1STAT &= ~0x01; //清除定時(shí)器1通道0中斷標(biāo)志
t_count++; //對(duì)間隔定時(shí)次數(shù)進(jìn)行累加
if(t_count < pwm_duy) //高電平周期到
{
LED1 = 1;
}
else if(t_count < pwm_period) //低電平周期到
{
LED1 = 0;
}
else //準(zhǔn)備開始下一個(gè)PWM輸出
{
LED1 = 1;
t_count = 0; //間隔定時(shí)累加清0
pwm_duy--;
if(pwm_duy == 1)
{
pwm_duy = 90;
}
}
}
/*=====================主函數(shù)===========================*/
void main()
{
Init_Port(); //初始化I/O端口
Init_Timer1(); //初始化定時(shí)器1
while(1);
}
|
|