下面的程序用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) //發送數據
- {
- }
- }
復制代碼
|