|
下面的程序用STC89C52單片機(jī)可以實(shí)現(xiàn):?jiǎn)纹瑱C(jī)先發(fā)送a,而后可以接到a機(jī)發(fā)送過來的字符數(shù)組,而后將其再轉(zhuǎn)發(fā)出去;之后單片機(jī)再發(fā)送b,而后可以接到a機(jī)發(fā)送過來的字符數(shù)組,而后將其再轉(zhuǎn)發(fā)出去。我想把下列程序燒到STC12C5A60S2中,但是無法完整接收和發(fā)送字符數(shù)組,大佬們誰知道怎么解決呢?- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar flag,i,s[6]="",j=0;
- void DelayMS(uint xms) //延時(shí)大約1ms
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
- }
- void uartinit()//串口初始化函數(shù)
- {
- SCON=0x50;//串口工作方式為模式1
- TMOD=0x20;//定時(shí)器T1工作方式2
- PCON=0x00;//SMOD=0
- TH1=0xfd;//波特率為9600
- TL1=0xfd;
- EA=1;
- ES=1;
- TR1=1;//啟動(dòng)定時(shí)器
- }
- void init() //初始化函數(shù)
- {
- 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.循環(huán)賦值為'\0'(字符串結(jié)尾標(biāo)志符),j=0,為了第二次傳遞字符串是又是從頭輸出
- { //2.flag為0和j不為0時(shí),保證是第二次及以后,傳輸字符串(控制輸出格式)
- for(j=0;j<6;j++)
- s[j]='\0';
- j=0;
- }
- s[j]=SBUF;
- flag=1;
- j++;
- }
- if(TI) //發(fā)送數(shù)據(jù)
- {
- }
- }
復(fù)制代碼
|
|