救命啊,我的PIC UART通信总是错误

2020-02-08 12:27发布

我的PIC16F877A本来是和触摸屏通信的,可总不成功
接到PC的串口调试发现,他接收的数据是错的,发送就更不像话,只要程序里有发送,哪怕就运行一次,他就发个没完的00(我检查了程序,确定发送一次)

而且每次上电,pc的串口都会收到一次00(16进制),以下是我的初始化代码段

#define BAUD 9600                         //波特率
#define FOSC 12000000L                 //系统时钟12M/4
#define NINE 0                                 //1为9bit通讯,0为8bit通讯
#define SPBRG_V  ((int)(FOSC/(BAUD*16UL)-1)) //设定一个值到SPBRG,以异步高速方式
                                //在异步高速模式下,Baud Rate=Fosc/(16*(X+1)),X即为SPBRG_V

void init_uart(void)//初始化通讯串口,异步8位高速,使能发送/接收,响应接收中断
{
        SPBRG=SPBRG_V;
        TXSTA=0x26; //异步高速8位
        RCSTA=0x90;
        TX_PIN=0;
        RX_PIN=1;
        //TXIE=1; //无论TXIE是否置位,TXIF都会在TXREG空的时候置位,在TXREG装入时清0,
                  //TXIE只是设置是否让cpu响应这个TXIF中断
        //RCIF是一个只读位,当用户程序把RCREG寄存器中的数取走后,或者RCREG寄存器为空时,RCIF位被软件自动清0
        RCIE=1;
        CS_485;
        IN_485;
        //初始化tmr2
        //预分频:输入信号只有达到256个电平后,计数器的值才会加1/减1。
        //后分频:只有中断发生256次后,才会置中断标志位。
        T2CON=0x7e; //16预分频,16后分频,开tmr2
        TMR2=197; //16*16*(256-197)*(1/(12M/4)) 定时约5ms
        TMR2IF=0;
        TMR2IE=1;
        restart=0;
        rxbc=0;
        p_uart=0;
        delay5ms=0;
        isadd=0;
}

void uart_putbyte(unsigned char byte)
{
        TXREG=byte;
        while(!TRMT);
}

上面的485是打算在程序里支持485的,电路上也加了485,但库了调232,我把485的线路断了,程序里暂没去掉,应该不影响吧

现在这个uart的问题搞了几天了一点进展都没有,搞得触摸屏的事又没做,真是烦
大侠们都我支个招啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
wangrwnyan123
1楼-- · 2020-02-08 13:40
关注,最近我也要用PIC877A做一个485通信的产品.
MZ_Guo
2楼-- · 2020-02-08 18:34
 精彩回答 2  元偷偷看……
piccode
3楼-- · 2020-02-08 23:17
太复杂了,用CCSC吧  

------------------------

#include <16f690.h>
#fuses INTRC,noWDT,MCLR,noPROTECT//,MCLR//,IOSC4  //ok,内部RESET  NOWDT
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_A5, rcv=PIN_A4)
#define  led    PIN_C3


char buf;

//////////////////////////////////////////////////////////////////////////////////
void main(){
char a;
  


   printf(" Waiting for  device ... ");//送到PC口显示
   a=getc();        //从PC接收数据
  
while(1) {

   }
;

}
chenhuwyl
4楼-- · 2020-02-09 02:13
MARK

一周热门 更多>