我在做51單片機串口的時候上位機以16進制發送01,單片機里面用case判斷收到的為0x01就發送一個值,這樣是可以收到的,但是我在單片機里面用case判斷收到的為0x10就發送一個值,這樣卻不會返回數據,這是什么原因呢?代碼如下,求解答
- #include <reg52.h> //包含單片機寄存器的頭文件
- #define port P0
- sbit lsa=P2^2;
- sbit lsb=P2^3;
- sbit lsc=P2^4;
- #define uchar unsigned char
- #define uint unsigned int
- #define N 2
- uchar temp,j,flag,begin;
- uchar dat[N];
- unsigned char code table[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
- void Delay(int c);
- void SendByte(unsigned char d)
- {
- SBUF = d/10;
- while(!TI);
- TI = 0;
- }
- void UARTInit(void)
- {
- TMOD=0x20; //用定時器設置串口波特率
- TH1=0xfd; //配置波特率為9600
- TL1=0xfd;
- TR1=1;
- REN=1; //串口初始化
- SM0=0;
- SM1=1;
- EA=1; //開啟總中斷
- ES=1; //開啟串口中斷
- }
- void reset(void)
- {
- ES=1;
- j=0;
- flag=0;
- }
- void display(){
- int i=0;//計數器
- lsa=0;
- lsb=0;
- lsc=0;
- lsa=1;
- lsb=0;
- lsc=0;
- if (dat[0]<0||dat[0]>9) {reset();port=table[0];}
- else port=table[dat[0]];
- Delay(10);
- lsa=0;
- lsb=0;
- lsc=0;
- port=table[dat[1]];
- //port=0x06;
- Delay(10);
- //i++;
- //if(i==10) i=0;
- }
- void main()
- {
- uint i;
- for(i=0;i<4;i++) dat[i]=0;
- reset();
- UARTInit();
- while(1)
- {
- if (flag==1)
- reset();
- display();
- }
- }
- void Delay(int c){
- unsigned a,b;
- for(;c>0;c--)
- for(b=38;b>0;b--);
- //for(a=130;a>0;a--);
- }
- void ser() interrupt 4
- {
- RI=0;
-
- dat[j]=SBUF;
- temp=dat[j];
- switch(temp)
- {
- case 0x01: SendByte(1); break;
- default:break;
- }
- j++;
- if (j==N)
- {
- ES=0; //關閉串口中斷
- flag=1;
- }
- }
復制代碼
|