图 18f4550 拍摄模式

问题描述

我想在捕获模式下使用 pic 18f4550 测量一个脉冲,这个脉冲是由 pic 微控制器本身产生的,为此我使用一个函数来扮演 XOR 逻辑门的角色(你找到我已经在下面使用过)。 RC0 和 RC2 为输入,RC6 为信号输出。离开RC6的脉冲进入ccp2进行测量。

enter image description here

我发现的问题是ccp2无法检测到微控制器产生的脉冲。不知道有没有什么条件可以接微控制器的引脚什么的。 如果有人有答案或提示解决这个问题,我将不胜感激! 如果您有任何问题,请随时提出。谢谢!!

更新:我更改了代码中的一些指令,现在 RC6 输出提供了一个信号。但我的液晶显示不显示任何内容。 RC6 输出在下方。

enter image description here

更新 2:xor() 函数中的 while(1) 阻塞了我程序的其余部分,因此程序永远不会退出 xor() 并且我的 LCD 不会显示任何内容。当我不在 xor () 中使用 while 循环时,我的 RC6 会产生任何东西,LCD 也是如此。 我不知道问题出在哪里,我尽我所能找到错误。但是系统还是不行!!!

我将保留程序原样,以便新读者能够理解我在说什么。

#include <stdio.h>
#include <stdlib.h>
#include "osc_config.h"
#include "LCD_8bit_file.h"
#include <string.h>

    unsigned long comtage,capt0,x;
    char pulse[20];
    char cosinus[20];
    float period,dephTempo,deph,phi;
    
void init (){
   
   IRCF0         =1;     /* set internal clock to 8MHz */
    IRCF1         =1;
    IRCF2         =1;  
    
    PIE2bits.CCP2IE=1;
    PIR2bits.CCP2IF=0;  
    CCPR2          =0;         /*CCPR1 is capture count Register which is cleared initially*/
     
    T3CONbits.RD16=1;  
    T3CKPS0=0;
    T3CKPS1=0;
    TMR3CS=0;
    
    TMR3IF=0; 
    
    T3CCP2=0; /*Timer3 is the capture clock source for CCP2*/
}

void xor()
{
    while(1)
        {
  if (PORTCbits.RC0==PORTCbits.RC2)
          {
           PORTCbits.RC6=0;
           }
        else if (PORTCbits.RC0!=PORTCbits.RC2)
              {
               PORTCbits.RC6=1;
               }   
  }
}
void main()
{
    
    TRISCbits.TRISC0=1;
    TRISCbits.TRISC2=1;
    TRISCbits.TRISC6=0;
    
    xor();
    LCD_Init();
     
      
    while(1)        
    {
    CCP2CON         = 0b00000101;
    PIR2bits.CCP2IF = 0;
    TMR3ON          = 0; 
    TMR3            = 0;

    while (!PIR2bits.CCP2IF);

    TMR3ON          = 1; 
    CCP2CON         = 0b00000100;
    PIR2bits.CCP2IF = 0;
    
    while (!PIR2bits.CCP2IF); 
    comtage = CCPR2; 
    
    dephTempo = (((float)comtage /30.518)/65536 );
    
    sprintf(pulse,"%.3f  ",dephTempo);
    LCD_String_xy(0,"the pulse width is : ");
    LCD_String_xy(2,9,pulse);
    } 
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)