|
30黑幣
哪位大哥幫忙看看這個,實在不知道問題出在哪?(可能串口程序存在問題)
本程序完成的內(nèi)容為,數(shù)據(jù)經(jīng)AD采樣后再P1端口顯示,同時向虛擬串口發(fā)送數(shù)據(jù)。遇到問題:P1端口顯示轉(zhuǎn)換數(shù)據(jù)正常,但用串口助手看收到的數(shù)不對。例如P1端口顯示80;串口調(diào)試助手就顯示20;- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //AD管腳定義
- sbit CLK=P2^0;
- sbit DI=P2^2;
- sbit DO=P2^3;
- //譯碼器管腳定義
- sbit a=P2^4;
- sbit b=P2^5;
- sbit c=P2^6;
- sbit e=P2^7;
- void delay(uint z); //函數(shù)聲明
- void init()
- {
- //串口輸chu
- SCON=0X40;
- ES=1;//允許串口中斷
- //定時器設(shè)置
- TMOD=0X20;//定時器工作模式選擇方式2 自動裝填
- TH1=0XF3; //TH1與TL1為定時器中T1寄存器的高8低8位;設(shè)置波特率用
- TL1=0XF3;
- PCON=0X80;
- EA=1;//允許總中斷
- TR1=1;//開啟T1定時器
- }
- void delay(uint z)
- {
- uint i = 0;
- uint j = 0;
- for(i=0;i<z;i++)
- for(j=0;j<114;j++);
- }
- uchar read_AD(uint n)
- { int num[4][4]={
- {1,1,0,0} ,//CH0
- {1,1,1,0} ,//CH1
- {1,1,0,1} ,//CH2
- {1,1,1,1} ,//CH3
- } ;
- uchar i,out1;
- out1=0;
- //加入譯碼器后CS由譯碼器控制 CS=0;
- _nop_();
- CLK=0;
- // DO=0;
- DI=num[n][0];_nop_(); CLK=1;_nop_(); CLK=0;
- DI=num[n][1];_nop_(); CLK=1;_nop_(); CLK=0;
- DI=num[n][2];_nop_(); CLK=1;_nop_(); CLK=0;
- DI=num[n][3];_nop_(); CLK=1;_nop_(); CLK=0;
- _nop_();_nop_();_nop_();
- for(i=0;i<8;i++)//轉(zhuǎn)換8位二進(jìn)制數(shù)
- {
- CLK=1;_nop_();
- CLK=0;_nop_();//下降沿開始數(shù)據(jù)轉(zhuǎn)
- if(DO)
- out1=out1<<1|DO;
- else
- out1=out1<<1;
- }
- //加入譯碼器后CS由譯碼器控制 CS=1;
- return out1;
- }
- void main()
- {
- uint i,j;
- uchar s;
- uint m[8][3]={
- {0,0,0},//YO
- {0,0,1},//Y1
- {0,1,0},//Y2
- {0,1,1},//Y3
- {1,0,0},//Y4
- {1,0,1},//Y5
- {1,1,0},//Y6
- {1,1,1} //Y7
- }; //譯碼器控制
- init(); //串口初始化
-
- while(1)
- {
- e=0;//譯碼器U1工作
- for(j=0;j<1;j++) //循環(huán)使各個AD工作
- {
- a=m[j][2];
- b=m[j][1];
- c=m[j][0];
- for(i=0;i<1;i++)//AD通道片選讀取
- {
- ES=0;
- P1=read_AD(i);
- s=read_AD(i);
- SBUF=s;
- while(!TI);
- TI=0;
- ES=1;
- }
- }
- e=1;//譯碼器U1工作
- }
- }
復(fù)制代碼
|
-
-
|