TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: tone04 en 28 de Febrero de 2013, 20:16:22
-
#include <16f84.h>
#use delay (clock=4000000)
#byte portb=0x06
#byte trisb=0x86
#byte trisa=0x85
#byte porta=0x05
#int_ext
void prueba (void)
{
porta = 0b0000;
portb = 0b00000010;
delay_ms (500);
}
void main ()
{
unsigned char i;
trisa = 0b0000;
trisb =0b00000001;
portb=0;
enable_interrupts (int_ext);
ext_int_edge (h_to_l); // se puede cambiar al reves si se quiere de bajo a alto : ext_int_edge (l_to_h);
enable_interrupts (global);
while (1)
{
for(i=0;i<=255; i++)
(
porta=i
);
portb=0;
}
}
No se si alguien sepa como se pueda compilar en el compilador paso a paso lo que hace el codigo y como se pueda modificar el contador para cuando hace el pulso realice el conteo si pueden auxiliarme saludos
-
Hola tone04.
Pues tu quieres hacer un contador utilizando la interrupción externa del PIC, (según el código que has puesto)
Por aca te dejo el codigo que hace lo que necesitas
#include <16f84a.h> //pic a utilizar
#Fuses XT ,NOWDT
#use delay (clock=4000000) //Fosc=4Mhz*/
#define LCD_ENABLE_PIN PIN_A2
#define LCD_RS_PIN PIN_A0
#define LCD_RW_PIN PIN_A1
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#include <lcd.c>
int x;
#int_EXT
void EXT_isr(void)
{
x++;
}
void main() {
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
lcd_init();
while(1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"X=%u",x);
}
}
Y si necesitas verlo paso a paso el codigo pues puedes utilizar el proteus el archivo 16F84A.cof
Saludos.
-
#include <16f873a.h>
#device adc=10
#fuses NOWDT,BROWNOUT,XT,NOLVP,noPUT
#use delay (clock=4m)
#define use_portb_lcd true
#include <lcd420.c>
float valor,volt,valor2,amper;
int32 tiempo=0;//Tiempo
int32 tiempoS;// conteo de segundos
int32 tiempoH;// conteo de minutos
int32 tiempoM;// conteo de horas
#int_ext
void interupcion_externa (void)
{
if(input(PIN_A1)==true)
tiempo++;
if(input(PIN_A1)==false)
tiempo
=0;
}
#INT_TIMER2
void timer2_isr(void)
{
set_timer2(25536);
if (tiempo < 17999999)tiempo ++; else tiempo=0;
}
void main(){
setup_adc_ports(an0_an1_an3);
setup_adc(adc_clock_div_32 );
lcd_init();
lcd_gotoxy(1,3);
lcd_putc("secion");
lcd_gotoxy(2,1);
lcd_putc("Volt Amper");
while (true){
setup_timer_2(t2_div_by_4,124,1);
enable_interrupts(int_timer2);
enable_interrupts(INT_EXT);
ext_int_edge(L_TO_H);
enable_interrupts(global);
set_adc_channel(0);
delay_us(20);
volt = read_adc();
delay_us(500);
valor=volt*50/1023;
lcd_gotoxy(2,2);
printf(lcd_putc,"%04.2f",valor );
delay_ms(500);
set_adc_channel(3);
delay_us(20);
amper = read_adc();
delay_us(500);
valor2=amper*18/1023;
lcd_gotoxy(11,2);
printf(lcd_putc,"%04.3f",valor2);
delay_ms(200);
bucle:
lcd_gotoxy(1,4);
tiempoS=((tiempo*20)/1000);//pasar de numero de instrucciones a segundos
tiempoH=tiempoS /3600;//saco horas
tiempoS=tiempoS-(tiempoH*3600);//resto horas de los segundos
tiempoM=tiempoS/60;//saco minutos
tiempoS=tiempoS - (tiempoM*60);//resto minutos de los segundos
printf(lcd_putc,"%02lu:%02lu:%02lu",tiempoH,tiempoM,tiempoS);
goto bucle;
}
}
como puedo hacer para que el contador pare arranca apenas enciendo el pic necesito que encienda con un botón y pare con el mismo y para poner en cero tener apretado el mismo un tiempo, gracias por leer el cogigo
-
-
quiero usar el código que estoy armando con lcd