全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1292
推到 Plurk!
推到 Facebook!

adc0804的程式問題

尚未結案
saine3746
一般會員


發表:1
回覆:0
積分:0
註冊:2005-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-25 00:06:32 IP:218.165.xxx.xxx 未訂閱
void init_sc12(unsigned mask)
{
//enable bus mask
inregs.x.ax=0x8001;
inregs.x.dx=mask;
int86x(PFE_INT,&inregs,&outregs,&segregs);
//=========PCS6=>CS========================================
//enable programmable chip selects
inregs.h.ah=0x83;
inregs.x.dx=0x40;   //pcs6 address 600h~6ffh
int86x(PFE_INT,&inregs,&outregs,&segregs);
}
//*****Write data into ADC0804*****通知外部晶片開始動作
void write_sc12_io(void)//unsigned char value
{
//write data bus,A0.0-A0.6 on databus
//write data bus
inregs.h.ah=0x81;
inregs.x.di=0x6FF; //address
inregs.h.dh=0;
//inregs.h.dl=value; //送給ADC0804ㄉ值0X00
//inregs.x.bx=0xFFFF;  //wAND=only AD0-AD7
//inregs.x.cx=0x0000;  //wXOR=0x0000
int86x(HAL_INT,&inregs,&outregs,&segregs);
}
//******read ADC0804 inputs********
unsigned char read_sc12_io(void)
{
unsigned char value;
inregs.h.ah=0x80;
inregs.x.di=0x6F0;
inregs.x.bx=0xFFFF;
inregs.x.cx=0x0000;
int86x(HAL_INT,&inregs,&outregs,&segregs);
value=outregs.h.al;
return value;
}
//AD轉換/////////////////////////////////////////////////////
unsigned char ADC(void)
{
unsigned char read_state;//存放讀取資料
//wait 100ns 等待轉換時間
inregs.x.ax=0x0900;
inregs.x.bx=100;
int86x(TCP_INT,&inregs,&outregs,&segregs);
if(counter==1)//=1表示轉換完成
{
asm cli
      read_state=read_sc12_io();
      counter=0;
asm sti
}
write_sc12_io();//令wr為0送出一ㄍlow已令adc開始轉換
return read_state;
}    ========================================================
重點來了.....
inregs.x.ax=0x8001;
inregs.x.dx=mask;
inregs.h.ah=0x80;
inregs.x.di=0x6F0;
inregs.x.bx=0xFFFF;
inregs.x.cx=0x0000;
inregs.x.ax=0x0900;
inregs.x.bx=100;    那些.x.ax~~.x.dx~~.h.ah等等..那些是什麼意思? 
和後面那些數值似懂非懂
拜託各位大大給我解答.......
 
發表人 - saine3746 於 2005/07/25 00:40:00
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-25 00:20:09 IP:218.168.xxx.xxx 未訂閱
您好:    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 >
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-25 10:51:08 IP:61.229.xxx.xxx 未訂閱
inregs 代表暫存器 (register)的一個變數 x 代表 x86 的 16 bit 暫存器 ex: ax, bx, cx, dx, si, di ... h 代表 x86 的 8 bit 暫存器, ax~dx(結尾為 x) 的每個 16 bit 暫存器 可以分成 h, l ex: ax = ah al; h 表示 high, l 表示 low 所以 inregs.x.ax = 0x8001; 表示把暫存器的 ax 設為 0x8001 (此時 ah = 0x80, al=0x01)
系統時間:2024-05-03 13:02:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!