Vous êtes sur la page 1sur 9

lab 2 #include <16F628A.

h> #FUSES NOWDT #FUSES INTRC #FUSES NOPUT #FUSES NOPROTECT #FUSES BROWNOUT #FUSES NOMCLR #FUSES NOCPD #BYTE TRISB=0x86 #BYTE TRISA=0x85 #BYTE PORTB=0x06 #BYTE PORTA=0x05 #use delay(clock=4000000) //No Watch Dog Timer //Internal RC Osc //No Power Up Timer //Code not protected from reading //Reset when brownout detected //Master Clear pin enabled //No EE protection //Directiva que nombra a la direcion del PIC como TRISB //Directiva que nombra a la direcion del PIC como TRISA //Directiva que nombra a la direccion del PIC 06H como PORTB //Directiva que nombra a la direccion del PIC 05H como PORTA //Directiva que define un reloj de oscilador de 4MHz

//int uno; void main(){ TRISA=0xFF; TRISB=0x00; while(1==1){ //Declara portA como salida //Declara portB como entrada // condcion que se cumple sienpre

PORTB=PORTA; } }

LABBB 3333333333333 #include <16F628A.h> #FUSES NOWDT #FUSES INTRC #FUSES NOMCLR #BYTE TMR1H=0X0F #BYTE porta=0x05 #BYTE trisb=0x86 #BYTE portb=0x06 #BYTE T1CON=0X10 #BYTE TMR0=0X01 #BYTE OPTION=0X81 #BYTE PIR1=0X0C #BYTE INTCON=0X0B #BYTE PIE1=0X8C

#BYTE TMR1L=0X0E long counter1=0; int m=0b00000100; int n=0b00000001; long counter0=0; ////////////////////////////////////////////////// #INT_GLOBAL void GLOBAL_isr(void) { if(INTCON^m) //atiende la interrupcion del timer0 { if(counter0==1000){ output_toggle(pin_b0); counter0=0; } else{ counter0++; } bit_clear(INTCON,2); //bajar bandera del timer0 TMR0=0b00001000; //timer0 empieza a contar desde 6+2

if(PIR1^n) //atiende la interrupcion del timer1 { if(counter1==500){ output_toggle(pin_b1); //cambio de bit0

counter1=0;

} else{ counter1++; //se aumenta en 1 el contador } // bit_clear(PIR1,0); //bajar bandera del timer1 TMR1L=0xB2; //timer empieza a contar desde 15536+2 TMR1H=0x3C;

} }

void main(){ trisb=0b00000000; //puerto B como salida TMR0=0b00001000; //timer0 empieza a contar desde 8(6+2) OPTION=0b00000000; //preescales deshabilitado PIE1=0b00000001; // TMR1L=0xB2; //timer empieza a contar desde 15536+2 TMR1H=0x3C; INTCON=0b10100000; //habi PIR1=0X00; T1CON=0b00000001; // preescaler deshabilitado

while(1==1){}

LABBB 4444444 #include <16F628A.h> #FUSES NOWDT #FUSES INTRC #FUSES NOMCLR #use delay(clock=4000000) #BYTE porta=0x05 #BYTE trisa=0x85 #BYTE trisb=0x86 #BYTE portb=0x06 #BYTE TMR0=0X01 #BYTE INTCON=0X0B #BYTE OPTION=0X81 //No Watch Dog Timer //Internal RC Osc //NO Master Clear pin enabled //oscilador interno a 4MHz

int m=0b00000100; int n=0b00000001; int boton=0; int sm1=0; int sm2=0; long tiempo=0; long counter0=0;

#INT_GLOBAL void GLOBAL_isr(void) { if(INTCON^n){ if(bit_test(portb,0)==0){ el boton //le digo al resto del programa que efectivamente se a pulsado

boton=1; // output_toggle(pin_b5); bit_set(portb,0); } bit_clear(INTCON,0); //bajar bandera de la interrupcion por puerto B

} if(INTCON^m) { if(counter0==960){ tiempo++; counter0=0; } else{ counter0++; } bit_clear(INTCON,2); TMR0=0b00001000; switch(tiempo){ //bajar bandera del timer0 //timer0 empieza a contar desde 6+2 //incrementar el contador // output_toggle(pin_b6); //atiende la interrupcion del timer0

//sumar 1 A LA basa de tiempo //se reestablece el contador para alcanzar la base de tiempo

case 70:

//lo que debe ocurrir a los 35seg

portb=0b00001100; //cambio estado del semaforo2 del verde al amarillo break; case 90: //lo que debe ocurrir a los 45seg //redirecionar el programa, en el caso de que se ubiese precionado el

if(boton==1){ boton sm2=1; boton tiempo=200; } else{

//para saber donde estaba mi rutina antes de atender la interrupcion del

porta=0b00000010; //cambio estado del semaforo1 del rojo al verde portb=0b00001001; //cambio estado del semaforo2 del amarillo al rojo } break; case 160: porta=0b00000100; //cambio estado del semaforo1 del verde al amarillo break; case 180: if(boton==1){ sm1=1; tiempo=200; } else{ porta=0b00000001; //cambio estado del semaforo1 del amarillo al rojo portb=0b00001010; //cambio estado del semaforo2 del rojo al verde

tiempo=0; } break; default: if(tiempo>=200){

//reestablece la cuenta del tiempo

//como se debe proceder alguien presiono el boton

porta=0b00000001; //semaforo1 a rojo if(tiempo==200){ portb=0b00010001; //semaforo2 a rojo y peatonal a verde } if(tiempo>=290){ if(counter0==900){ output_toggle(pin_b4); } if(tiempo==320){ if(sm1==1){ tiempo=180; sm1=0; boton=0; }else{ tiempo=90; sm2=0; boton=0; } } } }

break; } } } void main(){ porta=0b00000001; portb=0b10001010; trisb=0b10000000; //puerto B como salida, bit7 como entrada trisa=0b00100000; //puerto A como salida TMR0=0b00001000; //timer0 empieza a contar desde 8(6+2)

OPTION=0b00000000; //preescales deshabilitado INTCON=0b10101000; //habilitadas interrupciones del timer0 y interrupcion del puerto B while(1==1){} }

Vous aimerez peut-être aussi