Sie sind auf Seite 1von 3

C:\Users\Luisfelipetc98\Downloads\Desktop\Disparo SCR\Disparo de SCR.

c
1: /////////////////////////////////////////////////////////////////////////////////////////////
2: #include <16F877A.h> //librería del uC PIC16F877A.
3: #Fuses HS,NOWDT, NOLVP, NOBROWNOUT //Protecciones para el uC.
4: #device ADC=10 //Resolución de bits para el conversor A/D
5: #use delay (clock=20M) //Velocidad del oscilador de cristal para el uC.
6: int subida, bajada, t, t2, A=0, A2=0, A3=0, A4=0, A5=1;
7: long Analogico, Cuentas; //Variables para el conversor A/D
8: #INT_EXT //Librería para la interrupción externa
9: /////////////////////////////////////////////////////////////////////////////////////////////
10: void EXT_isr(void){ //Inicio de la interrupción
11: if(Cuentas>1 && Cuentas<25){ //Intervalo para la selección de 50Hz
12: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
13: output_low(pin_c0); //Seteo del pin C0 a nivel bajo
14: for (t=0 ; t<bajada; t ++ ){ //Conteo para la activación del flanco de bajada
15: delay_us(100);} //Retardo equivalente a 1 unidad del tiempo total(10ms)
16: output_high(pin_c6); //Seteo del pin C6 a nivel alto
17: delay_us(200); //Retardo de 200us
18: output_low(pin_c6); //Seteo del pin C6 a nivel bajo
19: }
20: if(Cuentas>25 && Cuentas<50){ //Intervalo para la selección de 25Hz
21: if (input_state(pin_b0)){ // deteccion del cambio de estado del pin RB0
22: A=A+1; //Aumenta en 1 unidad la variable A
23: A5=A5+1;} //Aumenta en 1 unidad la variable A5
24: if(A==2){ //Condición de disparo T1 y T2 ; T3 y T4
25: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
26: delay_us(100);} //Retardo equivalente a 1 unidad del tiempo total(10ms)
27: output_high(pin_c0); //Seteo del pin C0 a nivel alto
28: delay_us(10); //Retardo de 10us
29: output_low(pin_c0); //Seteo del pin C0 a nivel bajo
30: t=0; //Reset de la variable t(subida)
31: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
32: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
33: }
34: output_high(pin_c2); //Seteo del pin C2 a nivel alto
35: delay_us(10); //Retardo de 10us
36: output_low(pin_c2); //Seteo del pin C2 a nivel bajo
37: t2=0; //Reset de la variable t2(bajada)
38: A=0; //Reset de la variable A
39: }
40: if(A5==2){ //Condición de disparo T1' y T2' ; T3' y T4'
41: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
42: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
43: }
44: output_high(pin_c4); //Seteo del pin C4 a nivel alto
45: delay_us(10); //Retardo de 10us
46: output_low(pin_c4); //Seteo del pin C4 a nivel bajo
47: t=0; //Reset de la variable t(subida)
48: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
49: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
50: }
51: output_high(pin_c6); //Seteo del pin C6 a nivel alto
52: delay_us(10); //Retardo de 10us
53: output_low(pin_c6); //Seteo del pin C6 a nivel alto
54: t2=0; //Reset de la variable t2(bajada)
55: A5=0; //Reset de la variable A5
56: }}}
57: if(Cuentas>50 && Cuentas<75){ //Intervalo para la selección de 16.6Hz
58: if(input_state(pin_b0)){ // deteccion del cambio de estado del pin RB0
59: A=A+1; //Aumenta en 1 unidad la variable A
60: A2=A+1; //Aumenta en 1 unidad la variable A2 + el contenido de A
61: A3=A+2; //Aumenta en 2 unidades la variable A2 + el contenido de A
62: }
63: if (A==3){ //Condición de disparo T1 y T2 ; T3 y T4
64: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
65: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
66: }
67: output_high(pin_c0); //Seteo del pin C0 a nivel alto
68: delay_us(10); //Retardo de 10us

1
C:\Users\Luisfelipetc98\Downloads\Desktop\Disparo SCR\Disparo de SCR.c
69: output_low(pin_c0); //Seteo del pin C0 a nivel bajo
70: t=0; //Reset de la variable t(subida)
71: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
72: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
73: }
74: output_high(pin_c2); //Seteo del pin C2 a nivel alto
75: delay_us(10); //Retardo de 10us
76: output_low(pin_c2); //Seteo del pin C2 a nivel bajo
77: t2=0; //Reset de la variable t2(bajada)
78: A=0; //Reset de la variable A
79: }
80: if (A2==2){ //Condición de disparo T1 y T2 ; T3' y T4'
81: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
82: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
83: }
84: output_high(pin_c1); //Seteo del pin C1 a nivel alto
85: delay_us(10); //Retardo de 10us
86: output_low(pin_c1); //Seteo del pin C1 a nivel bajo
87: t=0; //Reset de la variable t(subida)
88: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
89: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
90: }
91: output_high(pin_c6); //Seteo del pin C6 a nivel alto
92: delay_us(10); //Retardo de 10us
93: output_low(pin_c6); //Seteo del pin C6 a nivel bajo
94: t2=0; //Reset de la variable t2(bajada)
95: A2=0; //Reset de la variable A2
96: }
97: if (A3==4){ //Condición de disparo T1' y T2' ; T3' y T4'
98: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
99: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
100: }
101: output_high(pin_c4); //Seteo del pin C4 a nivel alto
102: delay_us(10); //Retardo de 10us
103: output_low(pin_c4); //Seteo del pin C4 a nivel bajo
104: t=0; //Reset de la variable t(subida)
105: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de subida
106: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
107: }
108: output_high(pin_c7); //Seteo del pin C7 a nivel alto
109: delay_us(10); //Retardo de 10us
110: output_low(pin_c7); //Seteo del pin C7 a nivel bajo
111: t2=0; //Reset de la variable t2(bajada)
112: A3=0; //Reset de la variable A3
113: }}
114:
115: if(Cuentas>75 && Cuentas<100){ //Intervalo para la selección de 12.5Hz
116: if (input_state(pin_b0)){ // deteccion del cambio de estado del pin RB0
117: A=A+1; //Aumenta en 1 unidad la variable A1
118: A2=A+1; //Aumenta en 1 unidad la variable A2 + el contenido de A
119: A3=A+2; //Aumenta en 2 unidades la variable A3 + el contenido de A
120: A4=A+3; //Aumenta en 3 unidades la variable A4 + el contenido de A
121: }
122: if (A==4){ //Condición de disparo T1 y T2 ; T3 y T4
123: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
124: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
125: }
126: output_high(pin_c0); //Seteo del pin C0 a nivel alto
127: delay_us(10); //Retardo de 10us
128: output_low(pin_c0); //Seteo del pin C0 a nivel bajo
129: t=0; //Reset de la variable t(subida)
130: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
131: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
132: }
133: output_high(pin_c2); //Seteo del pin C2 a nivel alto
134: delay_us(10); //Retardo de 10us
135: output_low(pin_c2); //Seteo del pin C2 a nivel bajo
136: t2=0; //Reset de la variable t2(bajada)

