📄 intserv.lst
字号:
1:
2: /*
3: The file is used to interrup service for uC pic16f688
4: There are two functions:
5: void ini_chip(void) :Initialize all variables and used registers for uc pic16f688
6: interrupt void timer1_isr(void) @ 0x04 :Timer1 int service subroutine
7: */
8: #include <htc.h>
9: #include <pic16f688.h>
10: #include "IntServ.h"
11: #include "Type.h"
12:
13: //extern ADCs adc[5];
14:
15: extern unsigned int Time10ms;//10ms counter
16: extern int adc[5];
17:
18: void ini_chip(void)
19: {char i=0;
20: //config osc
21: OSCTUNE=0x0F; //select internal clock MAX : 0b0000,1111
22: OSCCON=0x70; //switch to system clock 8MHz
23:
24:
25: //config porta and portc
26: TRISA=0xCF; //PORTA: HIGH: set triple input, LOW: SET OUTPUT;RA4&RA5 is set I/O PIN
27: RA5=1; //Close Voltage output:Chip SP2525A
28: OPTION=OPTION&0x7F; //bit7(RAPU)=0 enable weak pull-up to porta
29: WPUA=WPUA|0xff;//PORTA: Weak Pull-up Register bits except bit3
30:
31: ANSEL=0xF4; //PORTC Tri-State Control bits,set pin as ADC INPUT
32: //AN4-AN7(RC0-RC3 PIN) ANOLOG INPUT(RC0 IS AD2,RA2 is AD1)
33: ADCON1=0x00; //x11 = FRC,system internal clock about 500khz
34: //000 = FRC,system internal clock/2=4MHZ
35: ADCON0=0x00;
36: TRISC=0x0F; //PORTC: 0 = Digital Output; 1= anolog I/0 input
37: //AD
38:
39:
40: //ini timer1 config
41: T1CON=0x00;//bit TMR1ON(T1CON^0);start bit
42: CMCON1=0x00;//not need comparer
43: GIE=0;PEIE=0;//global int enable;bit 7 and 6 of INTCON
44: TMR1IE=0;//bit TMR1IE (PIE1^0),overflow int enable
45: TMR1IF=0;//bit TMR1IF (PIR1^0),overflow flag
46: //Timer1 config
47:
48: //WDT config
49: PSA=0;// Prescale PS For timer0
50: WDTCON=0x16;//Prescale WDTPS<3:0> for WDT: about 2.114s
51: //WDT config
52:
53: for(i=0;i<5;i++)
54: {
55: adc[i]=0;
56: }
57: }
58: void delay(unsigned int icount)
59: {unsigned int j=0;
60:
61: // for(i=0;i<icount;i++)
62: for(j=0;j<icount;j++)
63: ;
64: }
65: /* service routine for timer1 interrupt */
66: void interrupt timer1_isr(void) @ 0x04 //Time10ms
67: {
68: GIE=0; //Diable global INT flag
69: TMR1ON=0; //Diable Timer1
70: if(TMR1IF) //Overflow availabe
71: {
72: TMR1IF=0; //Clear Overflow flag
73: Time10ms++; //10ms timer
74:
75: TMR1L=0x00;//low byte; reload counter of timer1
76: TMR1H=0xAA;//high byte;
77: }
78: TMR1ON=1; //Enable Timer1
79: GIE=1; //enable global INT flag
80:
81:
82: }//10ms int for timer1
83:
84: /*
85: TMR1L=0xef;//low byte
86: TMR1H=0xd8;//high byte;//clock=10,000,time=4.5ms;
87:
88: TMR1L=0x00;//low byte
89: TMR1H=0xAA;//high byte;//clock=22,016,time=10ms;
90:
91: */
92:
93: void Start_Timer1(void)
94: {
95: //Timer1 start
96: TMR1L=0x00;//low byte
97: TMR1H=0xAA;//high byte;
98:
99: TMR1ON=1;//bit TMR1ON of T1CON
100: TMR1IE=1;TMR1IF=0;//bit TMR1IE of PIE1,overflow int enable
101: GIE=1;PEIE=1;//global int enable;bit 7 of INTCON
102: Time10ms=0;
103: }
104:
105: void Stop_Timer1(void)
106: {
107: //Timer1 stop
108: GIE=0;PEIE=0;
109: TMR1ON=0;
110: TMR1IE=0;
111: TMR1IF=0;
112: Time10ms=0;
113: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -