這是關(guān)于串口通信的一個演示程序,功能是通過計算機發(fā)送數(shù)到單片機以數(shù)碼管范圍是(0-65535)的形式顯示,在演示過程中發(fā)現(xiàn)一到
32767也就是發(fā)送7fff之后的數(shù)據(jù)時數(shù)碼管亂碼
這是7fff數(shù)據(jù)的調(diào)試變量表
1.png (41.57 KB, 下載次數(shù): 27)
下載附件
2021-4-18 22:07 上傳
這是0x8000的
2.png (41.75 KB, 下載次數(shù): 33)
下載附件
2021-4-18 22:12 上傳
單片機源程序如下:
- #include <reg52.h>
- #define uchar unsigned char;
- #define uint unsigned int ;
- uint sw,w,q,bai,shi,ge,num1,num2,aa,num;
- //定義數(shù)組存儲數(shù)碼管碼值
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f};
- uint arr[]={0,0,0};
- //配置管腳
- sbit dul=P2^6;
- sbit wel=P2^7;
- void UART_Init();
- void display();
-
- //定義延時函數(shù)
- void delay(unsigned int x)
- {
- unsigned int a;
- unsigned int b;
- for(a=0;a<x;a++)
- {
- for(b=0;b<110;b++)
- {
- }
- }
- }
-
- void main()
- {
- UART_Init();
- while(1)
- {
- display();
- }
- }
- void UART_Init()
- {
- TMOD=0x20; //定時器1設(shè)置位 8位自動重載計數(shù)器
- TH1 =0xfd; //設(shè)置波特率為9600
- TL1 =0xfd;
- SM0 = 0;
- SM1 = 1; //串口工作方式1,為10位數(shù)據(jù)異步收發(fā)器
- REN = 1;//允許接收
- EA = 1;
- ES = 1; //把串口中斷打開
- TR1= 1;
- aa=0;
- }
- void UART() interrupt 4
- {
- aa++;
- arr[aa]=SBUF;
- RI=0;
- if(aa==2)
- {
- num=arr[1]*256+arr[2];
- sw=num/100000;
- w=num/10000%10;
- q=num/1000%10;
- bai=num/100%10;
- shi=num/10%10;
- ge =num%10;
- aa=0;
- }
- }
- void display()
- {
- wel=1;
- P0=0xfe;
- wel=0;
-
- dul=1;
- P0=table[sw];
- dul=0;
- delay(1);
- P0=0xff;
-
- wel=1;
- P0=0xfd;
- wel=0;
-
- dul=1;
- P0=table[w];
- dul=0;
- delay(1);
- P0=0xff;
-
- wel=1;
- P0=0xfb;
- wel=0;
-
- dul=1;
- P0=table[q];
- dul=0;
- delay(1);
- P0=0xff;
-
- wel=1;
- P0=0xf7;
- wel=0;
-
- dul=1;
- P0=table[bai];
- dul=0;
- delay(5);
- P0=0xff;
-
- wel=1;
- P0=0xef;
- wel=0;
-
- dul=1;
- P0=table[shi];
- dul=0;
- delay(1);
- P0=0xff;
-
- wel=1;
- P0=0xDf;
- wel=0;
-
- dul=1;
- P0=table[ge];
- dul=0;
- delay(1);
- P0=0xff;
- }
復(fù)制代碼
我num數(shù)據(jù)類型定義位unsigned int型應(yīng)該沒有溢出啊我實在搞不懂所以請教一下各位哥到底哪出問題了
|