![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-19 01:20 |
共 47,814 主题排行 / 349,908 发帖 / 今日 1 篇 / 48,259 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » dos下中断驻留程序的完整问题? |
| 可打印版本 651 / 0 |
| 第1楼 xyh36014789 | 发表于 2007-11-06 10:51 |
| 初级用户 发帖 32 积分 91 | |
|
dos下中断驻留程序的完整问题? 我有个irq3得中断,硬件已经初始化了,可以产生中断,但是程序感觉着还是不太完整,不知道那里需要补充?
下面程序就是irq3实现定时器定时中断功能,现在是打印“Welcome to JHW of ZhengZhou" (本来是用来定时操作文件的),如果开机运行该程序的话,完全没有问题,可是只要我按下键盘,程序就停止,不知道为何?是不是在程序中的没有考虑键盘中断的影响呢?不知道该怎么接管int 13H int 28H QQ:36014789 #include <stdio.h> #include <dos.h> #include <conio.h> #include <process.h> #include <sys/timeb.h> #include <fcntl.h> d4 #include <sys\stat.h> #include <share.h> #include <IO.H> #define INTR 0X0b #define Freq1 400 #define Freq2 10000 #define Data1_add 0x2bc #define Data2_add 0x2bd #define Control_add 0x2bf #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif void interrupt ( *oldhandler)(__CPPARGS); void interrupt handler(__CPPARGS); void init8253(); void install_newtimer(); int main(void) { install_newtimer();//安装中断 init8253(); //初始化 keep(0,_SS+(_SP/16)-_psp); //驻留 return 0; } //安装中断 void install_newtimer() { int zd; disable(); oldhandler = getvect(INTR); setvect(INTR, handler); zd=inportb(0x21); delay(1); outportb(0x21,zd&~(0x08)); enable(); } //终端函数 void interrupt handler(__CPPARGS) { disable(); outportb(0x2b9,0x00);//关125 puts("asdfdfd\n"); outportb(0x20,0x20); outportb(0x2b9,0x01);//开125 enable(); } //初始化 void init8253() { int sendhigh,sendlow; disable(); sendhigh=(Freq1&0xff00)>>8; sendlow=Freq1&0x00ff; outportb(Control_add,0x36); delay(1); outportb(Data1_add,sendlow); delay(1); outportb(Data1_add,sendhigh); delay(1); sendhigh=(Freq2&0xff00)>>8; sendlow=Freq2&0x00ff; outportb(Control_add,0x76); delay(1); outportb(Data2_add,sendlow); delay(1); outportb(Data2_add,sendhigh); delay(1); outportb(0x2b9,0x01);//开125 enable(); } |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |