📄 main.c
字号:
#include<PIC18.h>
#include "def.h"
#include"lib.h"
#define uint unsigned int
#define uchar unsigned char
/**********************************/
/*函数定义*/
/**********************************/
void device_init(void);
void port_init(void);
bit ledflag;
void interrupt highints(void)
{
uchar c;
high_int=1;
if(RCIF)
{
c=RCREG;//由于接收是双缓冲结构,所以读的时候读两次,第二次才是需要的值
if(c=='0')
ledflag=0;
else
ledflag=1;
RCIF=0;
}
}
void interrupt low_priority lowints(void)
{
if(TMR3IF)//是T3溢出中断
{
TMR3ON=0;//暂停T3
TMR3H=0x00;
TMR3L=0x00;//重载T3数值
TMR3IF=0;//清T3中断标志
channel_int_num=channel_error|=1<<now_channel;//置通道错误标志,且认为该通道已经完成检测
channel_period[now_channel][2]|=0x01;
TMR3ON=1;//启动T3
ccp_over=1;
}
else //是捕获中断
{
CCP1IE=0;
CCP1IF=0;//清零CCP1中断标志
if(channel_int_num&(1<<now_channel))//(1)//是第一次捕获中断
{
channel_period[now_channel][0]=CCPR1L;//记录首次中断数值(2)
channel_period[now_channel][0]+=(uint)(CCPR1H)<<8;
channel_int_num&=~(1<<now_channel);//将通道中断次数置0(3)
}
else //是第二次捕获中断
{
TMR3ON=0;//暂停T3
TMR3H=0X00;
TMR3L=0X00;//重载T3数值
channel_period[now_channel][1]=CCPR1L;//记录第二次中断数值(2)
channel_period[now_channel][1]+=(uint)(CCPR1H)<<8;
channel_int_num|=(1<<now_channel);//将通道中断次数置1
channel_error&=~(1<<now_channel);//将通道状态清零,正常
ccp_over=1;
TMR3ON=1;//启动T3
}
}
CCP1IE=1;//启动CCP1中断
}
void port_init(void)
{
PORTA=0XFF;
TRISA=0Xff;
PORTB=0XFF;
TRISB=0Xff;
PORTC=0XFF;//
TRISC=0X94;//1001 0100
PORTD=0XFF;
TRISD=0x00;//
PORTE=0xff;//PWM选择端口采用PORTE
TRISE&=0xf8;
}
void device_init(void)
{
port_init();
uart_init(FOSC,BUAD);
ccp1_init();
lcd_init();
WDTCON=0x00;//禁止看门狗
}
void main(void)
{
delay(1000);//启动延时
device_init();
GIE=1;
while(1)
{
ccp();
frequency_caculate();
CLRWDT();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -