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

Turbo c程式要怎麼改成BCB

 
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-02-01 15:45:52 IP:163.23.xxx.xxx 訂閱
這Turbo c程式要怎麼改成BCB呢?
<textarea class="cpp" rows="10" cols="60" name="code"> void main() { outport (Base 0,0x09); outport (Base 1,0x09); outport (Base 3,0x00); outport (Base 4,0x00); outport (Base 6,0x01); outport (Base 7,0x01); outport (Base 8,0x00); outport (Base 9,0x00); ts=clock()/CLK_TCK; tf=ts; while (!kbhit()) { x1=inport (Base 0); x2=inport (Base 1); x3=inport (Base 2); x4=inport (Base 4); x5=inport (Base 5); x6=inport (Base 6); b_1=((float)(x1) (float)(x2)*256.0 (float)(x3)*65536)-8388608.0; a_1=((float)(x4) (float)(x5)*256 (float)(x6)*65536)-8388608; x1=inport (Base 0); x2=inport (Base 1); x3=inport (Base 2); x4=inport (Base 4); x5=inport (Base 5); x6=inport (Base 6); b=((float)(x1) (float)(x2)*256.0 (float)(x3)*65536)-8388608.0; a=((float)(x4) (float)(x5)*256 (float)(x6)*65536)-8388608; if (abs(b-b_1)>100) { x1=inport (Base 0); x2=inport (Base 1); x3=inport (Base 2); b=((float)x1 (float)(x2)*256.0 (float)(x3)*65536)-8388608.0; } bb=(b/83.333)*pi/180; if(abs(a-a_1)>100) { x4=inport (Base 4); x5=inport (Base 5); x6=inport (Base 6); a=((float)x4 (float)(x5)*256 (float)(x6)*65536)-8388608; } aa=(a/83.333 90)*pi/180; td=clock()/CLK_TCK-tf; ppp(); dt=td-ts; if (dt>=0.1) { w1=(aa-aa_1)/dt; w2=(bb-bb_1)/dt; aa_1=aa; bb_1=bb; ts=td; } e1=isi-aa; e_1=e_1 e1*(td-td_1); s1=oe1 lan*e1; DA1=(e1*p1 i1*e_1-d11*w1) 20*(abs(s1)/s1); //軸1 PID de1=(e1-oe1)/dt; oe1=e1; e2=osi-bb; e_2=e_2 e2*(td-td_1); s2=oe2 lan*e2; DA2=(e2*p2 i2*e_2-d22*w2) 20*(abs(s2)/s2); //軸2 PID de2=(e2-oe2)/dt; oe2=e2; td_1=td; daout1(); daout2(); gotoxy(3,10); } DA1=0; DA2=0; daout1(); daout2(); fclose(fp0); } void daout1() { if (DA1>3) { DA1=3; } if (DA1<-3) { DA1=-3; } if (abs(aa)>2.618) { DA1=0; } d1=409.6*(DA1 5); d2=d1&0xf00; d2=d2>>8; d3=d1&0xff; outport (base 0,d2); outport (base 1,d3); } ........................ ........... </textarea>
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-02-01 16:05:13 IP:61.219.xxx.xxx 未訂閱
MS-Windows 是保護模式作業系統, 不像 DOS 可以隨便將資料丟到特定 port
可以說一下這個程式的用途嗎 ? 或許有其他方法達成, 而不用改寫的方式
或者您研究 DirectX 看看
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-02-01 16:08:30 IP:163.23.xxx.xxx 訂閱
這程式是學長所做的手臂馬達驅動
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-02-01 16:15:44 IP:61.219.xxx.xxx 未訂閱
為何一定要用 BCB ? 它比較合適寫 MS-Windows 下有視窗的程式
您要的東西比較合在 DOS 下用 Turbo C 一類開發工具做
不然研究 DirectX 看看
http://www.microsoft.com/downloads/details.aspx?familyid=402111C4-6478-46C1-BBD9-1BF9FCCE52F4&displaylang=zh-tw
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-01 16:25:40 IP:163.23.xxx.xxx 訂閱
因為我影像處理用BCB做
我要整合到裡面去
這是用D/A卡和Encoder卡 作I/O控制
我要看能不能用改的來使用
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-02-01 16:26:52 IP:163.23.xxx.xxx 訂閱
DirectX 是做什麼的?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-02-01 16:50:12 IP:61.219.xxx.xxx 未訂閱
DOS 時代, 程式可以直接存取裝置 I/O
缺點是程式沒寫好, 會讓作業系統當掉

為了避免這種情況, MS-Windows 時代的保護模式 就禁止直接存取 裝置的 I/O
但是對於一些 多媒體, Game 等, 直接存取 顯示卡 記憶體速度會比較快
不能直接存取會讓速度下降很多

後來 微軟 採取折衷方案, 由 微軟 提供一些直接存取 裝置 I/O 的 高速 API
也就是 Microsoft DirectX , 提供比較高速 且 安全的 API 給程式設計師用


===================引 用 文 章===================
DirectX 是做什麼的?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-02-01 17:00:03 IP:163.23.xxx.xxx 訂閱
那就是不能改成BCB
因為對I/O不熟
所以不知道要怎麼用BCB寫
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-02-01 17:08:54 IP:61.219.xxx.xxx 未訂閱
可能還是可以用 BCB 寫, 但是無法像翻譯那樣, 逐行找對應的 API 或 function 改寫成 BCB 
小弟沒用過 DirectX , 也不知道是否有其他可以取代的元件
===================引 用 文 章===================

那就是不能改成BCB
因為對I/O不熟
所以不知道要怎麼用BCB寫
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-02-01 17:15:03 IP:163.23.xxx.xxx 訂閱
那可以請前輩幫個忙改一下嗎
我要看是要怎麼寫
後面我自己來寫
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-02-01 17:15:16 IP:61.219.xxx.xxx 未訂閱
這是接在 PC 的 COM1 或 COM2 嗎 ?
===================引 用 文 章===================
這程式是學長所做的手臂馬達驅動
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-02-01 17:17:01 IP:61.219.xxx.xxx 未訂閱
看看這篇,用BCB6寫COM通訊程式,不知是否有用
http://www.legalsoft.com.cn/articles/show.asp?id=563

聯高軟體:在CB6下基於api函數編寫串口通信程式簡介
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-02-01 17:22:03 IP:163.23.xxx.xxx 訂閱
用PC透過D/A卡和Encoder卡
來驅動手臂馬達
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-02-01 22:17:18 IP:220.131.xxx.xxx 訂閱
你那個 d/a coard, encoder card 應該會有 windows 上的 api,lib  吧。
去找出來用吧。
如果沒有那我會勸你把它的邏輯讀通。換卡。
不然你的時間花在這個上面沒意義。
你要在以後想用這個東西,會造成系統孤立。
很難維護

===================引 用 文 章===================
用PC透過D/A卡和Encoder卡
來驅動手臂馬達
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-02-01 22:28:57 IP:163.23.xxx.xxx 訂閱
找到api 和 lib
要怎麼使用?api 和 lib是做什麼的?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-02-01 22:48:03 IP:203.204.xxx.xxx 未訂閱
API(Application Programming Interface) / 應用程式介面
以單一種應用程式,去與其他系統程式溝通的介面。企業資源規劃(ERP)的生產廠商,以應用程式介面將其他企業資源規劃之應用整合在一起。
LIbrary 程式庫
提供一堆副程式和函式/函數供使用者呼叫, 例如 outport
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#17 引用回覆 回覆 發表時間:2007-02-01 22:52:59 IP:163.23.xxx.xxx 訂閱
了解!!
那我要怎麼使用它們
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#18 引用回覆 回覆 發表時間:2007-02-01 23:07:40 IP:203.204.xxx.xxx 未訂閱

您的範例中的 outport 和 inport 就是 Library 中的 function , 範例中已經使用它們了
1. 您要先去查那張 D/A card, encoder card 是否有提供 API 或 LIB
去翻閱手冊, 去電子檔案查, 一般人不會有這種東西, 您要自己去找出來
2. 如果有, 哪個 function 是您需要使用的
例如您的範例中使用到了 outport 和 inport , 這是給 Turbo C 用的 function
你要自己去確認該 D/A Card 是否有提供給 Windows 用的 API
3. 然後了解 function 的語法
例如 outport 的語法是 outport (位址, 輸出值);
實際使用可能是 outport (Base 0,0x09);

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#19 引用回覆 回覆 發表時間:2007-02-01 23:57:06 IP:163.23.xxx.xxx 訂閱
前輩的意識是找D/A Card 是否有提供給 Windows 用的 API
然後再了解語法
我有看到有篇A/D卡的有個前輩說
"加入它提供的adsapi32bcb.lib及DRIVER.H
再從driver.h中去挑出你要的指令即可
"
這樣作法也可以嗎?lib檔要怎麼加入呢?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#20 引用回覆 回覆 發表時間:2007-02-02 00:35:22 IP:203.204.xxx.xxx 未訂閱
去翻閱手冊, 去電子檔案查, 一般人不會有這種東西, 您要自己去找出來
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#21 引用回覆 回覆 發表時間:2007-02-02 00:40:42 IP:163.23.xxx.xxx 訂閱
了解
daniel__lee
高階會員


發表:18
回覆:124
積分:113
註冊:2002-11-10

發送簡訊給我
#22 引用回覆 回覆 發表時間:2007-02-13 15:54:17 IP:60.250.xxx.xxx 訂閱
Turbo C的程式一定可以改寫成BCB的
不過方法有很多看你要怎麼去改
第一種最簡單的
因為你的範例用了inport() & outport()的指令這些指令在bcb3.0板以後就被拿掉了,原因是window要保護i/o..........
但是還是有例外除了nt架構的os還是可以鑽一下他的漏洞,如果你用win9x 的os你可把output的碼以asm的放式寫入就可以用了.....不清楚爬一下文 這問題幾年前 在這裡有過討論

再來就是去外掛一些.DLL 或winio之類的東西,就沒有os的限制了 本論壇也有許多資料

或者去找你的card的製造商應該也有提供for bcb的lib 或dll可以讓你使用



------
~ 勿在浮沙上面築高塔 ~
m7777
一般會員


發表:0
回覆:1
積分:0
註冊:2003-09-23

發送簡訊給我
#23 引用回覆 回覆 發表時間:2008-02-26 17:57:45 IP:220.128.xxx.xxx 未訂閱
安裝Port95NT(google search) 並將inport/outport  改成以下還是即可

int inport(int address)
{
return DlPortReadPortUchar(address);
}

void outport(int address, int data)
{
DlPortWritePortUchar(address,data);
}
系統時間:2024-04-26 4:06:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!