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