Download presentation
Presentation is loading. Please wait.
1
微算機(二) -- ADC0804 measurement
班 級: 通訊二甲 學 號: B 學 生: 楊 穎 穆 老 師: 王 志 湖
2
大綱 目的 原理 流程圖 程式 實驗結果
3
目的 Using ADC0804 measure an unknow voltage of power supply.
4
串列原理(中斷致能控制暫存器) => 0x83 IE 1 0 0 0 0 0 1 1 EA:中斷由各中斷位元設定
ET2 ES ET1 EX1 ET0 EX0 EA:中斷由各中斷位元設定 ET0:致能Timer0中斷 EX0:致能外部INTR0中斷
5
ADC0804 CS: CS=0 晶片可工作,CS=1 不工作 RD: RD=0 讀取Data,RD=1 不讀取
WR: WR=0 寫入Data,WR=1 不寫入 INTR: 類比(數位)訊號轉換, INTR=0 告知Cpu已完成轉換 DB(Data Bus): DB1~DB7 資料匯流排 A GND: 類比接地 D GND: 數位接地 Vi(+)(-): 差動輸入
6
電路圖 8051 P1 P2 P0 ● ADC0804
7
流程圖(一)_主程式&中斷副程式 主程式 中斷副程式 計時計數中斷 IE=0x83 開始讀取ADC 轉換完成資料 ADC開始 進行轉換
呼叫修正副程式 呼叫顯示副程式 返回主程式 結束
8
流程圖(二)_ 轉換修正副程式&顯示副程式
P1=0xFF; value=P0 P2=bcd2seg[t[i]]; A=value* P1=~scan; scan=scan<<1; t[0]=A/100 t[2]=(A%100)/10 t[3]=((A%100)%10); i++; No i==4; 返回主程式 Yes i=0;scan=0x01; 返回主程式
9
程式(一) #include"reg51.h" sfr P4 = 0xD8; //判斷是否進入燒錄模式
sbit P4_3 =P4^3; //判斷是否進入燒錄模式 unsigned char code bcd2seg[ ]={0x81,0xCF,0x92,0x86,0xCC,0xA4,0xA0,0x8F,0x80, 0x84,0x7f}; //宣告七段顯示陣列0~9 unsigned char t[4]={0,10,0,0}; //宣告陣列t[4] unsigned char value; //宣告變數value void change(void); //宣告change副程式 void show(void); //宣告show副程式 int scan=0x01,i=0,j; //宣告變數 scan=1,i,j sbit P3_5=P3^5; //宣告P3_5腳位為CS sbit P3_6=P3^6; //宣告P3_6腳位為WR sbit P3_7=P3^7; //宣告P3_7腳位為RD
10
程式(二)_主程式 int main(void){ void (*isp) (void) = 0xf800; //判斷是否進入燒錄模式
if(P4_3==0) (*isp) (); //判斷是否進入燒錄模式 IE=0x83; //允許計時計數中斷 while(1){ P3_5=1; //CS=1 P3_6=1; //WR=1 P3_5=0; //CS=0 P3_6=0; //WR=0 for(j=0;j<=6000;j++){ show(); //呼叫顯示副程式show }
11
程式(三)_中斷副程式 void Timer_int(void)interrupt 0 { //中斷副程式 EA=0;
P3_5=1; //CS=1 P3_7=1; //RD=1 P3_5=0; //CS=0 P3_7=0; //RD=0 change(); //呼叫副程式change EA=1; }
12
程式(四)_ 轉換修正副程式 void change(void){ int A; //宣告變數A
value=P0; //將P0值存至value A=value* ; t[0]=A/100; //A除100放到個位數t[0] t[2]=(A%100)/10; //A取除100餘數在除10放到小數第一位t[2] t[3]=((A%100)%10); //A取除100餘數在除10的餘數放到小數第二位t[3] }
13
程式(五)_顯示副程式 void show(void){ //副程式 show開始執行 P1=0xFF; //P1遮沒
P2=bcd2seg[t[i]]; //顯示七段顯示 P1=~scan; //由第一個七段開始顯示 scan=scan<<1; //向左位移一位 i++; // i值加1 if(i==4){ //判別 i是否已經為 4,"是"i會為0,scan=1 i=0; scan=0x01; }
14
實驗結果
15
參考資料 上課筆記 ADC0804 Datasheet 8051相關書籍
16
END
Similar presentations