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

自製轉速表

答題得分者是:
addams01
一般會員


發表:3
回覆:5
積分:1
註冊:2005-12-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-20 12:08:55 IP:122.124.xxx.xxx 訂閱
各位大大:
小弟想在89c2051(12MHz)中利用中斷(Int1)來當轉速表(0~9999 RPM),
P1 接 4511(七段顯示器編碼器),
P3 接 74138 (3 對 8 解多工器),
P3.3(/Int1) 為輸入,
七段顯示器為共陰極,
程式的內容為發生發生中斷時,
高速的公式 RPM=60000000 / Timer1(mode1) (1us)
低速的公式 RPM=1500000 / TI_(HL) (25us)
但接上電路板後完全不會動作,
用 Keil Vision 組譯沒問題,
但在 debug 時,每次只要有 MOV P3,A 這行程式時就會亂跳,
能煩請各位大大幫忙看一下程式是否有錯誤呢?
如有描述不齊全的地方還請告知小弟,感激不盡啊!
附加檔案:45ff5e5706f45_RPM-1.ASM

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-20 13:00:36 IP:59.125.xxx.xxx 未訂閱
程式有 2 個 bug..

1> 程式碼請從 org 30H, 或 org 50H 以後開始寫

2> P3.3 你已經設為外部中斷腳, 現在又把 A 值搬到 P3? 自己中斷自己 ? 當然會亂跳.....

===================引 用 文 章===================
各位大大:
小弟想在89c2051(12MHz)中利用中斷(Int1)來當轉速表(0~9999 RPM),
P1 接 4511(七段顯示器編碼器),
P3 接 74138 (3 對 8 解多工器),
P3.3(/Int1) 為輸入,
七段顯示器為共陰極,
程式的內容為發生發生中斷時,
高速的公式 RPM=60000000 / Timer1(mode1) (1us)
低速的公式 RPM=1500000 / TI_(HL) (25us)
但接上電路板後完全不會動作,
用 Keil Vision 組譯沒問題,
但在 debug 時,每次只要有 MOV?? P3,A 這行程式時就會亂跳,
能煩請各位大大幫忙看一下程式是否有錯誤呢?
如有描述不齊全的地方還請告知小弟,感激不盡啊!
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-20 13:15:53 IP:59.125.xxx.xxx 未訂閱
還有.....請問一下喔....
若上一次轉速顯示為 10 rpm .....之後就無任何中斷進來(即轉速為0)
那你的轉速表是會顯示 0? 10? or??
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
addams01
一般會員


發表:3
回覆:5
積分:1
註冊:2005-12-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-21 00:34:30 IP:122.124.xxx.xxx 訂閱
先感謝正大願意撥空幫小弟看一下程式,甘溫啊~~~
但小弟仍有些小問題哩!
Q1 : 請問一下,為何程式要從 org 30h 或 org 50h 開始呢?
因為書上寫的都是從 00h 開始,不知道這麼作有何用意呢?
Q2 : 小弟的程式稍做修改後,目前用 Keil 模擬起來似乎正常,
但中斷時(Int1,用模擬的)會跳入無窮迴圈( Timer0 會動作,但是不會發生中斷),
不知道這個問題有可能是哪的地方發生的呢?
程式看了好幾天還不如您正大的一句提點哩!!再次感謝您囉!!!

===================引 用 文 章===================
程式有 2 個 bug..

1> 程式碼請從 org 30H, 或 org 50H 以後開始寫

2> P3.3 你已經設為外部中斷腳, 現在又把 A 值搬到 P3? 自己中斷自己 ? 當然會亂跳.....

addams01
一般會員


發表:3
回覆:5
積分:1
註冊:2005-12-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-21 01:21:43 IP:122.124.xxx.xxx 訂閱
小弟的計畫如下:
因觸發信號是從 Int1 來的,如果 Int1 觸發時會啟動/關閉 TR1
如果是關閉的話,就沒有您的問題了,
如果 TR1 是開啟的,那 Timer1 (1us)會開始計時,同時 TI_H 及 TI_L 也會開始計數(次/25us)
而系統每 1ms 要做一次掃描,同時偵測 TI_H 及 TI_L 是否溢位,
如果溢位的話就關閉 TR1,並清除 Timer1, TI_H,TI_L,RPM_H,RPM_L,
以便等待下次的中斷到來。
不知道這樣子的想法有沒有錯誤呢?
小弟剛有試了一下(程式已修改完成),如果強制命令 TR1 動作的話,
再經過 1.6xxx 秒後會自動清除所有累積的數值並將 TR1 及 TF1 關閉,
顧在下一次掃描時數字會自動變成 0000
但目前為止中斷的輸入還是有些問題,結至目前小弟仍在思考中,方便的話也請正大幫我是看看吧!
p.s 多謝正大的提醒,小弟倒是忽略了這點,目前已修正完畢!

