欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
FMD60F010單片機URT外部中斷問題?
[打印本頁]
作者:
nanyexin
時間:
2021-10-18 22:50
標題:
FMD60F010單片機URT外部中斷問題?
求教大師,我現在是用外部中斷去控制燈的三段占空比,現在發現在if(scale==40) { scale=20;}是它會延時3秒才能跳到scale=20這里,是什么原因,還有一個問題就是我要改小它的電流功耗,需要設置哪里,我試過改變晶振頻率它電流沒有減小。
單片機源程序如下:
//*********************************************************
#include "SYSCFG.h"
//**********************************************************
//***********************宏定義*****************************
#define unchar unsigned char
#define unint unsigned int
#define unlong unsigned long
#define PortOut RA4
unchar scale=40;
unchar n;
/*-------------------------------------------------
* 函數名:interrupt ISR1
* 功能: 中斷處理函數
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void interrupt ISR(void)//PIC_HI-TECH使用
{
//PA2外部中斷處理**********************
if(INTE && INTF)
{
INTF = 0; //清PA2 INT 標志位
}
//定時器2的中斷處理**********************
if(TMR2IE && TMR2IF) //200us中斷一次 = 2.5KHz
{
TMR2IF = 0;
n++;
if(n<scale) //n<設置比例時,打開燈
{
PortOut=1;
}
else if(n>=scale)//n大于等于設置比例時 關閉燈
{
PortOut=0;
}
if(n==40)
{
n=0; //n=0
}
}
}
// --------------------------------------------------*/
/*-------------------------------------------------
* 函數名:POWER_INITIAL
* 功能: 上電系統初始化
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void POWER_INITIAL (void)
{
OSCCON = 0B01100001; //WDT 32KHZ IRCF=111=16MHZ/4=4MHZ,0.25US/T
//Bit0=1,系統時鐘為內部振蕩器(60F01x保留位)
//Bit0=0,時鐘源由FOSC<2:0>決定即編譯選項時選擇
INTCON = 0; //暫禁止所有中斷
PORTA = 0B00000000;
TRISA = 0B00000100; //PA輸入輸出 0-輸出 1-輸入
//PA1->輸出
WPUA = 0B00000100; //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穩壓輸出(60F01x保留位)
//Bit5->0,TIMER2時鐘為Fosc(60F01x保留位)
//Bit4->0,禁止LVR(60F01x O版之前)
//Bit4->0, LVREN使能時,開啟LVR(60F01x O版及O版后)
//Bit4->1, LVREN使能時,工作時開啟LVR, 睡眠時自動關閉LVR(60F01x O版及O版之后)
}
/*-------------------------------------------------
* 函數名: INT_INITIAL
* 功能: 中斷初始化函數
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void INT_INITIAL(void)
{
TRISA2 =1; //SET PA2 INPUT
INTEDG = 0; //OPTION,INTEDG=0;PA2 INT 為下降沿觸發
INTF =0; //清PA2 INT中斷標志位
INTE =1; //使能PA2 INT中斷?
}
/*-------------------------------------------------
* 函數名稱: TIMER2_INITIAL
* 功能: 初始化設置定時器1
* 相關寄存器: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 = 10; //設置TMR2輸出比較值定時200us=(1/16000000)*4*4*200(PR2)
//16M-4T-4分頻
TMR2IF = 0; //清TIMER2中斷標志
TMR2IE = 1; //使能TIMER2的中斷
TMR2ON = 1; //使能TIMER2啟動
PEIE=1; //使能外設中斷
GIE = 1; //使能全局中斷
}
/*-------------------------------------------------
* 函數名稱:DelayUs
* 功能: 短延時函數 --16M-2T--大概快1%左右.
* 輸入參數:Time 延時時間長度 延時時長Time Us
* 返回參數:無
-------------------------------------------------*/
void DelayUs(unsigned char Time)
{
unsigned char a;
for(a=0;a<Time;a++)
{
CLRWDT();
}
}
/*----------------------------------------------------
* 函數名稱: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(98); //快1%
}
}
}
/*----------------------------------------------------
* 函數名稱:DelayS
* 功能: 短延時函數
* 輸入參數:Time延時時間長度 延時時長Time S
* 返回參數:無
----------------------------------------------------*/
void DelayS(unsigned char Time)
{
unsigned char a,b;
for(a=0;a<Time;a++)
{
for(b=0;b<10;b++)
{
DelayMs(100);
}
}
}
/*-------------------------------------------------
* 函數名: main
* 功能: 主函數
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void main()
{
POWER_INITIAL(); //系統初始化
TIMER2_INITIAL(); //初始化T2
while(1)
{
if(RA2==0)
{
DelayMs(2);
if(scale==40) //如果占空比為
{
scale=20; ////占空比賦值為,
}
else if(scale==20)
{
scale=5;
;
}
else if(scale==5)
{
scale=40;
}
INT_INITIAL();
GIE =1; //使能全局中?
}
while(!RA2);
}
}
復制代碼
作者:
liyezhao2019
時間:
2021-10-19 09:05
按鍵處理你確定這樣寫?
作者:
nanyexin
時間:
2021-10-19 12:01
liyezhao2019 發表于 2021-10-19 09:05
按鍵處理你確定這樣寫?
這不是按鍵,這是中斷
作者:
nanyexin
時間:
2021-10-19 12:02
liyezhao2019 發表于 2021-10-19 09:05
按鍵處理你確定這樣寫?
其它的單片機維晟和STC已經實現這個功能,只是現在要跟換單片機,所以才改的……。
作者:
xqleft
時間:
2021-10-20 11:11
在工作了?
作者:
nanyexin
時間:
2021-10-24 02:32
xqleft 發表于 2021-10-20 11:11
在工作了?
工作是工作了,現在優化了下,撤換正常,就是很耗電,現在還搞不到省電模式
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1