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

📄 main.c

📁 PIC18F4580计算频率的程序
💻 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 + -