Sei sulla pagina 1di 2

#Include <18F4550.

h> era de los

// Usamos el PIC 18F4550, puedes declarar cualqui // 18Fxx5x.

#Fuses XT, NOWDT, NOPROTECT, NOLVP, BROWNOUT #use Delay( Clock = 4000000 ) #Byte PortA #Byte PortB #Byte PortC #Byte PortD Slo 40/44 = = = = 0xF80 0xF81 0xF82 0xF83 // // // // Direccin Direccin Direccin Direccin del del del del puerto puerto puerto puerto A B C D para para para para la la la la familia familia familia familia 18Fxx5x. 18Fxx5x. 18Fxx5x. 18Fxx5x (

#Byte PortE = 0xF84

// pines). // Direccin del puerto E para la familia 18Fxx5x. Declaramos el valor de X como Byte, es decir, Esta variable ha de ser global porque su valo usaremos en la interrupcin y en el programa pr Por tanto declaramos esta variable antes la i y de "void main".

// ------ Variable Global -----Int8 x = 0; // 8 bits. // r lo // incipal. // nterrupcin //

// --------- Interrupcin --------#INT_EXT // Interrupcin Externa por RB0: Decodificacin de E ncoder. Void IntRB0() { // CCS se encarga de desactiva automticamente cualquier interrupcin. // No hace falta guardar contextos de registros. If (Bit_Test(PortB, 0)) { Ext_Int_Edge(H_TO_L); flanco de // Si RB0 se ha puesto a 1 (flanco de subida), // entonces activar la siguiente interrupcin por

// bajada. If (Bit_Test(PortB, 1)) // Si RB1 est a 1, { x++; // entonces incrementar una unidad el valor de X . } } Else { Ext_Int_Edge(L_TO_H); flanco de // Si RB0 se ha puesto a 0 (flanco de bajada), // entonces activar la siguiente interrupcin por

// subida. If (Bit_Test(PortB, 1)) // Si RB1 est 1, { x--; // entonces decrementar una unidad el valor de X . } } // Al finalizar la interrupcin CCS se encarga de volver a poner automticamente // la badera INTF = 0 ---> borra la interrupcin para poder permitir la siguien te;

// no hemos de hacer nada por nuestra parte. } Void Main() // Inicio y configuracin. { Port_B_Pullups(FALSE); // Configuracin para el PIC 18F4550. Setup_ADC_Ports(NO_ANALOGS); // Sin comparadores ni ADCs, todo digital, etc.. . Setup_adc(ADC_CLOCK_DIV_2); Setup_spi(SPI_SS_DISABLED); Setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); Setup_timer_1(T1_DISABLED); Setup_timer_2(T2_DISABLED,0,1); Setup_comparator(NC_NC_NC_NC); Setup_vref(FALSE); Enable_Interrupts(Int_Ext); // Activar Interrupcin Externa a travs de RB0. Ext_Int_Edge(L_TO_H); // Inicialmente detectar interrupcin por flanco d e subida. Enable_Interrupts(GLOBAL); // Interrupciones Generales Activadas. Set_Tris_A(0b11111111); s el Puerto A. Set_Tris_B(0b11111111); s RB0 y RB1. Set_Tris_C(0b11111111); s el Puerto C. Set_Tris_D(0b00000000); EDs). Set_Tris_E(0b11111111); s el Puerto E. // Puerto A todo entradas, en este caso no usamo // Puerto B todo entradas, slo usamos las entrada // Puerto C todo entradas, en este caso no usamo // Puerto D todo salidas (8 bits que irn a los L // Puerto E todo entradas, en este caso no usamo

// ---------- Programa Principial ---------While (True) { PortD = x; D. } }

// El valor de X sale por el Puerto D a los 8 LE

Potrebbero piacerti anche