📄 led9212.c
字号:
#pragma sfr
#pragma di
#pragma ei
#pragma nop
#pragma interrupt INTTM000 One_Second
unsigned int ADCResult[2] = {0,0};
unsigned char mode = 0;
unsigned int TimeCounter = 0;
#define DelayPort P4.1
bit ThreeSecondFlag;
void Hardware_Init()
{
DI();
WDTM = 0x77;
PCC = 0x00;
PPCC = 0x00;
LSRCM = 0x01;
PMC2 = 0b00000010;
PM2.1 = 1;
PM2.0 = 0;
P2.0 = 0;
PM3.2 = 0;
P3.2 = 0;
PM4 = 0b00000000;
P4 = 0b00000000;
TMIF000 = 0;
CRC00 = 0x00;
CR000 = 15625; // 15625 for 1s in 4MHz
PRM00 = 0b00000010;
TMC00 = 0b00001100;
TMMK000 = 0;
EI();
}
void main()
{
Hardware_Init();
ThreeSecondFlag = 0;
while(1)
{
NOP();
}
}
void ADC_Operation()
{
unsigned char j=0;
ADIF=0;
ADS=1;
ADCE=1;
NOP();
NOP();
NOP();
NOP();
NOP();
while(j<2)
{
ADCS=1;
while(!ADIF);
ADCS=0;
ADIF=0;
ADCResult[j]=ADCR;
j++;
}
ADCE=0;
}
void PWM_Start() // freq = 20KHz in 4MHz
{
TMHE1 = 0;
TMHMD1 = 0b00001001;
CMP01 = 200;
CMP11 = 103;
TMHE1 = 1;
}
void PWM_DutyChange()
{
switch(mode)
{
case 0: if(CMP11!=103) CMP11 = 103;
break;
case 1: if(CMP11!=124) CMP11 = 124;
break;
case 2: if(CMP11!=170) CMP11 = 170;
break;
default:
break;
}
}
void One_Second()
{
TMIF000 = 0;
if(TimeCounter<21245) // 6 hours adjust for 21600
{
TimeCounter++;
if(TimeCounter>0)
{
if(ThreeSecondFlag==0)
{
PWM_Start();
DelayPort = 1;
}
ThreeSecondFlag=1;
ADC_Operation();
if((mode==1)&&(ADCResult[1]>523)) // current 350mA in 2.5V 50<Temprature<55 50 for 544, 55 for 493
{
mode = 0;
}
else if(ADCResult[1]<425) // current 300mA in 2.61V 65>Temprature>60 60 for 444, 65 for 398
{
mode = 1;
}
}
}
else if(TimeCounter>21244)
{
mode = 2; // pass 6 hours, current 170mA in 2.85V
}
if(TimeCounter>3)
{
PWM_DutyChange();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -