目前需要用到51單片機串口控制單片機,但是我程序接受發送都沒有問題,不知道哪里有問題,希望大佬幫助解決一下非常感謝,下面是程序,
- #include <REGX51.H>
- unsigned char i,j;
- unsigned char temp;
- sbit led1=P2^0;
- sbit led2=P2^1;
- sbit led3=P2^2;
- sbit led4=P2^3;
- void xie(char k);
- void dis();
- void UsartInit()
- {
- SCON=0X50; //設置為工作方式1
- TMOD=0X20; //設置計數器工作方式2
- TH1=0XF9;
- TL1=0XF9;
- PCON=0x80;
- ES=1; //打開接收中斷
- EA=1; //打開總中斷
- TR1=1; //打開計數器
- }
- void main()
- {
- UsartInit();
- xie('a');
- led1=0;
- while(1)
- {
-
- }
- }
- void Usart() interrupt 4
- {
- if(RI)
- {
- RI=0;
- temp=SBUF;
- SBUF=temp;
- P0=temp;
- dis();
- }
- if(TI)
- {
- TI=0;
- }
- }
- void xie(char k)
- {
- SBUF=k;
- while(TI==0);
- TI=0;
- }
- void dis()
- {
- switch(temp)
- {
- case 0x01:led1=~led1;break;
- case 0x02:led2=~led2;break;
- case 0x03:led3=~led3;break;
- case 0x04:led4=~led4;break;
- default:break;
- }
- }
復制代碼
波特率是9600
再一次感謝幫助解答我疑問的各位,本人因為不熟悉51單片機串口,所以在寫串口程序的時候直接將SBUF的數據送給一個變量然后拿這個變量去判斷,最后發現其實單片機是一位一位發送的,最后使用 變量&0x0f 解決問題,感謝大家的幫助
|