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

📄 ejem_31.c

📁 Varios ejemplos para utilizar la PIC 16F876 en assembrer y CCS
💻 C
字号:
//								EJEMPLO 32
//						Autor: Mikel Etxebarria
//			(c) Ingenier韆 de Microsistemas Programados S.L.
//						www.microcontroladores.com
//								Bilbao 2006
//
//Los m骴ulos CCPx. Modo de Comparaci髇. 
//
//El TMR1 cuenta tantos pulsos externos como se indique mediante los interruptores conectados a
//RA5-RA0. Cada vez que se alcanza el valor fijado, la salida RB0
//cambia de estado.
	
#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 fast_io (C)
#use delay(clock=4000000)

#int_ccp1		//Vector de interrupci髇 del CCP1

//Programa de tratamiento de la interrupci髇 que provoca el m骴ulo CCP1 cada vez que el TMR1
//cuenta tantos pulsos externos como los prefijados mediante las entradas RA5-RA0.

tratamiento()	//Funci髇 de tratamiento del CCP1
{ 
	setup_timer_1(T1_DISABLED);	//T1 en OFF
	set_timer1(0);				//Reiniciar el TMR1
	output_b(input_b() ^ 0x01);	//RB0 cambia de estado
	setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);	//TMR1 en ON
}
	
main()
{  
	SETUP_ADC_PORTS(NO_ANALOGS);//Puerta A Digital
	output_b(0x00);				//Borra las salidas
	set_tris_a(0xff);			//Puerta A entrada
	set_tris_b(0x00);			//Puerta B salida
	set_tris_c(0xff);			//Puerta C entrada
	enable_interrupts(int_ccp1); //Activa interrupci髇 del CCP1

//El TMR1 act鷄 en el modo contador de pulsos externos sensible al flanco ascendente y con
//un preescaler de 1:1. Estos pulsos pueden ser suministrador por el generador del laboratorio
//El m骴ulo CCP1 act鷄 en modo de comparaci髇 e interrupci髇 al coincidir

	setup_ccp1(CCP_COMPARE_INT);	//M骴ulo CCP en modo comparaci髇	
	CCP_1=0;					//Puesta a 0 del latch CCP1
	set_timer1(0);				//Reiniciar el TMR1
	setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);	//TMR1 externo y preescaler de 1:1
	enable_interrupts(global);	//Habilita interrupciones

	while(1)
	{
		CCP_1=input_a()&0b00111111;	//Lee puerta A y carga el CCP1	
	}
}	

⌨️ 快捷键说明

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