广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 2362 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为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.012536 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言