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

📄 eccpdemo.c

📁 Hitech microchip PIC C18 Compiler
💻 C
字号:
#include <pic18.h>#include "eccpdemo.h"#include <stdio.h>void interrupt ISR(void);void init(void);void set_new_mode(void);unsigned char MODE=0;unsigned char OLD_MODE=1;	 /* to force an update immediately */static volatile bit CAPTURE;void main(void){	init();		while(1)	{		MODE=PORTC&0x0F;	// read the DIP switch		if(MODE!=OLD_MODE)	// if something has changed...			{				set_new_mode();	// ...update the SFRs			}		OLD_MODE=MODE;				{		}				if(CAPTURE)	// if a capture event has happened...		{			CAPTURE=0;	// ...display details			printf("\nCAPTURED at %X\r",TMR3);		}				if(PWM_MODE)			update_pwm();	}}void init(void){	GIE=1;	// interrupts are enabled	PEIE=1;	// peripheral interrupts are enabled	IPEN=0;		TXEN=1;	/* enable serial port transmissions */	SPEN=1;		TXIE=0;	/* not interrupt driven */				TRISC=0xBF;	TRISD=0xFF;	TRISA=0xFF;	RBIE=1;		// pushbutton can trigger PORTB interrupt	ECCPAS=0b00000000;	// no autoshutdown events	T3CON=0b10001101;	//TMR3 used for CCP module	T2CON=0x04;	// TMR2 used for PWM	ECCP1IE=1;	// ECCP mode is interrupt enabled	ECCP1IF=0;	ECCPR1=0x0F000;	// Compare events on TMR3 = 0xF000		CAPTURE=0;}void interrupt ISR(void){	if((RBIE)&&(RBIF))		// if pushbutton pressed...	{		switch(MODE&0x0F)			{			case 0b1000:	// if LED set on compare, pushbutton clears LED	 				LED=OFF;				break;			case 0b1001:	// if LED clear in compare, pushbuton sets LED				LED=ON;				break;			default:				break;		}	RBIF=0;		}		if (ECCP_INTERRUPT)	{		if(CAPTURE_MODE)		{			CAPTURE=1;	// set this flag if a capture event has been detected		}		ECCP1IF=0;	}}void putch(unsigned char c){	TXREG=c;	/* transmit a character to Serial IO */	while(!TXIF)continue;	TXIF=0;}void set_new_mode(void){	printf("\r");	/* output current mode selected, and set PORTD to        input (pushbutton) or output (LED/analyser) as the	mode requires */	switch(MODE)	{		case 2:			printf("function:COMPARE, TOGGLE ON MATCH    \r");			TRISD4=0;			break;		case 4:			printf("function:CAPTURE, ON FALLING EDGE    \r");			TRISD4=1;			break;		case 5:			printf("function:CAPTURE, ON RISING EDGE     \r");			TRISD4=1;			break;		case 6:			printf("function:CAPTURE, ON 4th RISE        \r");			TRISD4=1;			break;		case 7:			printf("function:CAPTURE, ON 16th RISE       \r");			TRISD4=1;			break;		case 8:			printf("function:COMPARE, GO HIGH ON MATCH   \r");			TRISD4=0;			break;		case 9:			printf("function:COMPARE, GO LOW ON MATCH    \r");			TRISD4=0;			break;		case 0xA:			printf("function:COMPARE, NO OUTPUT ON MATCH \r");			TRISD4=0;			break;		case 0xB:			printf("function:COMPARE, DO SPECIAL ON MATCH \r");			TRISD4=0;			break;		case 0xC:			printf("PWM mode: A&C=Active hi,B&D=Active hi\r");			TRISD4=0;			break;		case 0xD:			printf("PWM mode: A&C=Active hi,B&D=Active lo\r");			TRISD4=0;			break;		case 0xE:			printf("PWM mode: A&C=Active lo,B&D=Active hi\r");			TRISD4=0;			break;		case 0xF:			printf("PWM mode: A&C=Active lo,B&D=Active lo\r");			TRISD4=0;			break;		default:			printf("function:OFF                         \r");			TRISD4=0;			break;	}	ECCP1CON=((ECCP1CON&0xF0)+MODE);	// update mode on SFR}

⌨️ 快捷键说明

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