Turbo/c程式PRINTER PORT視窗和DOS的問題

2014-05-04 6:17 am
(1)我在自習一種.微電腦介面控制實習並列埠
買了一本微電腦介面控制實習的書來練
但是發現程式只能在DOS下執行的時候動
作都正常.可是在視窗軟體下沒有動作.想知道
這程式要怎麼修改才能在視窗軟體下執行.
為什麼在視窗軟體下不能用
以下是堤共的程式碼Turbo c2.0
#include <stdio.h>
#include <dos.h>
#define print_port 0x378
unsigned char led_tab[]={0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x08,
0x04,0x02,0x01};
main()
{ char i ;
Outportb(print_port+2,0);
While(1)
{
for(i=0;i<16;i++)
{
Outportb(print_port,led_tab[i]);
Delay(25000) ;
}
}
}


(2)發現很多程式如組合語言. C語言.BASIC語言. Turbo
語言等都很難在視窗軟體下執行.甚至C++語言找不到
繪圖功能.只能呼叫複雜的副程式.是我不知道怎麼呼叫
難道現在只能學V-BASIC或JAVA等語言嗎??
我想要寫一些能控制周邊設備和控制周邊設備的視窗軟
體.能在視窗軟體下執行.真不知道學哪個程式語言好.請
介紹一下.就是學完一種好用的程式語言不用再學其他的語言
謝謝
更新1:

這程式碼是使PRINTER POR.我自己外接印表機線路上的7顆LED.會由最左第1顆先亮.再依序右移第二顆亮直到第8顆亮過後.再回到第7第6個~第1個亮.重覆上述動作.我用以前的純DOS 下執行程式時LED動作都正常.且可以用DELAY來調整他的速度.上面我是用25000 但程式在WINDOWS 7下執行時8顆LED都亮著不動.所以想說是DOS和視窗軟體差異的問題. 因為之前也有過一樣的問題而放棄練習.用同一片主機板 但是這次的實驗中DOS是用華碩P4SP-MX SE的主機板.WINDOWS 7是華碩P5B的主機板 對平台來說我想不會差太大.覺得是DOS和視窗軟體差異的問題才發問

更新2:

不好意思.我英文看不懂

更新3:

謝謝前輩們的解說.我對程式語言還不太熟悉.所以不會修改.可以的話大大們幫我的程式碼. 修改成能在WINDOWS 7下執行.我也在驗證每個指令的功能.書上有介紹的指令好像都沒 問題.但Outportb這指令就沒找到.最後~發問時間快結束了.所以又重新發問了

回答 (10)

2014-05-09 12:18 am
✔ 最佳答案
because MSDOS runs in real mode of CPU , You can access IO port and real physical address.
But windows NT or above version runs in Pretected mode mode and page mode of CPU, You can't access IO port address and physical address in User Mode. Only your program runs in kernel mode to access IO port and virtual address( not physical address ), You want to access physical address like video buffer( 0xA0000) , and You must use mapping mehod ( virtual address mapping physical addess ).


2014-05-12 07:24:53 補充:
but Windows NT or XP still supports 16bit program running in V86mode ( ntvdm.exe),
You can try it.
2015-05-07 8:46 am
網上看了這家,因為我公司的硬碟故障,微軟的張經理都找過他們,把他們送去內湖救不出來的,都給救出來
http://www.datamaster.com.tw/
http://millerforyew1.pixnet.net/blog/
2014-09-25 2:39 pm
您期待已久的 8891娛樂館 熱烈開幕囉!

8891投注網以優質的服務領先業界

多位美女客服24小時即時線上為您服務!

8891休閒網有優於市面所有台灣運彩遊戲的 賠 ~ 率

以及免下載美女 百家樂、21點、骰寶、各國賓果、餐廳賓果、彩球遊戲

另有數百位真人視訊聊天辣妹與您進行互動聊天還有"精彩"電影喔!

心動了嗎!! 快來體驗市面上最完質最高品質的服務

現在有開放免費試玩喔! 網址 : 8891.NET
2014-06-05 11:24 am
到下面的網址看看吧

▶▶http://candy5660601.pixnet.net/blog
2014-06-03 10:54 am
到下面的網址看看吧

▶▶http://candy5660601.pixnet.net/blog
2014-06-01 9:48 am
參考下面的網址看看

http://phi008780520.pixnet.net/blog
2014-05-28 12:34 pm
參考下面的網址看看

http://phi008780520.pixnet.net/blog
2014-05-20 9:24 am
參考下面的網址看看

http://phi008780508.pixnet.net/blog
2014-05-19 7:10 pm
參考下面的網址看看

http://phi008780508.pixnet.net/blog
2014-05-04 6:52 am
如果你想學一種語言到處都能用的話(不一定好用),那唯一解幾乎就是 C/C++ 了!
另外,你的程式是哪裡不能在視窗程式裡執行?我從來只看過視窗程式很難改寫成指令列程式,還沒看過指令列程式不能改寫程式窗程式的。

2014-05-03 23:55:22 補充:
我沒看你視窗那邊的程式碼,所以也不能確定差別在哪。
但就你上面貼的程式碼來看好像比較單純,有問題的可能就是 Outportb 和 Delay 而已。建議你先檢查 Delay 是不是真的有 Delay 那個時間?用 GetTickCount 取得 Delay 前後的時間,比對一下就知道 Delay 有沒有在正常工作。
Delay 的問題排除之後還不能正常的話,那就是 Outportb 的問題了。不一定是函式有問題,也可能是使用上的錯誤,比方說讓一個燈亮起來的同時需不需要主動把前一個燈熄掉?

2014-05-10 22:23:00 補充:
他的意思就是 DOS 是在真實模式下跑的,所以可以直接更改物理位址上的數值。但是現在的系統基本上都是在保護模式下執行 User 層程式,所有的記憶體位置都是虛的,所以不能這樣玩。
解決的方法是使用作業系統提供的記憶體映射功能,將指定的物理位址映設到程式的分頁上;但是這個方法沒有辦法在使用者層做到,必須到系統層或核心層才行,白話的意思就是你要自己寫驅動的意思。


收錄日期: 2021-04-27 21:00:04
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20140503000015KK07381

檢視 Wayback Machine 備份