我把代码贴出来了,麻烦帮我看一下问题出现在哪里?是代码问题还是Keil设置问题? 感谢大神
#include<reg51.h>
#include <stdlib.h>
//--定义全局函数--//
#define arrSize 10
unsigned char ChCode[14] = "Received data:";
unsigned char err[20] = "Error! Out of Bound";
unsigned char End[3] = "End";
unsigned char arr[arrSize];
unsigned char cmd[2];
unsigned char begin标志寄存器=1;
//开始状态
bit beginStat=0;
//结束状态
bit endStat=0;
//红外收发状态
unsigned char irStat;
//数组个数
unsigned char arrCnt=0;
//数组总数
unsigned char arrNum=0;
//--声明全局函数--//
void UsartConfiguration();
void T0Configuration();
void Delay10ms(unsigned int c); //误差 0us
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
//unsigned char j;//,getData;
beginStat=0;
endStat=0;
irStat=0;
arrCnt=0;
arrNum=0;
UsartConfiguration();
while(1)
{
if(endStat)
{
switch(irStat)
{
case 0:break;
case 1:break;
case 2:break;
}
endStat=0;
}
}
}
/*******************************************************************************
* 函 数 名 :UsartConfiguration()
* 函数功能 :设置串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UsartConfiguration()
{
PCON=0X80; //波特率加倍
SCON=0X50; //设置为工作方式1
//SM0=1 REN=1
TMOD=0X20; //设置计数器工作方式2
TH1=0XF3; //计数器初始值设置,注意波特率是4800的 由于波特率加倍所以9600
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*******************************************************************************
* 函 数 名 :T0Configuration()
* 函数功能 :设置T0
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void T0Configuration()
{
TMOD = 0x01; //选择模式2 16位定时 最大计数65535
TH0 = (65535 - 2000)/256;
TL0 = (65535 - 2000)%256;
EA = 1; //全局中断
ET0 = 1; //开启T0定时器
TR0 = 1; //启动T0定时器
}
/*************************************
定时器0的中断号
*************************************/
void T0zd(void) interrupt 1
{
endStat=1;
ET0 = 0;
}
/*******************************************************************************
* 函 数 名 :Delay(unsigned int i)
* 函数功能 : 延时函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Usart() interrupt 4
{
RI = 0; //清除接收中断标志位
ES=0;
if(!beginStat)
{
beginStat=1;
arrCnt=0;
if(SBUF==0x01) //发射红外
{
irStat=1;
//arr[arrCnt++]=SBUF;
}
else if(SBUF==0x10) //录制红外
{
irStat=2;
}
else
{
irStat=0;
endStat=1;
}
T0Configuration();
}
else
{
if(arrCnt==0)
{
arrNum=SBUF;
}
else if(arrNum==arrCnt)
{
endStat=1;
}
arr[arrCnt++]=SBUF; //出去接收到的数据
}
ES=1;=0; //清除发送完成标志位
}
|