我花了很多时间试图找出我的错误在哪里我闪烁PIC16F688。 Pic已使用PicKit2成功闪存。我使用Pic将模拟压力传感器转换为数字输出并通过蓝牙发送数据,但蓝牙没有接收稳定数量的数据。数据由4个字符的十进制数组成,介于0和1023之间。 问题是蓝牙无法等待特定数字并继续读取,而是随机读取4位数字。
我认为我的错误在于内部振荡器的配置。 我附加了我的代码,编写代码来配置灵活的传感器电路,输出高达5v的模拟电压,然后pic占空比将其转换为数字,如上所述。
可能是我的接线不正确,请如果您可以帮忙解决这个问题 什么配置"在编辑项目"我需要选择Mikro PRO软件吗? 我使用"蓝牙终端"应用程序,以从蓝牙异步查看我的数据。 谢谢。
char *temp = "0000";
unsigned int adc_value;
char uart_rd; int i;
void main()
{
OSCCON = 0x77;
ANSEL = 0b00000100;
CMCON0 = 0X07;
TRISA = 0b00001100;
UART1_Init(9600);
Delay_ms(100);
while (1)
{
adc_value = ADC_Read(2);
temp[0] = adc_value/1000+48;
temp[1] = (adc_value/100)%10+48;
temp[2] = (adc_value/10)%10+48;
temp[3] = adc_value%10+48;
for (i=0;i<4; i++)
UART1_Write(temp[i]);
UART1_Write(13);
Delay_ms(1000);
}
}
答案 0 :(得分:0)
您可以使用itoa
函数将ADC整数值转换为通过UART
发送的字符。如果计算中出现错误,那么您将无法获得适当的值。以下代码段供您参考:
while (1)
{
adc_value = ADC_Read(2);
itoa(adc_value, temp, 10);
for (i=0;i<4; i++)
UART1_Write(temp[i]);
UART1_Write(13);
Delay_ms(1000);
}
请检查两端配置的波特率是否相同。如果波特率不匹配,那么您将在蓝牙终端处获得随机值,您正在读取值。
答案 1 :(得分:0)
如果你有逻辑分析仪,我会建议你把它连接起来。如果您没有使用数据表重新计算振荡器速度。可能只是内部振荡器不够准确。什么也有效,就是在程序集中编写一个等待已知时间的函数(通过复制粘贴很多NOP
并使用它来闪烁一个led。然后启动一个秒表并计算,例如,100次闪烁。这是我在使用逻辑分析仪之前所做的事情。(它们在ebay上非常糟糕)。