下面的程序用STC89C52单片机可以实现:单片机先发送a,而后可以接到a机发送过来的字符数组,而后将其再转发出去;之后单片机再发送b,而后可以接到a机发送过来的字符数组,而后将其再转发出去。我想把下列程序烧到STC12C5A60S2中,但是无法完整接收和发送字符数组,大佬们谁知道怎么解决呢?- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar flag,i,s[6]="",j=0;
- void DelayMS(uint xms) //延时大约1ms
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
- }
- void uartinit()//串口初始化函数
- {
- SCON=0x50;//串口工作方式为模式1
- TMOD=0x20;//定时器T1工作方式2
- PCON=0x00;//SMOD=0
- TH1=0xfd;//波特率为9600
- TL1=0xfd;
- EA=1;
- ES=1;
- TR1=1;//启动定时器
- }
- void init() //初始化函数
- {
- uartinit();
- }
- void main()
- {
- init();
- while(1)
- {
- SBUF='a';
- while(!TI);
- TI=0;
- while(1)
- {
- if(flag==1)
- {
- for(i=0;i<6;i++)
- {
- SBUF=s[i];
- while(!TI);
- TI=0;
- }
- flag=0;
- }
- if(s[5]=='D')
- break;
- }
- DelayMS(500);
- SBUF='b';
- while(!TI);
- TI=0;
- while(1)
- {
- if(flag==1)
- {
- for(i=0;i<6;i++)
- {
- SBUF=s[i];
- while(!TI);
- TI=0;
- }
- flag=0;
- }
- if(s[5]=='A')
- break;
- }
- DelayMS(500);
- }
- }
- void ser() interrupt 4
- {
- if(RI==1)
- {
- RI=0;
- if(flag==0&&j!=0)//1.循环赋值为'\0'(字符串结尾标志符),j=0,为了第二次传递字符串是又是从头输出
- { //2.flag为0和j不为0时,保证是第二次及以后,传输字符串(控制输出格式)
- for(j=0;j<6;j++)
- s[j]='\0';
- j=0;
- }
- s[j]=SBUF;
- flag=1;
- j++;
- }
- if(TI) //发送数据
- {
- }
- }
复制代码
|