|
- #include <reg52.h>
- //#include <stdio.h>
- sbit Mr0 = P1^0;
- sbit Ml0 = P1^1;
- sbit Mr1 = P1^2;
- sbit Ml1 = P1^3;
- #define uint unsigned int
- #define uchar unsigned char
- #define card_go {Mr0=0,Ml0=1,Mr1=0,Ml1=1;}//前進(jìn)
- #define card_back {Mr0=1,Ml0=0,Mr1=1,Ml1=0;}//后退
- #define Left_card_go {Mr0=0,Ml0=1,Mr1=1,Ml1=0;}//左轉(zhuǎn)圈
- #define Right_card_go { Mr0=1,Ml0=0,Mr1=0,Ml1=1;}//右轉(zhuǎn)圈
- #define stop_card { Mr0=0,Ml0=0,Mr1=0,Ml1=0;}//stop
- #define up 'A'
- #define down 'B'
- #define left 'C'
- #define right 'D'
- #define stop 'F'
- //#define guohua_left 'C'
- //#define guohua_right 'D'
- //#define wang_left '1'
- //#define wang_right '3'
- //#define guo_left '9'
- //#define guo_right '7'
- char code str[] = "收到指令,向前!\n";
- char code str1[] = "收到指令,向后!\n";
- char code str2[] = "收到指令,向左!\n";
- char code str3[] = "收到指令,向右!\n";
- char code str4[] = "收到指令,停止!\n";
- uchar i=0;
- uchar dat=0;
- uchar buff[3]=0; //緩沖字節(jié)
- bit flag_REC=0;
- bit flag =0;
- ////毫秒級延時(shí)函數(shù)定義
- ////void delay(uint z)
- ////{
- //// uint x,y;
- //// for(x = z; x > 0; x--)
- //// for(y = 114; y > 0 ; y--);
- ////}
- //
- ////字符串發(fā)送
- //// void send_str( )
- ////{
- //// unsigned char i = 0;
- //// while(str[i] != '\0')
- //// {
- //// SBUF = str[i];
- //// while(!TI);
- //// TI = 0;
- //// i++;
- //// }
- ////}
- //
- //// void send_str1( )
- ////{
- //// unsigned char i = 0;
- //// while(str1[i] != '\0')
- //// {
- //// SBUF = str[i];
- //// while(!TI);
- //// TI = 0;
- //// i++;
- //// }
- ////}
- ////
- //// void send_str2( )
- ////{
- //// unsigned char i = 0;
- //// while(str2[i] != '\0')
- //// {
- //// SBUF = str[i];
- //// while(!TI);
- //// TI = 0;
- //// i++;
- //// }
- ////}
- ////
- //// void send_str3( )
- ////{
- //// unsigned char i = 0;
- //// while(str3[i] != '\0')
- //// {
- //// SBUF = str[i];
- //// while(!TI);
- //// TI = 0;
- //// i++;
- //// }
- ////}
- ////
- //// void send_str4( )
- ////{
- //// unsigned char i = 0;
- //// while(str4[i] != '\0')
- //// {
- //// SBUF = str[i];
- //// while(!TI);
- //// TI = 0;
- //// i++;
- //// }
- ////}
- void sint() interrupt 4 //中斷接收3字節(jié)
- {
- if(RI)
- {
- RI=0;
- P1 = 0;
- dat=SBUF;
- if(dat=='O'&&(i==0)) //數(shù)據(jù)第一幀
- {
- buff[i]=dat;
- flag=1;
- }
- else
- if(flag==1)
- {
- i++;
- buff[i]=dat;
- if(i>=2)
- {i=0;flag=0;flag_REC=1 ;}
- }
- }
- }
- //串口初始化
- void UART_INIT()
- {
- SM0 = 0; SM1 = 1;//串口工作方式1
- REN = 1;//允許串口接收
- EA = 1;//開總中斷
- ES = 1;//開串口中斷
- TMOD = 0x20;//8位自動(dòng)重裝模式
- TH1 = 0xfd;
- TL1 = 0xfd;//9600波特率
- TR1 = 1;//啟動(dòng)定時(shí)器1
- }
- void main()
- {
- UART_INIT(); //串口初始化
- while(1)
- {
- if(flag_REC==1) //中斷接收完成
- {
- flag_REC=0;
- if(buff[0]=='O'&&buff[1]=='N') //第一個(gè)字節(jié)0,第二個(gè)N,第三個(gè)控制碼
- switch(buff[2])
- {
- case up : card_go; break;
- case down : card_back; break;
- case left : Left_card_go; break;
- case right : Right_card_go; break;
- case stop : stop_card; break;
-
-
- }
- }
- }
- }
- /*************************************
- 備注:
- 使用printf()puts()前都應(yīng)軟件置位TI = 1;
- printf()puts() 使用putchar函數(shù)發(fā)送字節(jié)
- void putchar(uchar sbyte )
- {
- while(!TI); //等待發(fā)送完
- SBUF=sbyte;
- }
- 所以第一次調(diào)用putchar前沒TI=1 永遠(yuǎn)等待
- *************************************/
復(fù)制代碼
|
|