[英]UART communication PIC16f877A
我一直在进行一个需要与我的笔记本电脑和微芯片Pic 16f877a进行通信且通信无法正常工作的项目,但是当我将此示例放在Proteus 8上时,效果很好。
我的笔记本电脑上没有RS232(串行端口),但是我已经购买了TTL模块。 我在板上使用8MHz的外部振荡器,波特率为9600 bps。
当我连接笔记本电脑并发送到TTL模块时,A符号无所nothing形;当我多次发送A时,我会收到像'?'之类的奇怪符号。 或'#'返回。
这是Pic的代码:
char x;
void main(){
TRISB = 0x00;
PORTB = 0x00;
UART1_Init(9600);
delay_ms(10);
while(1){
if(UART1_Data_Ready())
{
x = UART1_Read();
if(x == 'A')
{
PORTB = 0xFF;
UART1_Write(13);
UART1_Write_Text("A");
UART1_Write(13);
}
else
{
PORTB = 0x00;
}
}
x= '\0';
}
}
有人能帮我吗 ? 有什么问题 ?
据我所知,有两种可能性(假设UART1_Init(9600);是正确的库函数):
您没有将Rx引脚设置为输入。 将TRIS寄存器设置为0将使该端口的所有引脚输出。
您使用不正确的奇偶校验。
你在行上设置断点了吗
x = UART1_Read();
要查看从终端程序发送时实际得到了什么?
您是否查看过示波器以了解Rx引脚上实际输入的内容?
delay_ms(10); 完全没有必要。
@DiBosco,我尝试与注册表一起使用并使用以下代码:
void main() {
char st[] = "PROBA";
int i;
TRISC = 0x00;
TXSTA = 0x24;
RCSTA = 0x80;
SPBRG = 51;
delay_ms(10);
while(1)
{
for(i=0;st[i]!='\0';i++)
{
TXREG = st[i];
while(!(TXSTA&0x02));
}
delay_ms(1000);
}
}
我在程序中得到的是:?????
但是当我在mikroC上使用USART Terminal时,我得到:0xAF 0xAF 0xEB 0xFB 0xFB
PS:在Proteus上,此示例也可以正常工作 :\\
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.