xs128 双定时器PIT0和PIT1
生活随笔
收集整理的這篇文章主要介紹了
xs128 双定时器PIT0和PIT1
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*****************************************************************
** 函數(shù)說明:xs128 雙定時器PIT0和PIT1
** 版 本:V1.00
** 修 改:龐輝 蕪湖聯(lián)大飛思卡爾工作室
** 修改日期:2011年09月19日
**
** 說 明:PLL倍頻到80Mhz,PB0口燈1s閃爍,PB1口燈2s閃爍
**
** 版本更新:詳見readme.txt
**
******************************************************************
**注意: LED1燈 PORTB0
** LED2燈 PORTB1
******************************************************************/
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
/***********************************************************
** 名 稱:void PLL_Init(void)
** 功 能:PLL鎖相環(huán)模塊初始化
** 入口參數(shù):無
** 出口參數(shù):無
** 使用說明:80MHz
************************************************************/
void PLL_Init(void)
{
CLKSEL = 0X00;
PLLCTL_PLLON = 1;
SYNR =0xc0 | 0x09; //80M
REFDV=0x80 | 0x01;
//SYNR =0xc0 | 0x04; //40M
//REFDV=0x80 | 0x01;
POSTDIV = 0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;
//BUS CLOCK=80M
_asm(nop); //空操作,進(jìn)行簡單的延時,等待鎖相環(huán)的相應(yīng)
_asm(nop);
while(!(CRGFLG_LOCK==1))
{
_asm(nop);
}
CLKSEL_PLLSEL = 1;
}
/***********************************************************
** 名 稱:void PIT_Init(void)
** 功 能:PIT定時模塊初始化
** 入口參數(shù):無
** 出口參數(shù):無
** 使用說明:PIT0 1ms定時
** PIT1 8ms定時
************************************************************/
void PIT_Init(void)
{
PITCFLMT_PITE=0; //關(guān)閉PIT
//微定時器的裝載寄存器
PITMTLD0= 80-1;//8位定時器初值設(shè)定。80分頻,在80MHzBusClock下,為1MHz,即1us
//PITMTLD1= 160-1;//8位定時器初值設(shè)定,160分頻,在16MHz的總線時鐘頻率下,為0.1MHz,即10us
//定時器的裝載寄存器
PITLD0 = 1000 - 1 ;//1ms
PITLD1 = 8000 - 1 ;//定時8ms
PITCE_PCE0=1;//使能通道0
PITCE_PCE1=1;//使能通道1
PITMUX_PMUX0=0;//0:相應(yīng)16位定時器與微時基0連接
//PITMUX_PMUX1=1;//1:相應(yīng)16位定時器與微時基1連接
PITINTE_PINTE0=1;//開通PIT0定時器的溢出中斷
PITINTE_PINTE1=1;//開通PIT1定時器的溢出中斷
PITCFLMT_PITE=1; //使能PIT
}
/***********************************************************
** 名 稱:void main(void)
** 功 能:主函數(shù)
** 入口參數(shù):無
** 出口參數(shù):無
** 使用說明:無
**********************************************************/
void main(void)
{
DDRB = 0xff;
PORTB = 0xff;
EnableInterrupts;
PLL_Init();
PIT_Init();
for(;;)
{
}
}
int i = 0, j = 0;
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示該程序在不分頁區(qū)
//定時器0
void interrupt 66 PIT0(void)
{
DisableInterrupts;
//清中斷標(biāo)志位
PITTF = 0x01;
i++;
//1s
if(i == 1000)
{
PORTB_PB0 = ~PORTB_PB0;
i = 0;
}
EnableInterrupts;
}
//定時器1
void interrupt 67 PIT1(void)
{
DisableInterrupts;
//清中斷標(biāo)志位
PITTF = 0x02;
j++;
//2s
if(j == 250)
{
PORTB_PB1 = ~PORTB_PB1;
j = 0;
}
EnableInterrupts;
}
#pragma CODE_SEG DEFAULT
** 函數(shù)說明:xs128 雙定時器PIT0和PIT1
** 版 本:V1.00
** 修 改:龐輝 蕪湖聯(lián)大飛思卡爾工作室
** 修改日期:2011年09月19日
**
** 說 明:PLL倍頻到80Mhz,PB0口燈1s閃爍,PB1口燈2s閃爍
**
** 版本更新:詳見readme.txt
**
******************************************************************
**注意: LED1燈 PORTB0
** LED2燈 PORTB1
******************************************************************/
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
/***********************************************************
** 名 稱:void PLL_Init(void)
** 功 能:PLL鎖相環(huán)模塊初始化
** 入口參數(shù):無
** 出口參數(shù):無
** 使用說明:80MHz
************************************************************/
void PLL_Init(void)
{
CLKSEL = 0X00;
PLLCTL_PLLON = 1;
SYNR =0xc0 | 0x09; //80M
REFDV=0x80 | 0x01;
//SYNR =0xc0 | 0x04; //40M
//REFDV=0x80 | 0x01;
POSTDIV = 0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;
//BUS CLOCK=80M
_asm(nop); //空操作,進(jìn)行簡單的延時,等待鎖相環(huán)的相應(yīng)
_asm(nop);
while(!(CRGFLG_LOCK==1))
{
_asm(nop);
}
CLKSEL_PLLSEL = 1;
}
/***********************************************************
** 名 稱:void PIT_Init(void)
** 功 能:PIT定時模塊初始化
** 入口參數(shù):無
** 出口參數(shù):無
** 使用說明:PIT0 1ms定時
** PIT1 8ms定時
************************************************************/
void PIT_Init(void)
{
PITCFLMT_PITE=0; //關(guān)閉PIT
//微定時器的裝載寄存器
PITMTLD0= 80-1;//8位定時器初值設(shè)定。80分頻,在80MHzBusClock下,為1MHz,即1us
//PITMTLD1= 160-1;//8位定時器初值設(shè)定,160分頻,在16MHz的總線時鐘頻率下,為0.1MHz,即10us
//定時器的裝載寄存器
PITLD0 = 1000 - 1 ;//1ms
PITLD1 = 8000 - 1 ;//定時8ms
PITCE_PCE0=1;//使能通道0
PITCE_PCE1=1;//使能通道1
PITMUX_PMUX0=0;//0:相應(yīng)16位定時器與微時基0連接
//PITMUX_PMUX1=1;//1:相應(yīng)16位定時器與微時基1連接
PITINTE_PINTE0=1;//開通PIT0定時器的溢出中斷
PITINTE_PINTE1=1;//開通PIT1定時器的溢出中斷
PITCFLMT_PITE=1; //使能PIT
}
/***********************************************************
** 名 稱:void main(void)
** 功 能:主函數(shù)
** 入口參數(shù):無
** 出口參數(shù):無
** 使用說明:無
**********************************************************/
void main(void)
{
DDRB = 0xff;
PORTB = 0xff;
EnableInterrupts;
PLL_Init();
PIT_Init();
for(;;)
{
}
}
int i = 0, j = 0;
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示該程序在不分頁區(qū)
//定時器0
void interrupt 66 PIT0(void)
{
DisableInterrupts;
//清中斷標(biāo)志位
PITTF = 0x01;
i++;
//1s
if(i == 1000)
{
PORTB_PB0 = ~PORTB_PB0;
i = 0;
}
EnableInterrupts;
}
//定時器1
void interrupt 67 PIT1(void)
{
DisableInterrupts;
//清中斷標(biāo)志位
PITTF = 0x02;
j++;
//2s
if(j == 250)
{
PORTB_PB1 = ~PORTB_PB1;
j = 0;
}
EnableInterrupts;
}
#pragma CODE_SEG DEFAULT
總結(jié)
以上是生活随笔為你收集整理的xs128 双定时器PIT0和PIT1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 熊仔科技Steamduino PIC18
- 下一篇: RHCSA与RHCE红帽认证考试心得