pic串口重复发送问题
#include<pic.h>
#include<pic16f1829.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31);
void init();
uint flag=1;
void main()
{
init();
if(flag)
{
TXREG=0xff;
while(!TRMT);
flag=0;
}
TXEN=0;
while(1);
}
void init()
{
TRISC=0;
SPBRG=12; //波特率9600
BAUDCON=0x08;
TXSTA=0x24; //使能串口发送
RCSTA=0x80;
TXEN=1;
SPEN=1;
RCIF=1;
//TXIE=0;
CREN=0;
GIE = 1;
}
__CONFIG(0x3B31);内容是什么,看门狗有没有关闭?
我现在改了下__CONFIG(WRT_OFF&PLLEN_OFF&STVREN_ON&LVP_ON); 自己配置
while(1)
{
asm("clrwdt");
} 看门狗在发好数据之后关闭了
数据确实不会一直发送了,但还是会出现2,3次复位现象
就比如我要发一长串数据,它会先把数据前面几个重复发几次 然后再发完整的数据
这是我完整程序 我感觉看门狗中间是不是又进行复位了 但是我尝试了 多加几次关闭看门狗 但是没用
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
//__CONFIG(FOSC_INTOSC&WDTE_ON&PWRTE_OFF&MCLRE_OFF&CP_ON&BOREN_ON&CLKOUTEN_OFF&IESO_OFF&FCMEN_OFF);
__CONFIG(WRT_OFF&PLLEN_OFF&STVREN_ON&LVP_ON);
void init();
void main()
{
init();
TXREG=0xfe;
TXREG=0x5c;
while(!TRMT);
TXREG=0x02;
TXREG=0x1c;
while(!TRMT);
TXREG=0x01;
TXREG=0x03;
while(!TRMT);
TXREG=0x0a;
TXREG=0x01;
while(!TRMT);
TXREG=0x52;
TXREG=0x38;
while(!TRMT);
TXREG=0x37;
TXREG=0x30;
while(!TRMT);
TXREG=0x30;
TXREG=0x00;
while(!TRMT);
TXREG=0x00;
TXREG=0x00;
while(!TRMT);
TXREG=0x00;
TXREG=0x0c;
while(!TRMT);
TXREG=0x32;
TXREG=0x30;
while(!TRMT);
TXREG=0x31;
TXREG=0x35;
while(!TRMT);
TXREG=0x30;
TXREG=0x38;
while(!TRMT);
TXREG=0x30;
TXREG=0x34;
while(!TRMT);
TXREG=0x30;
TXREG=0x30;
while(!TRMT);
TXREG=0x30;
TXREG=0x30;
while(!TRMT);
TXREG=0x74;
TXREG=0x85;
while(!TRMT);
while(1)
{
asm("clrwdt");
}
}
void init()
{
TRISC=0x80;
SPBRG=12; //波特率9600
BAUDCON=0x08;
TXSTA=0x24; //使能串口发送
RCSTA=0x90;
TXEN=1;
SPEN=1;
//TXIE=0;
CREN=0;
RCIF = 1;
GIE = 1;
}
我用的PIC16F877A,配置字是__CONFIG(WDTDIS & BORDIS & LVPDIS); 基本就是这种格式,WDTEN是打开看门狗功能,WDTDIS是关闭,关闭了开门狗功能后,就不需要CLRWDT();清除看门狗了,所以while(1)里面的asm("clrwdt");不用写;而且串口一次发送一个字节,你上面都是每两个字节加一句while(!TRMT); 应该是一个TXREG=?后面就有一句while(!TRMT); 你这个单片机我没用过,不过应该差不多
我在发送数据之前加了个延迟 已经解决了 谢谢