[信息與通信]轉(zhuǎn)換_第1頁
[信息與通信]轉(zhuǎn)換_第2頁
[信息與通信]轉(zhuǎn)換_第3頁
[信息與通信]轉(zhuǎn)換_第4頁
[信息與通信]轉(zhuǎn)換_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、.8位A/D轉(zhuǎn)換器ADC0809 (1)技術(shù)指標:  工作方式:逐次逼近式  轉(zhuǎn)換時間:100s  線性誤差:+/-1/2LSB  封裝形式:28腳雙列直插式  (2)簡要說明  CMOS工藝,逐次比較式ADC,內(nèi)含8通道多路開關,鎖存邏輯控制器,具有三態(tài)輸出緩沖器,能于微機兼容,輸出電平與TTL或CMOS兼容。 (3)引腳說明  (4)功能框圖(5)電器指標 (a)電源電壓         &#

2、160; 65V (b)除輸入端的任意端電壓    -0.3 VDD+0.3V (c)控制輸入端電壓     -0.3+15V (d)工作溫度      -4085    民品      -55125    軍品 (e)儲存溫度      -65150   以

3、上的技術(shù)指標,我們都是要關心的,在使用時一定要注意。(6)時序圖(7)0809接口框圖  每一個部分的電路是獨立的,完成AD轉(zhuǎn)換首先地址選擇,其次啟動,等待,最后是讀數(shù),在完成AD轉(zhuǎn)換時是相關的的,但接口電路的設計是獨立的。(8)地址鎖存的時序:(9)啟動(10)等待(11)讀數(shù)     設計此電路有兩種方法:一種是利用I/O端口設計,另一種利用總線設計.例:利用I/O口設計。   在8088中不提供I/O口,利用74LS273和74LS245擴I/O端口。ALE,A0,A1,A2,START,OE要求CPU系統(tǒng)電路提供輸出

4、端口,EOC,D0,D1-D7要求CPU系統(tǒng)電路提供輸入端口。所以需要1片74LS273和兩片74LS245.  譯碼電路,采用一對多設計:     A15  A14    A13   A12              A0   CS0  CS1  CS2      0

5、    0      X     X               X     0    1    1      0    1   

6、   X     X               X     1    0    1      1    0      X    

7、 X               X     1    1    0     CS0的地址為:0000-3FFFh     CS1的地址為:4000-7FFFh     CS0的地址為:8000-BFFFh   

8、;輸出接口電路的設計:  輸入電路接口電路的設計:對于8031的結(jié)構(gòu)是:當前的主流CPU的結(jié)構(gòu):  目前芯片的設計都是基于I/O端口的方式:  軟件編程的方法:     1、需求分析     2、算法     3、框圖     4、編寫代碼     5、調(diào)試  需求分析:此程序采集8路將數(shù)據(jù)存放到某個數(shù)組中。  算法:簡單略。&

9、#160; 框圖:   初始化:硬件和變量為固定狀態(tài),硬件ALE為低,SATRT為高,OE為低,通道地址為第一個通道,存儲數(shù)據(jù)的數(shù)組清零。選擇通道:啟動:等待:讀數(shù):     編寫代碼   利用C語言編寫,C語言為中級語言,它具有低級語言和高級語言的特性,在利用C語言時,一種是加操作系統(tǒng),另外是不加操作系統(tǒng)(操作系統(tǒng)的功能是內(nèi)存管理,進程管理,設備管理,文件管理)。在單片機系統(tǒng)中這些功能都由我們自己來做。    所以變量的理解是關鍵。    變量

10、的理解第一是作用域(全局變量和局部變量)。    變量的理解第二是生存期(靜態(tài)和動態(tài)變量)。    變量的理解第三是存儲的位置(對于8088系統(tǒng)寄存器,數(shù)據(jù)區(qū),堆棧區(qū)。其它還有更多的區(qū)域),這些都必須在程序中說明。   變量的理解第四變量的特點,字節(jié)數(shù),具有地址的屬性,描述方法,存放形式。不管是多少位機一個字節(jié)對應一個地址。    例如:int iii;    16位機,字節(jié)數(shù)16位,兩個字節(jié)。低位字節(jié)存放在低位地址,高位字節(jié)存放高位地

11、址,以低位字節(jié)的地址代表所有單元的地址。描述方法,最高位為符號位,正數(shù)是以原碼形式存放,負數(shù)是以補碼形式存放。   在使用的時候降維,對于iii是個地址,常量。降維的含義是取地址的數(shù)據(jù)。如果取不到數(shù)據(jù)的話,返回這個單元的地址。如果取數(shù)據(jù)的話,返回數(shù)據(jù),再不能降維。    例如:int S234;       s+1,*s+1,*s+1,*s+1的理解,*的意思也是降維。     s由兩個元素組成,s0由三個元素組成,s00由四