2
C:\Users\Luisfelipetc98\Downloads\Desktop\Disparo SCR\Disparo de SCR.c
137: A=0;} //Reset de la variable A
138: if (A2==2){ //Condición de disparo T1 y T2 ; T3 y T4
139: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
140: delay_us(100);} //Retardo equivalente a 1 unidad del tiempo total(10ms)
141: output_high(pin_c1); //Seteo del pin C1 a nivel alto
142: delay_us(10); //Reset de la variable t(subida)
143: output_low(pin_c1); //Seteo del pin C1 a nivel bajo
144: t=0; //Reset de la variable t(subida)
145: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
146: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
147: }
148: output_high(pin_c3); //Seteo del pin C3 a nivel alto
149: delay_us(10); //Retardo de 10us
150: output_low(pin_c3); //Seteo del pin C3 a nivel bajo
151: t2=0; //Reset de la variable t2(bajada)
152: A2=0;} //Reset de la variable A2
153: if (A3==4){ //Condición de disparo T1' y T2' ; T3' y T4'
154: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
155: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
156: }
157: output_high(pin_c4); //Seteo del pin C4 a nivel alto
158: delay_us(10); //Retardo de 10us
159: output_low(pin_c4); //Seteo del pin C4 a nivel bajo
160: t=0; //Reset de la variable t(subida)
161: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
162: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
163: }
164: output_high(pin_c6); //Seteo del pin C6 a nivel alto
165: delay_us(10); //Retardo de 10us
166: output_low(pin_c6); //Seteo del pin C6 a nivel bajo
167: t2=0; //Reset de la variable t2(bajada)
168: A3=0; //Reset de la variable A3
169: }
170: if (A4==6){ //Condición de disparo T1' y T2' ; T3' y T4'
171: for (t=0 ; t<subida; t ++ ){ //Conteo para la activación del flanco de subida
172: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
173: }
174: output_high(pin_c5); //Seteo del pin C5 a nivel alto
175: delay_us(10); //Retardo de 10us
176: output_low(pin_c5); //Seteo del pin C5 a nivel bajo
177: t=0; //Reset de la variable t(subida)
178: for (t2=0 ; t2<bajada; t2 ++ ){//Conteo para la activación del flanco de bajada
179: delay_us(100); //Retardo equivalente a 1 unidad del tiempo total(10ms)
180: }
181: output_high(pin_c7); //Seteo del pin C7 a nivel alto
182: delay_us(10); //Retardo de 10us
183: output_low(pin_c7); //Seteo del pin C7 a nivel bajo
184: t2=0; //Reset de la variable t2(bajada)
185: A4=0; //Reset de la variable A4
186: }}}
187:
188: void main (){ //Inicio del programa principal.
189: set_tris_b(0xFF); //Seteo del puerto B como entrada.
190: set_tris_c(0x00); //Seteo del puerto C como salida.
191: output_c(0x00); //Habilitación del puerto C en estado logico bajo.
192: setup_adc(ADC_CLOCK_INTERNAL); //Seteo del puerto A/D con reloj interno.
193: setup_adc_ports(AN0); //Habilitación de pin RA0 como entrada A/D.
194: set_adc_channel(0); //Selección del canal 0 como lectura.
195: enable_interrupts(INT_EXT); //Activación de las interrupciones externas.
196: enable_interrupts(GLOBAL); //Activación de las interrupciones externas en escala global.
197: EXT_INT_EDGE(L_TO_H); //Detección del cambio de estado(Flanco de bajada a subida).
198: subida=0; //Variable para la activación del flanco de subida.
199: bajada=100; //Variable para la activación del flanco de bajada.
200:
201: while (TRUE){ //Inicio de la sentencia While o bucle infinito.
202: Analogico=read_adc(); //Lectura y almacenamiento del puerto A/D en una variable.
203: Cuentas=Analogico*(100.0/1024.0);//Escalamiento para el conversor A/D.
204: }} //Fin del programa.

Das könnte Ihnen auch gefallen