微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

图 18f4550 拍摄模式

如何解决图 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 举报,一经查实,本站将立刻删除。