===================引 用 文 章===================
還有.....請問一下喔....
若上一次轉速顯示為 10 rpm .....之後就無任何中斷進來(即轉速為0)
那你的轉速表是會顯示 0? 10? or??

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-21 01:26:53 IP:219.70.xxx.xxx 未訂閱
Q1> 30h 避開所有中斷向量位址與特殊位置. 50h 留空間定義變數. 
由00H開始寫的程式 你可以注意一下, 應該都沒有使用到中斷& R0~R7

Q2> 不知道你改了那裡....SO 不知道問題. 俺不是神 =.=

===================引 用 文 章===================
先感謝正大願意撥空幫小弟看一下程式,甘溫啊~~~
但小弟仍有些小問題哩!
Q1 : 請問一下,為何程式要從 org 30h 或 org 50h 開始呢?
??????? 因為書上寫的都是從 00h 開始,不知道這麼作有何用意呢?
Q2 : 小弟的程式稍做修改後,目前用 Keil 模擬起來似乎正常,
??????? 但中斷時(Int1,用模擬的)會跳入無窮迴圈( Timer0 會動作,但是不會發生中斷),
??????? 不知道這個問題有可能是哪的地方發生的呢?
程式看了好幾天還不如您正大的一句提點哩!!再次感謝您囉!!!

------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
addams01
一般會員


發表:3
回覆:5
積分:1
註冊:2005-12-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-03-21 10:17:27 IP:122.124.xxx.xxx 訂閱
1. 那請問一下,如果我程式要從 30H 開始,該怎麼做呢?書上好像沒有看到類似的範例耶??
2. 檔案我不知道該怎麼在次上傳哩!找不到上傳檔案的按鈕~~~@@
3. 今天早上經程式燒進 89c2051 測試,一送電四個數字有亮,但是數字顯是為 4080....怪了.....
另外,發生中斷時所有數字全暗,似乎已經跳入無窮迴圈了....可是用 Keil 又看不到這個問題哩~~~

===================引 用 文 章===================
Q1> 30h 避開所有中斷向量位址與特殊位置. 50h 留空間定義變數.
由00H開始寫的程式 你可以注意一下, 應該都沒有使用到中斷& R0~R7

Q2> 不知道你改了那裡....SO 不知道問題. 俺不是神 =.=

harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-03-21 11:56:32 IP:210.68.xxx.xxx 訂閱
CSEG AT 000H
LJMP startprog
.....
.....
CSEG AT 030H
startprog:
.....
.....

===================引 用 文 章===================
1. 那請問一下,如果我程式要從 30H 開始,該怎麼做呢?書上好像沒有看到類似的範例耶??
2. 檔案我不知道該怎麼在次上傳哩!找不到上傳檔案的按鈕~~~@@
3. 今天早上經程式燒進 89c2051 測試,一送電四個數字有亮,但是數字顯是為 4080....怪了.....
另外,發生中斷時所有數字全暗,似乎已經跳入無窮迴圈了....可是用 Keil 又看不到這個問題哩~~~

===================引 用 文 章===================
Q1> 30h 避開所有中斷向量位址與特殊位置. 50h 留空間定義變數.
由00H開始寫的程式 你可以注意一下, 應該都沒有使用到中斷& R0~R7

Q2> 不知道你改了那裡....SO 不知道問題. 俺不是神 =.=

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-03-21 13:05:35 IP:59.125.xxx.xxx 未訂閱
1> org 00H jmp start org 30H start: ........ 2> 修改第一個發問留言, 看能不能更新附加檔吧 3> 編譯程式只能幫你找出語法錯誤. 邏輯錯誤要自己找. SO 還是實際做實驗驗證看看吧. 你這樣的寫法問題會比較多, 也不好查. 先確定你的計速程式以及Hex2Dec 正確吧. 如果是我, 我會把它分開. 計速程式歸計速程式, 中斷只負責計算並更新欲顯示的數值. scan 一直定時在做, 只負責顯示數值.不須中斷. 考慮人類視覺暫留用 delay 就可以了 ===================引 用 文 章=================== 1. 那請問一下,如果我程式要從 30H 開始,該怎麼做呢?書上好像沒有看到類似的範例耶?? 2. 檔案我不知道該怎麼在次上傳哩!找不到上傳檔案的按鈕~~~@@ 3. 今天早上經程式燒進 89c2051 測試,一送電四個數字有亮,但是數字顯是為 4080....怪了..... ???? 另外,發生中斷時所有數字全暗,似乎已經跳入無窮迴圈了....可是用 Keil 又看不到這個問題哩~~~
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
系統時間:2024-05-20 21:45:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!