实在检查不出来到底是哪里错误了,天天被老师训哦,望哪位大侠帮我看看,不胜感激哦!
程序使用pic16f877:#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
volatile int RecieveBuffer[7];//用来存放数据
volatile int Rxi=0;//用于接收计数
volatile int b=0;//用于累加和校验
volatile int verrify=0;//保存校验结果
volatile int c;
//__PROG_CONFIG(0X3F71);//bit13-12程序保护位-11无保护,bit11在线调试使能1使能,bit10保留位-系统自动置1,
//bit9flash程序存储器写使能-1可以通过EECON写入程序,bit8数据代码保护1不保护,bit7低电压在线编程0禁止,
//bit6掉电复位0禁止??,bit5-4与12-13相同为11,bit3上电定时器使能1禁止,bit2看门狗0禁止,
//bit1-0晶振选择01XT标准震荡;最终配置子0x0011 1111 0011 1001;即0x3F39
void init();
void interrupt com();
int addnumber();
void Send();
void finish();
void main()
{ int c=0;
init();
while(1)
{c++;
if(Rxi==7)
{ RCIE=0;
addnumber();
Send();
finish();
}
}
}
void init()//初始化
{
TRISC=0x80;//portc 1000 0000;7输入pin26,6输出pin25,其余端口置为输出
TXSTA=0x24; //0010 0100发送寄存器初始化
RCSTA=0x90;//1001 0000接受寄存器初始化
SPBRG=25;//设定9600baud
GIE=1;//开总中断
PEIE=1;//开外设中断
RCIE=1;//开接收终端
TXIE=1;//开发送中断
}
void interrupt com()//中断接收;数据累加校验;校验结果数据输出
{
if(RCIE&&RCIF)
{ RecieveBuffer[Rxi]=RCREG;
Rxi++;//接收后自增
RCIF=0;//清0中断标志位
/* if(Rxi==7)
{ RCIE=0;//禁止接收,可能关掉中断
}*/
}
}
int addnumber()
{
int i=0;
for(i=0;i<=5;i++)
{
b+=RecieveBuffer[i];
}
i=0;
verrify=b;
return verrify;
}
void Send()
{ if(verrify==RecieveBuffer[6])
{ TXREG=1;
}
else
{ TXREG=4;
}
while(!TRMT);//保证发送完毕
}
void finish()
{ Rxi=0; //重新计数
RCIE=1;//重新开启接收中断
}
想要完成的功能是从上位机接收7个数据,并校验,如果正确给上位机发1,否则发4!自己检查发现程序根本不在我主程序的while(1)循环体内循环,单步运行后,pc跑飞。。。实在是无奈了哦! |