📄 epwmdemo.c
字号:
#include <pic18.h>#include <stdio.h>void interrupt ISR(void);void init(void);void set_new_mode(void);extern void update_pwm(void);unsigned char ACTIVE_PINS_MODE;unsigned char BRIDGE_MODE;void main(void){ unsigned char oldmode; unsigned char oldoutput; init(); while(1) { ACTIVE_PINS_MODE=((PORTC&0x0C)>>2); //read the DIP switches to get modes BRIDGE_MODE=(PORTC&0x03); update_pwm(); if((ACTIVE_PINS_MODE!=oldmode)||(BRIDGE_MODE!=oldoutput)) // if either has changed... set_new_mode(); // ...update these changes oldmode=ACTIVE_PINS_MODE; oldoutput=BRIDGE_MODE; }}void init(void){ GIE=1; // interrupts enabled IPEN=0; TXEN=1; /* enable serial port transmissions */ SPEN=1; TXIE=0; /* not interrupt driven */ TRISC=0xBF; TRISD=0x0F; TRISA=0xFF; RBIE=1; ECCPAS=0b00000000; // autoshutdown event select T1CON=0b10000101; T3CON=0b10111101; T2CON=0x05; // TMR2 drives PWM ECCP1IE=1; ECCP1IF=0; ECCPR1=0x01000; ECCP1CON=0x0C;}void interrupt ISR(void){}void putch(unsigned char c){ TXREG=c; /* transmit a character to Serial IO */ while(!TXIF)continue; TXIF=0;}void set_new_mode(void){ // print what new mode has been selected printf("\rPWM: "); switch(BRIDGE_MODE) { case 1: printf("Full-Bridge FWD |"); break; case 2: printf("Half-Bridge |"); break; case 3: printf("Full-Bridge REV |"); break; default: printf("Single Output |"); break; } switch(ACTIVE_PINS_MODE) { case 1: printf(" A&C[HI] B&D[LO] |"); break; case 2: printf(" A&C[LO] B&D[HI] |"); break; case 3: printf(" A&C[LO] B&D[LO] |"); break; default: printf(" A&C[HI] B&D[HI] |"); break; } /* update mode */ ECCP1CON=((ECCP1CON&0xFC)+ACTIVE_PINS_MODE); /* update output mode */ ECCP1CON=((ECCP1CON&0x3F)+(BRIDGE_MODE<<6));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -