我一直致力于一个需要与我的笔记本电脑和微芯片Pic 16f877a进行通信并且通信无法正常工作的项目,但是当我把这个例子放在Proteus 8上时工作正常。
我的笔记本电脑上没有RS232(串口),但是我买了TTL模块。我在电路板上使用外部振荡器8MHz,波特率为9600 bps。
当我连接我的笔记本电脑并发送到TTL模块时,A符号没有任何问题,当我发送几次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';
}
}
有人能帮助我吗?有什么问题?
答案 0 :(得分:0)
据我所知,有两种可能性(假设UART1_Init(9600);是正确的库函数):
您没有将Rx引脚设置为输入;将TRIS寄存器设置为0会使该端口上的所有引脚都输出。
您使用的是不正确的奇偶校验。
您是否在行
处设置了断点x = UART1_Read();
要查看从终端程序发送时实际进入的内容?
你有没有看过你的范围,看看Rx引脚到底发生了什么?
delay_ms(10);完全没必要。
答案 1 :(得分:0)
@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终端时,我得到:0xAF 0xAF 0xEB 0xFB 0xFB
PS:在Proteus上,这个例子也很好用:\
答案 2 :(得分:0)