📄 inter.c
字号:
#include <pic18.h>
#include "isr.h"
void init(void);
void update_priorities_enables(void);
volatile unsigned char HIGH_INT_REG;
volatile unsigned char LOW_INT_REG;
void main(void)
{
static bit flash_leds;
init();
TMR1ON=1;
while(1)
{
update_priorities_enables();
if(TMR1IF)
{
TMR1IF=0;
flash_leds=(!flash_leds); /* LEDs will toggle updates */
if(flash_leds)
{
PORTD=HIGH_INT_REG; /* write interrupt indicators to LEDs */
PORTE=LOW_INT_REG;
HIGH_INT_REG=0; /* clear interrupt indicators */
LOW_INT_REG=0;
}
else
{
PORTD=0; /* clear LED displays */
PORTE=0;
}
TXREG2=0x01;
}
}
}
void init(void)
{
ADCON1=0x0F;
/* Initiialse all peripherals */
TRISA=0x03; /* Enable switches need input mode */
TRISB=0xFF; /* BLUE DIP switch input */
TRISC=0xFF; /* RED DIP switch input */
TRISD=0x00; /* BLUE LED output */
TRISE=0x00; /* RED LED output */
TRISG=0x00; /* TX pin needs to be set to output */
GIEH=OFF;
GIEL=OFF;
T1CON=0x01; /* timer 1 used for LED updates */
TMR2ON=1;
TMR4ON=1;
CCP2CON=0x0A; /* set up all CCP modules to interrupt on Capture */
CCP3CON=0x0A;
CCP4CON=0x0A;
CCP5CON=0x0A;
TXEN2=1; /* enable serial port 2 for transmission */
SPEN2=1;
T3CON=0x01;
TMR3H=0x80;
IPEN=1; /* interrupt priorities are used */
}
void update_priorities_enables(void)
{
if(RC0)TX2IP=1;
else TX2IP=0;
if(RC1)TMR2IP=1;
else TMR2IP=0;
if(RC2)TMR3IP=1;
else TMR3IP=0;
if(RC3)TMR4IP=1;
else TMR4IP=0;
if(RC4)CCP2IP=1;
else CCP2IP=0;
if(RC5)CCP3IP=1;
else CCP3IP=0;
if(RC6)CCP4IP=1;
else CCP4IP=0;
if(RC7)CCP5IP=1;
else CCP5IP=0;
TX2IE=RB0;
TMR2IE=RB1;
TMR3IE=RB2;
TMR4IE=RB3;
CCP2IE=RB4;
CCP3IE=RB5;
CCP4IE=RB6;
CCP5IE=RB7;
GIEH=RA0;
GIEL=RA1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -