你這種單片機是輝芒的, 有PIC16 like 指令集
設置TMR2輸出比較值定時100us=(1/16000000)*2*4*200(PR2)
- //*********************************************************
- /* 文件名:TEST_60F02x_Timer2.c
- * 功能: FT60F02x-Time2功能演示
- * IC: FT60F023 SOP16
- * 晶振: 16M/2T
- * 說明: 當DemoPortIn懸空或者高電平時,
- * DemoPortOut輸出5KHz占空比50%的波形-Tm2實現
- * 當DemoPortIn接地時,DemoPortOut輸出高電平.關定時器
- * FT60F023 SOP16
- * ----------------
- * NC------------|1(PA1) (PA0)16|------------NC
- * NC------------|2(PA7) (PA2)15|------------NC
- * DemoPortIn----|3(PA6) (PA4)14|---DemoPortOut
- * VDD-----------|4(VDD) (GND)13|-----------GND
- * NC------------|5(PC7) (PC0)12|------------NC
- * NC------------|6(PC6) (PC1)11|------------NC
- * NC------------|7(PC5) (PC2)10|------------NC
- * NC------------|8(PC4) (PC3)09|------------NC
- * ----------------
- */
- //*********************************************************
- #include "SYSCFG.h"
- //**********************************************************
- //***********************宏定義*****************************
- #define unchar unsigned char
- #define unint unsigned int
- #define unlong unsigned long
- #define DemoPortOut RA4
- #define DemoPortIn RA6
-
- /*-------------------------------------------------
- * 函數名:POWER_INITIAL
- * 功能: 上電系統初始化
- * 輸入: 無
- * 輸出: 無
- --------------------------------------------------*/
- //********************************************************
- //**************中斷處理**********************************
- void interrupt ISR(void) //PIC_HI-TECH使用
- {
-
- //定時器2的中斷處理**********************
- if(TMR2IE && TMR2IF) //100us中斷一次 = 5KHz
- {
- TMR2IF = 0;
- DemoPortOut = ~DemoPortOut; //翻轉電平
- }
- }
- /*-------------------------------------------------
- * 函數名:POWER_INITIAL
- * 功能: 上電系統初始化
- * 輸入: 無
- * 輸出: 無
- --------------------------------------------------*/
- void POWER_INITIAL (void)
- {
-
- OSCCON = 0B01110001; //WDT 32KHZ IRCF=111=16MHZ/2=8MHZ,0.125US/T
- //Bit0=1,系統時鐘為內部振蕩器
- //Bit0=0,時鐘源由FOSC<2:0>決定即編譯選項時選擇
- INTCON = 0; //暫禁止所有中斷
- PORTA = 0B00000000;
- TRISA = 0B11101111; //PA輸入輸出 0-輸出 1-輸入
- //PA3->輸出
- PORTC = 0B00000000;
- TRISC = 0B11111111; //PC輸入輸出 0-輸出 1-輸入
- WPUA = 0B01000000; //PA端口上拉控制 1-開上拉 0-關上拉
- OPTION = 0B00001000; //Bit3=1 WDT MODE,PS=000=1:1 WDT RATE
- //Bit3 預分頻器分配位 0-Timer0 1-WDT
- //Bit7(PAPU)=0 ENABLED PULL UP PA
- MSCKCON = 0B00000000; //Bit6->0,禁止PA4, PC5穩壓輸出(60F02x保留位)
- //Bit5->0,TIMER2時鐘為Fosc(60F02x保留位)
- //Bit4->0,禁止LVR(60F02x M版之前)
- //Bit4->0, LVREN使能時,開啟LVR(60F02x M版及M版之后)
- //Bit4->1, LVREN使能時,工作時開啟LVR, 睡眠時自動關閉LVR(60F02x M版及M版之后)
- CMCON0 = 0B00000111; //關閉比較器,CxIN為數字IO口
-
- }
- /*-------------------------------------------------
- * 函數名稱: TIMER2_INITIAL
- * 功能: 初始化設置定時器2
- * 相關寄存器: T2CON TMR2 PR2 TMR2IE TMR2IF PEIE GIE
- -------------------------------------------------*/
- void TIMER2_INITIAL (void)
- {
-
- T2CON = 0B00000001; //Bit[1,0]=01,T2時鐘分頻 1:4
- //Bit[6-3]=0000,T2輸出時鐘分頻1:1
- TMR2 = 0; //TMR2賦初值
- PR2 = 200; //設置TMR2輸出比較值定時100us=(1/16000000)*2*4*200(PR2)
- //16M-2T-4分頻
- TMR2IF = 0; //清TIMER2中斷標志
- TMR2IE = 1; //使能TIMER2的中斷
- TMR2ON = 1; //使能TIMER2啟動
- PEIE=1; //使能外設中斷
- GIE = 1; //使能全局中斷
- }
- /*-------------------------------------------------
- * 函數名: main
- * 功能: 主函數
- * 輸入: 無
- * 輸出: 無
- --------------------------------------------------*/
- void main()
- {
- POWER_INITIAL(); //系統初始化
- TIMER2_INITIAL(); //初始化T2
-
- while(1)
- {
- if(DemoPortIn == 1) //判斷輸入是否為高電平
- {
- TMR2IE = 1; //開定時器2
-
- }
- else
- {
- TMR2IE = 0; //關定時器2
- DemoPortOut = 1;
- }
- }
- }
復制代碼
|