📄 intserv.c
字号:
/*
The file is used to interrup service for uC pic16f688
There are two functions:
void ini_chip(void) :Initialize all variables and used registers for uc pic16f688
interrupt void timer1_isr(void) @ 0x04 :Timer1 int service subroutine
*/
#include <htc.h>
#include <pic16f688.h>
#include "IntServ.h"
#include "Type.h"
//extern ADCs adc[5];
extern unsigned int Time10ms;//10ms counter
extern int adc[5];
void ini_chip(void)
{char i=0,j=0;
//config osc
OSCTUNE=0x0F; //select internal clock MAX : 0b0000,1111
OSCCON=0x70; //switch to system clock 8MHz
//config porta and portc
TRISA=0xCF; //PORTA: HIGH: set triple input, LOW: SET OUTPUT;RA4&RA5 is set I/O PIN
RA5=1; //Close Voltage output:Chip SP2525A
OPTION=OPTION&0x7F; //bit7(RAPU)=0 enable weak pull-up to porta
WPUA=WPUA|0xff;//PORTA: Weak Pull-up Register bits except bit3
ANSEL=0xF4; //PORTC Tri-State Control bits,set pin as ADC INPUT
//AN4-AN7(RC0-RC3 PIN) ANOLOG INPUT(RC0 IS AD2,RA2 is AD1)
ADCON1=0x00; //x11 = FRC,system internal clock about 500khz
//000 = FRC,system internal clock/2=4MHZ
ADCON0=0x00;
TRISC=0x0F; //PORTC: 0 = Digital Output; 1= anolog I/0 input
//AD
//ini timer1 config
T1CON=0x00;//bit TMR1ON(T1CON^0);start bit
CMCON1=0x00;//not need comparer
GIE=0;PEIE=0;//global int enable;bit 7 and 6 of INTCON
TMR1IE=0;//bit TMR1IE (PIE1^0),overflow int enable
TMR1IF=0;//bit TMR1IF (PIR1^0),overflow flag
//Timer1 config
//WDT config
PSA=0;// Prescale PS For timer0
WDTCON=0x16;//Prescale WDTPS<3:0> for WDT: about 2.114s
//WDT config
for(i=0;i<5;i++)
{
adc[i]=0;
}
}
void delay(unsigned int icount)
{int i=0,j=0;
// for(i=0;i<icount;i++)
for(j=0;j<icount;j++)
;
}
/* service routine for timer1 interrupt */
interrupt void
timer1_isr(void) @ 0x04 //Time10ms
{
GIE=0; //Diable global INT flag
TMR1ON=0; //Diable Timer1
if(TMR1IF) //Overflow availabe
{
TMR1IF=0; //Clear Overflow flag
Time10ms++; //10ms timer
TMR1L=0x00;//low byte; reload counter of timer1
TMR1H=0xAA;//high byte;
}
TMR1ON=1; //Enable Timer1
GIE=1; //enable global INT flag
}//10ms int for timer1
/*
TMR1L=0xef;//low byte
TMR1H=0xd8;//high byte;//clock=10,000,time=4.5ms;
TMR1L=0x00;//low byte
TMR1H=0xAA;//high byte;//clock=22,016,time=10ms;
*/
void Start_Timer1(void)
{
//Timer1 start
TMR1L=0x00;//low byte
TMR1H=0xAA;//high byte;
TMR1ON=1;//bit TMR1ON of T1CON
TMR1IE=1;TMR1IF=0;//bit TMR1IE of PIE1,overflow int enable
GIE=1;PEIE=1;//global int enable;bit 7 of INTCON
Time10ms=0;
}
void Stop_Timer1(void)
{
//Timer1 stop
GIE=0;PEIE=0;
TMR1ON=0;
TMR1IE=0;
TMR1IF=0;
Time10ms=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -