当前位置: 首页 > news >正文

Prj10--8088单板机C语言8259测试(1)

1.原理图

2.Deepseek示例代码

#include <dos.h>
#include <conio.h>
#include <stdio.h>#define PIC1_CMD  0x400   // 命令端口 (A0=0)
#define PIC1_DATA 0x401   // 数据端口 (A0=1)volatile int int_count = 0;  // 中断计数器
void interrupt (*old_isr)(void);  // 原中断向量// 中断服务程序
void interrupt new_isr(void) {int_count++;  // 增加中断计数// 显示中断信息printf("\nIRQ0 Triggered! Count: %d", int_count);// 发送EOI命令outportb(PIC1_CMD, 0x20);
}// 初始化8259
void init_8259(void) {// ICW1: 边沿触发 | 单片 | 需要ICW4outportb(PIC1_CMD, 0x13);// ICW2: 中断向量基址=20houtportb(PIC1_DATA, 0x20);// ICW4: 8086模式 | 正常EOIoutportb(PIC1_DATA, 0x01);// OCW1: 只允许IR0中断 (11111110b)outportb(PIC1_DATA, 0xFE);
}int main(void) {clrscr();printf("8259 Test Running. Press ESC to exit...\n");// 保存原中断向量 (INT 20h)old_isr = getvect(0x20);// 设置新中断向量setvect(0x20, new_isr);// 初始化8259init_8259();// 启用中断enable();// 主循环while(!kbhit() && int_count < 10) {// 等待中断或按键}// 检查是否按ESC退出if(kbhit() && getch() == 0x1B) {printf("\nESC pressed. ");}// 恢复设置disable();setvect(0x20, old_isr);// 屏蔽所有中断outportb(PIC1_DATA, 0xFF);printf("\nProgram terminated. Total interrupts: %d", int_count);return 0;
}

 

 

相关文章:

  • 服务器被攻击了怎么办
  • Java-IO流之字节输入流详解
  • AJ-Report
  • android NDK 的 -> 是什么意思
  • 【开源工具】Python+PyQt5打造智能桌面单词记忆工具:悬浮窗+热键切换+自定义词库
  • 使用 Golang `testing/quick` 包进行高效随机测试的实战指南
  • GitHub 趋势日报 (2025年06月02日)
  • Splitting Items
  • Ubuntu22.04 安装 Miniconda3
  • WINUI——Magewell视频捕捉开发手记
  • 【数据库】安全性
  • 深入解析 Java 中的 synchronized:从使用到底层原理的全面详解
  • 基于Matlab实现LDA算法
  • Java求职者面试:Spring、Spring Boot、Spring MVC与MyBatis技术深度解析
  • 使用glide 同步获取图片
  • C# CallerMemberName特性
  • 功能管理:基于 ABP 的 Feature Management 实现动态开关
  • docker中,容器时间和宿机主机时间不一致问题
  • SpringBoot项目打jar包自定义名称完全指南
  • 02 C语言程序设计之导言
  • 网页设计怎么建立网站/网络运营培训哪里有学校
  • 中国建设网建设通官方网站/各网站收录
  • 500人在线网站建设配置/搜索广告是什么
  • 自己做图片的网站/seo网站怎么优化
  • 07年做网站/电脑优化用什么软件好
  • 泰兴网站建设开发/nba总得分排行榜最新