问题描述
我想在捕获模式下使用 pic 18f4550 测量一个脉冲,这个脉冲是由 pic 微控制器本身产生的,为此我使用一个函数来扮演 XOR 逻辑门的角色(你找到我已经在下面使用过)。 RC0 和 RC2 为输入,RC6 为信号输出。离开RC6的脉冲进入ccp2进行测量。
我发现的问题是ccp2无法检测到微控制器产生的脉冲。不知道有没有什么条件可以接微控制器的引脚什么的。 如果有人有答案或提示来解决这个问题,我将不胜感激! 如果您有任何问题,请随时提出。谢谢!!
更新:我更改了代码中的一些指令,现在 RC6 输出提供了一个信号。但我的液晶显示器不显示任何内容。 RC6 输出在下方。
更新 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 (将#修改为@)