12、個元素組成,s000由兩個字節(jié)組成。    s首先降維,取第一個元素,但取不到具體數(shù)據(jù),返回地址,那么就是S000的第一個字節(jié)存放的地址。1的維數(shù)和S相同,所以是加24。    對于語句和函數(shù)是復雜的動詞。它一定是對變量的操作。理解變量就是名詞!    每個程序都有自己的框架!對C程序,是由庫函數(shù)和主函數(shù)構(gòu)建的。    書寫規(guī)范也可以說是習慣:常量和變量用名詞,函數(shù)用動詞和操作的變量,常量用大寫字母和變量用小寫字母。一般動詞的第一個字母大寫!  

13、  #inlude "stdio.h"    unsigned char ad_buf;       unsigned char ad_adr;       unsigned char buf;       unsigned char out_0809_data;       main() 

14、;                         int i;             Init();            

15、for(i=0;i<8;i+)                                            Set_ad0809_adr();  

16、;                    ad_adr=i;                      Start_ad0809();    

17、0;                 Delay_ad0809();                      Read_ad0809();       

18、60;              Write_data();                                  &

19、#160;      以上是不是在寫作文!      功能:初始化硬件和變量     輸入?yún)?shù):空      輸出參數(shù):略        Init()              &

20、#160;     int i;          for(i=0;i<8;i+)                                

21、0; ad_bufi=0;                           ad_adr=0;         out_0809_data=00100000B; /start=1;ALE=0;OE=0;    

22、60;                             /加這個變量的目的是,對某一個端口操作時不破壞其它口          outportb(0x0,out_0809_data);   &

23、#160;           說明:     功能:設置通道     輸入?yún)?shù):ad_adr      輸出參數(shù):空      Set_ad0809_adr()           

24、60;          out_0809_data=out_0809_data|ad_adr;           outportb(0x0,out_0809_data);           out_0809_data=out_0809_data| 0x10;  /ALE=1;

25、0;           outportb(0x0,out_0809_data);           out_0809_data=out_0809_data& 0xef;  /ALE=0;            outportb(0x0,out_0809_da

26、ta);                功能:啟動     輸入?yún)?shù):空      輸出參數(shù):空      Start_ad0809()             

27、0;        out_0809_data=out_0809_data&0xdf;  /START=0;            outportb(0x0,out_0809_data);           out_0809_data=out_0809_data|0x20;  /SATRT

28、=1;            outportb(0x0,out_0809_data);                功能:等待     輸入?yún)?shù):空      輸出參數(shù):空    

29、0; Delay_ad0809()                      unsigned char ccc;           ccc=inportb(0x8000);           c

30、cc=ccc&0x01;           while(ccc=1)                                    

31、      ccc=inportb(0x8000);                     ccc=ccc&0x01;                  

32、60;             ccc=inportb(0x8000);           ccc=ccc&0x01;           while(ccc=0)         

33、0;                                ccc=inportb(0x8000);                

34、     ccc=ccc&0x01;                                     功能:讀數(shù)     輸入?yún)?shù):空 

35、;     輸出參數(shù):buf     Read_ad0809()                                out_0809_data=out_0809_data&0x40;

36、0; /OE=0;              outportb(0x0,out_0809_data);             buf=inportb(0x4000);             out_0809_data=out_0809_

37、data|0xbf;  /OE=1;              outportb(0x0,out_0809_data);                   功能:存數(shù)     輸入?yún)?shù):空   &#

38、160;  輸出參數(shù):ad_buf      Write_data()                          ad_bufad_adr=buf;         

39、60;        程序結(jié)束!    目前CPU的速度越來越快,絕大多數(shù)都已經(jīng)是50MHz, 那么執(zhí)行一條語句的速度也是越越來快,那么時間延時就不能忽略不計。    例如ALE的要求:    對于語句和函數(shù)是復雜的動詞。它一定是對變量的操作。理解變量就是名詞!    每個程序都有自己的框架!對C程序,是由庫函數(shù)和主函數(shù)構(gòu)建的。    書寫規(guī)范也可以說是習慣:常量和變量用名詞,

40、函數(shù)用動詞和操作的變量,常量用大寫字母和變量用小寫字母。一般動詞的第一個字母大寫!    #inlude "stdio.h"    unsigned char ad_buf;       unsigned char ad_adr;       unsigned char buf;       unsigned char out_0809_

41、data;       main()                          int i;             Init();   &#

