廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 2358 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
aniegg
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x26
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++] 外部定時中斷 part2
目的:利用研華 PCL 833 卡做定時中斷。已交談方式輸入中斷頻率,敲擊任一鍵(除了ESC)開時,每次中斷 隨中斷次數 n 發出ln(n)*2000頻率的聲音,接著敲擊任一鍵(除了ESC)暫停並且可以輸入新的中斷頻率,按ESC鍵結束!

執行結果:程式已經不會 lag ,而且也可以順利改變中斷頻率。但是卻出現另一個 bug ,當我按任何鍵(除了ESC),想要暫停中斷而改變中斷頻率,照理說揚聲器應該不會發出聲音,但是揚聲器還是繼續發出頻率為A時的聲音,當我把B頻率輸入後,揚聲器才改變為B頻率的聲音。

應該是此處有 bug存在,但是我找不出來!
if ( kbhit() )
if ( getch() == 27 )
break;
else {
nosound();
n = 1;
count = 0;

printf( "Enter time base to change sampling period: ");
scanf( "%d", &timebase );
}

下面是我完整的編譯碼:

#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <bios.h>
#include <math.h>

void interrupt (*old_handler)();
void interrupt int_di();
void init_INT();

unsigned int irql, base, ReadyFlag = 0;
..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容




颯風沾、問途寒,誰與共飲,誰敢擋關?
燕戟歸命人不還。
獻花 x0 回到頂端 [樓 主] From:台灣教育部 | Posted:2005-10-13 15:02 |
kevinliao 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x17
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

如果你不明確地 disable 中斷, 時間到了硬體自然會乖乖地發生中斷而執行你的 interrupt handler, 所以即便你用了 nosound() 還是會聽到聲音囉.

正確的方式應該是在偵測到非 ESC 的按鍵後, 應該先 disable 中斷, 直到新的 time base 值寫入暫存器後再 enable 中斷.


獻花 x0 回到頂端 [1 樓] From:台灣中華電信 | Posted:2005-10-13 17:03 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.013847 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言