廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3466 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.014544 second(s),query:5 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言