42、160;         for(i=0;i<8;i+)                                       

43、     Set_ad0809_adr();                      ad_adr=i;                   

44、60;  Start_ad0809();                      Delay_ad0809();                      Read_a

45、d0809();                      Write_data();                         &#

46、160;               以上是不是在寫作文!      功能:初始化硬件和變量     輸入?yún)?shù):空      輸出參數(shù):略        Init()    

47、60;               int i;          for(i=0;i<8;i+)                        

48、;          ad_bufi=0;                           ad_adr=0;         out_0809_data=00100

49、000B; /start=1;ALE=0;OE=0;                                  /加這個變量的目的是,對某一個端口操作時不破壞其它口        &

50、#160; outportb(0x0,out_0809_data);               說明:     功能:設置通道     輸入?yún)?shù):ad_adr      輸出參數(shù):空      Set_ad0809_adr()  

51、;                    out_0809_data=out_0809_data|ad_adr;           outportb(0x0,out_0809_data);           out_

52、0809_data=out_0809_data| 0x10;  /ALE=1;            outportb(0x0,out_0809_data);           out_0809_data=out_0809_data& 0xef;  /ALE=0;      &#

53、160;     outportb(0x0,out_0809_data);                功能:啟動     輸入?yún)?shù):空      輸出參數(shù):空      Start_ad0809()    

54、                  out_0809_data=out_0809_data&0xdf;  /START=0;            outportb(0x0,out_0809_data);         

55、  out_0809_data=out_0809_data|0x20;  /SATRT=1;            outportb(0x0,out_0809_data);                功能:等待     輸入?yún)?shù):空   

56、;   輸出參數(shù):空      Delay_ad0809()                      unsigned char ccc;           ccc=inportb(0x8000); 

57、60;         ccc=ccc&0x01;           while(ccc=1)                           &

58、#160;              ccc=inportb(0x8000);                     ccc=ccc&0x01;         

59、0;                      ccc=inportb(0x8000);           ccc=ccc&0x01;           while(ccc=0) 

60、;                                         ccc=inportb(0x8000);       &

61、#160;             ccc=ccc&0x01;                                    

62、; 功能:讀數(shù)     輸入?yún)?shù):空      輸出參數(shù):buf     Read_ad0809()                             &

63、#160;  out_0809_data=out_0809_data&0x40;  /OE=0;              outportb(0x0,out_0809_data);             buf=inportb(0x4000);       &

64、#160;     out_0809_data=out_0809_data|0xbf;  /OE=1;              outportb(0x0,out_0809_data);                   功能:存數(shù)

65、60;    輸入?yún)?shù):空      輸出參數(shù):ad_buf      Write_data()                          ad_bufad_adr=buf;

66、0;                 程序結(jié)束!    目前CPU的速度越來越快,絕大多數(shù)都已經(jīng)是50MHz, 那么執(zhí)行一條語句的速度也是越越來快,那么時間延時就不能忽略不計。    例如ALE的要求:例利用總線設計:    以上論述了AD0809的接口電路分成通道選擇,啟動,等待,讀數(shù)四個獨立部分。利用總線設計的方法和以前講述的方法是一樣的。即利

67、用計算機的讀時序或者寫時序和芯片的邏輯設計控制電路。對于AD0809的接口電路的接口電路設計是一樣的。因為需要四個單元,就需要設計4個片選信號,假設設計的片選信號為CS0(40h-43H),CS1(80h-83H),CS2(A0H-A3H),CS3(B0H-B3h)。    整體設計如下:1、通道選擇設計         通道選擇是將總線上的信息輸出到0809。那么利用的就是計算機的讀的時序。       

68、       計算機的寫時序     0809的通道選擇的時序:       寫和片選是當且僅當,低有效,所以片選信號和寫信號是或的關系。所以設計如下:          通道選擇程序:     MOV DX,40H     MOV  AL,通道號  

69、;   OUT DX,AL         unsigned char adr,data_x;     adr=0x40;     data_x=0; 第一個通道     outportb(adr,data_x);         地址線包容地址線,如果片選C

70、S0包括8個地址(A0,A1,A2不參與譯碼),A,B,C也可以接地址線。         通道選擇程序:     MOV DX,40H  第一個通道     OUT  AL,DX       unsigned char adr,data_x;     adr=0x40;    

71、 outportb(adr,data_x);        數(shù)據(jù)線無用。 2、啟動設計     只要一個下降沿即可3、等待     可以通過IO口方式查詢低高平.     在這個時候是等待,為了省口可以利用延時的方法。     如果程序可以做其它事情就可以接到中斷上。4、讀數(shù)    計算機的讀時序如下: 

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論