|
#include
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#define Fosc 24000000 //24.0MHZ
#define Tc 1 //ms
#define CTC0_RELOAD_H 0xb1 //Tc/12/Fosc/100;(12T)
#define CTC0_RELOAD_L 0xe0 //Tc/1/Fosc/100;(1T)
#define TIME_OVER 6000 //时间片 1s=1000
#define CLEAR_S2TI 0xFD //1111 1101
#define CLEAR_S2RI 0xFE //1111 1110
struct ICXX_Message
{
......
};
struct ICJC_Message
{
.......
};
sbit MCU_Debug_Led=P1^4;
struct ICXX_Message icxxdata;
struct ICJC_Message icjcdata;
unsigned char Current_Address[4];
xdata unsigned char One_Rec_Buffer[30]; //串口接收缓存
xdata unsigned char Two_Rec_Buffer[256];
xdata unsigned int counst1; //串口计数器
xdata unsigned int counst2;
unsigned int time_slice=1; //时间计数器 CTC0中断一次加1
unsigned char flag_time;
unsigned char flag_rec;
unsigned char flag_send;
unsigned char One_Send_Ok; //串口1接收结束
unsigned int One_end_flag ; //串口1接收到结束符标志
unsigned char Two_Send_Ok; //串口2接收结束
void Wink_Led(unsigned int time);
void Serial_One_Initial(unsigned int band1);
void Serial_One_Send_Byte(char c1);
void Serial_One_Interrupt_Receive();
void Serial_Two_Initial(unsigned int band2);
void Serial_Two_Send_Byte(char c2);
void Serial_Two_Interrupt_Receive();
void Delay(int time);
void main()
{
flag_time=0;
One_Send_Ok=0; //信号量初始化
Two_Send_Ok=0;
One_end_flag=0;
flag_time=0;
flag_rec=0;
flag_send=0;
counst1=0;
counst2=0;
memset(One_Rec_Buffer,0,30);
memset(Two_Rec_Buffer,0,256);
Serial_One_Initial(9600); //串口初始化
Serial_Two_Initial(9600);
Serial_One_Send_Byte('A');
while (counst1<30)
{
Serial_One_Send_Byte(One_Rec_Buffer[counst1++]);
Delay(10);
Serial_One_Send_Byte('B');
Delay(10);
}
}
void Serial_One_Initial(unsigned int band1)
{
unsigned int RELOAD;
// RELOAD=256-int(Fosc/band/32+0.5); //1T
RELOAD=256-(int)(Fosc/band1/32/12+0.5);//12T
SCON=0x50; //串口1 8位可变波特率无校验
/* 定时器1作为波特率发生器
TMOD=0x20; //使用定时器1作为波特率发生器
TH1=RELOAD;
TL1=RELOAD;
TR1=1; //启动定时器1
*/
BRT=RELOAD; //使用独立波特率发生器
AUXR=0x11; //BRTR=1 启动独立波特率发生器
//S1BRS=1 串口1使用独立拨特率发生器
ES=1; //开串口1中断
EA=1; //开中断
}
void Serial_One_Send_Byte(char c1)
{
ES=0;
TI=0;
SBUF=c1;
while(TI==0);
TI=0;
ES=1;
}
void Serial_One_Interrupt_Receive() interrupt 4
{
unsigned char k;
if(RI==1)
{
RI=0;
k=SBUF;
if(k==0x01)
{
One_Rec_Buffer[counst1++]=k;
Serial_One_Send_Byte(k);
Serial_One_Send_Byte(One_Rec_Buffer[counst1-1]);
}
else
{
。。。。。。。。。。。
}
}
else
TI=0;
}
void Wink_Led(unsigned int time)
{
unsigned int count;
unsigned char i=3;
while(i>0)
{
i--;
MCU_Debug_Led=0;
for(count=0;count
{
_nop_();
_nop_();
_nop_();
}
MCU_Debug_Led=1;
for(count=0;count
{
_nop_();
_nop_();
_nop_();
}
}
}
。。。。。。
代码贴出来了大家帮我看看哈 问题出在全局变量One_Rec_Buffer和counst1上 对他们的写完全无效包括用memset来清One_Rec_Buffer,串口输出都是0xFF,局部变量的读写有效
赋给全局的没有了
大家帮我看看哈 还有关于设置 我都用的large代码数据都是不然编译都不通过
编译器LX51和BX51都用过了没用
我想应该要一个类似与startup之类的内存初始化文件但是我都试了哈都不管用只是不晓得自己做的对不,在keil提供的
startup文件上把 xdatalen改成了3ffH.
大哥门帮我看哈啊 |
|