⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ejem_26.c

📁 Varios ejemplos para utilizar la PIC 16F876 en assembrer y CCS
💻 C
字号:
//								EJEMPLO 26
//						Autor: Mikel Etxebarria
//			(c) Ingenier韆 de Microsistemas Programados S.L.
//						www.microcontroladores.com
//								Bilbao 2006
//
//El TMR2. Temporizaci髇 simple, segundero
//
//El TMR2 provoca una interrupci髇 cada 10 mS. Transcurridas 100 interrupciones, el tiempo total
//transcurrido es de 1 segundo.
//
//Los leds conectados a la puerta B visualizan, en binario, el segundero


#include <16f876A.h>

//Ajusta los valores de la palabra de configuraci髇 durante el ensamblaje:
//Protecci髇 de c骴igo y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT

#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.

#use fast_io (A)
#use fast_io (B)
#use delay(clock=4000000)

int	delay=100;		//Variable para temporizaci髇

#int_timer2		//Vector de interrupci髇 del timer 2
tratamiento()	//Funci髇 de tratamiento del timer 2
{ 
	if (delay == 0)	//Se han producido 10 interrupciones ??
	 {	output_b (input_b()+1);	//Si, incremetar puerta A 
		delay=100;	//Reponer variable de temporizaci髇
	}
	else 
		-- delay;	//Decrementa variable de temporizaci髇
}
	
main()
{  
	SETUP_ADC_PORTS(NO_ANALOGS);//Puerta A Digital
	output_b(0x00);		//Borra salidas
	set_tris_b(0x00);	//Puerta B salida	
	enable_interrupts(int_timer2); //Activa interrupci髇 del TMR2

//El TMR2 emplea un preescaler y un postcaler de 1:16 (total 1:256). Trabajando a una
//frecuencia de 4MHZ el TMR2 evoluciona cada 16uS (preescaler 1:16). La cuenta avanza hasta
//alcanzar el valor del registro de periodos (39), con lo que el tiempo transcurrido es de
//624 uS. Este lapsus se repite 16 veces (postcaler 1:16) antes de provocar la interrupci髇
//(al de 9984 uS).

	setup_timer_2(t2_div_by_16,39,16);	//TMR2 pre y postcaler 1:16, periodo 39
	set_timer2(0x00);	//Inicia el TMR2
	enable_interrupts(global);	//Habilita interrupciones

	while(1)
	{	
	}
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -