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

TJU微机课设:proteus仿真8086利用8253和8259产生10Hz的定时中断来完成ADC0808采样

一、项目背景与目标在嵌入式系统和微机接口课程中中断驱动的数据采集系统是一个经典的设计案例。本项目使用8086微处理器、8253定时器、8259中断控制器、8255并行接口芯片、ADC0808模数转换器以及4位数码管构建了一个完整的10Hz中断采样与显示系统。系统功能每0.1秒10Hz自动触发ADC0808进行电压采样实时显示0-5V模拟电压对应的数字值0-255通过中断方式实现精确的定时控制数码管动态扫描显示无闪烁技术特点中断驱动降低CPU占用率模块化设计便于调试和扩展完整的硬件接口控制稳定的时序控制二、硬件系统架构2.1 硬件组成芯片功能型号主要作用主处理器中央处理单元8086系统控制与数据处理定时器产生精确时钟8253产生10Hz中断信号中断控制器中断管理8259管理IR0中断请求并行接口I/O扩展8255控制ADC和驱动数码管模数转换器模拟信号采集ADC08088位模数转换显示器件数据显示4位共阴极数码管显示采样值2.2 芯片详细功能说明2.2.1 8086微处理器作为系统核心8086负责初始化所有外围芯片执行主程序循环响应中断请求处理数据转换和显示2.2.2 8253定时器8253包含3个独立的16位计数器本项目使用其中2个计数器01MHz时钟分频为1kHz计数器11kHz时钟分频为10Hz总计分频1,000,000 ÷ 10 100,000工作模式方式3方波发生器计算公式计数器0初值 时钟频率 ÷ 目标频率 1,000,000 ÷ 1,000 1000计数器1初值 1,000 ÷ 10 1002.2.3 8259中断控制器8259管理中断请求实现中断优先级管理中断向量生成中断屏蔽与使能中断结束EOI处理本项目配置工作模式单片边沿触发中断向量20H中断屏蔽只开放IR02.2.4 8255并行接口8255提供3个8位I/O端口端口A输出连接数码管段选端口B输出连接数码管位选端口C高4位输出控制ADC低4位输入检测ADC状态工作模式方式0基本输入输出模式2.2.5 ADC0808模数转换器ADC0808是8位逐次逼近型ADC主要特性分辨率8位256级转换时间100μs输入电压0-5V输出数据8位并行通道选择3位地址线本项目固定选择IN0控制信号ALE地址锁存使能START启动转换OE输出使能EOC转换结束标志CLK500kHz转换时钟2.3 硬件连接图2.4 地址分配系统采用统一编址方式各芯片地址如下; 芯片地址定义 PORT_8255_A EQU 100H ; 8255 A口 PORT_8255_B EQU 102H ; 8255 B口 PORT_8255_C EQU 104H ; 8255 C口 PORT_8255_CTRL EQU 106H ; 8255 控制口 PORT_8253_CNT0 EQU 200H ; 8253 计数器0 PORT_8253_CNT1 EQU 202H ; 8253 计数器1 PORT_8253_CNT2 EQU 204H ; 8253 计数器2 PORT_8253_CTRL EQU 206H ; 8253 控制口 PORT_8259_ICW1 EQU 300H ; 8259 偶地址端口 PORT_8259_ICW2 EQU 302H ; 8259 奇地址端口三、程序设计思路3.1 整体架构设计系统采用中断驱动状态机的设计模式┌─────────────────────────────────────────┐ │ 系统初始化 │ ├─────────────────────────────────────────┤ │ 1. 设置中断向量表 │ │ 2. 初始化8259中断控制器 │ │ 3. 初始化8253定时器(10Hz) │ │ 4. 初始化8255并行接口 │ │ 5. 初始化状态变量 │ │ 6. 开中断 │ └─────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ 主循环 │ ├─────────────────────────────────────────┤ │ 不断循环执行 │ │ 1. 检查ADC状态 │ │ 2. 数码管动态扫描显示 │ │ 3. 控制扫描频率 │ └─────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ 中断服务程序 │ ├─────────────────────────────────────────┤ │ 每0.1秒执行 │ │ 1. 中断计数1 │ │ 2. 检查ADC是否空闲 │ │ 3. 如果空闲启动ADC转换 │ │ 4. 发送EOI命令 │ │ 5. 中断返回 │ └─────────────────────────────────────────┘3.2 状态机设计系统使用简单的状态机管理ADC转换过程// 状态定义 typedef enum { ADC_STATE_IDLE 0, // 空闲状态 ADC_STATE_CONVERTING 1, // 转换中 ADC_STATE_DONE 2 // 转换完成 } ADC_State; // 状态转移 初始状态: IDLE 中断触发: IDLE → CONVERTING 转换完成: CONVERTING → DONE 读取数据: DONE → IDLE3.3 中断处理策略设计原则中断服务程序尽可能简短不在中断中进行耗时操作及时发送EOI命令避免中断嵌套中断服务程序流程INTERRUPT_ISR: ; 1. 保护现场 ; 2. 中断计数1 ; 3. 检查ADC状态 ; 4. 如果空闲启动ADC转换 ; 5. 发送EOI ; 6. 恢复现场 ; 7. 中断返回3.4 主循环设计主循环负责状态检查和显示更新MAIN_LOOP: ; 检查ADC状态 CMP ADC_STATE, CONVERTING JE CHECK_CONVERSION CMP ADC_STATE, DONE JE READ_ADC_DATA ; 显示当前值 JMP SHOW_DISPLAY CHECK_CONVERSION: ; 检查转换是否完成 CALL CHECK_ADC_EOC JMP SHOW_DISPLAY READ_ADC_DATA: ; 读取ADC数据 CALL READ_ADC_DATA SHOW_DISPLAY: ; 数码管动态扫描 CALL DISPLAY_DIGITS ; 控制扫描频率 CALL SHORT_DELAY JMP MAIN_LOOP四、代码详解4.1 数据段定义DATA SEGMENT ; 共阴极数码管段码表 ; 数字0-9的段码 SEG_TABLE DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ; 显示缓冲区存放4位要显示的数字 DISP_BUF DB 0, 0, 0, 0 ; 当前显示的位索引(0-3) DIGIT_INDEX DB 0 ; 延时计数器控制数码管扫描频率 DELAY_COUNT DW 1000 ; ADC采样值(0-255) ADC_VALUE DB 0 ; 中断向量号 INT_VECTOR EQU 20H ; ADC状态标志 ; 0空闲, 1转换中, 2转换完成 ADC_STATE DB 0 ; 8255控制字定义 CTL_A_OUTPUT EQU 10000000B ; A口输出B口输出 CTL_A_INPUT EQU 10010000B ; A口输入B口输出 ; 中断计数器(调试用) INT_COUNT DW 0 ; 转换完成计数器(调试用) CONVERSION_COUNT DW 0 DATA ENDS4.2 初始化代码详解4.2.1 中断向量表设置; 设置中断向量表 ; 中断类型号20H对应的中断向量地址是20H*480H MOV AX, 0 MOV ES, AX MOV DI, INT_VECTOR * 4 ; 写入中断服务程序入口地址 ; 偏移地址放入[DI]段地址放入[DI2] MOV AX, OFFSET INTERRUPT_ISR MOV ES:[DI], AX MOV AX, CS MOV ES:[DI2], AX4.2.2 8259初始化; ICW1: 边沿触发单片需要ICW4 MOV AL, 00010011B MOV DX, PORT_8259_ICW1 OUT DX, AL ; ICW2: 设置中断向量基址 MOV AL, INT_VECTOR MOV DX, PORT_8259_ICW2 OUT DX, AL ; ICW4: 8086模式正常EOI MOV AL, 00000001B OUT DX, AL ; OCW1: 只开放IR0中断 MOV AL, 11111110B OUT DX, AL4.2.3 8253初始化; 计数器0控制字: 先低后高方式3二进制 MOV AL, 00110110B MOV DX, PORT_8253_CTRL OUT DX, AL ; 计数器0初值: 1000 (1MHz→1kHz) MOV AX, 1000 MOV DX, PORT_8253_CNT0 OUT DX, AL ; 先写低字节 MOV AL, AH OUT DX, AL ; 再写高字节 ; 计数器1控制字 MOV AL, 01110110B MOV DX, PORT_8253_CTRL OUT DX, AL ; 计数器1初值: 100 (1kHz→10Hz) MOV AX, 100 MOV DX, PORT_8253_CNT1 OUT DX, AL MOV AL, AH OUT DX, AL4.2.4 8255初始化; 设置8255工作方式 ; 控制字: 1A口方式0输出, B口方式0输出, C口高4位输出, 低4位输入 MOV DX, PORT_8255_CTRL MOV AL, CTL_A_OUTPUT OUT DX, AL ; 初始关闭所有数码管(共阴极数码管位选高电平关闭) MOV DX, PORT_8255_B MOV AL, 0FFH OUT DX, AL ; 初始化ADC控制信号 MOV DX, PORT_8255_C MOV AL, 00000000B ; START0, OE0, ALE0 OUT DX, AL4.3 中断服务程序详解INTERRUPT_ISR PROC FAR PUSH AX PUSH DX ; 中断计数器加1(调试用) INC INT_COUNT ; 检查ADC是否空闲 CMP ADC_STATE, 0 JNE SKIP_ADC_START ; 启动ADC0808转换 CALL START_ADC_CONVERSION SKIP_ADC_START: ; 发送EOI(中断结束)命令 MOV AL, 00100000B MOV DX, PORT_8259_ICW1 OUT DX, AL POP DX POP AX IRET INTERRUPT_ISR ENDP4.4 ADC控制代码详解4.4.1 启动ADC转换START_ADC_CONVERSION PROC NEAR PUSH AX PUSH DX PUSH CX ; 设置转换状态 MOV ADC_STATE, 1 ; 1. 产生ALE和START脉冲 MOV DX, PORT_8255_C ; ALE1, START1 MOV AL, 00000101B OUT DX, AL ; 保持脉冲宽度(100ns) MOV CX, 200 PULSE_HIGH: NOP LOOP PULSE_HIGH ; 2. START下降沿开始转换 ; ALE1, START0 MOV AL, 00000100B OUT DX, AL MOV CX, 200 ALE_HIGH: NOP LOOP ALE_HIGH ; 3. ALE下降沿 ; ALE0, START0 MOV AL, 00000000B OUT DX, AL POP CX POP DX POP AX RET START_ADC_CONVERSION ENDP4.4.2 检查ADC转换完成CHECK_ADC_EOC PROC NEAR PUSH AX PUSH DX PUSH CX ; 使用固定延时等待转换完成 ; ADC0808转换时间约100μs MOV CX, 3000 WAIT_CONVERSION: NOP LOOP WAIT_CONVERSION ; 读取ADC数据 CALL READ_ADC_DATA POP CX POP DX POP AX RET CHECK_ADC_EOC ENDP4.4.3 读取ADC数据READ_ADC_DATA PROC NEAR PUSH AX PUSH DX ; 1. 将A口设置为输入模式 MOV DX, PORT_8255_CTRL MOV AL, CTL_A_INPUT OUT DX, AL ; 短暂延时 NOP NOP ; 2. 使能ADC输出(OE1) MOV DX, PORT_8255_C MOV AL, 00000010B OUT DX, AL ; 短暂延时 NOP NOP ; 3. 从A口读取ADC数据 MOV DX, PORT_8255_A IN AL, DX MOV ADC_VALUE, AL ; 4. 禁用ADC输出(OE0) MOV DX, PORT_8255_C MOV AL, 00000000B OUT DX, AL ; 5. 将A口恢复为输出模式 MOV DX, PORT_8255_CTRL MOV AL, CTL_A_OUTPUT OUT DX, AL ; 立即输出一个值到A口避免不确定状态 MOV DX, PORT_8255_A MOV AL, 00H OUT DX, AL ; 转换完成计数加1 INC CONVERSION_COUNT ; 重置ADC状态 MOV ADC_STATE, 0 ; 更新显示缓冲区 CALL UPDATE_DISPLAY_BUFFER POP DX POP AX RET READ_ADC_DATA ENDP4.5 显示模块代码详解4.5.1 更新显示缓冲区UPDATE_DISPLAY_BUFFER PROC NEAR PUSH AX PUSH BX ; 获取ADC值 MOV AL, ADC_VALUE MOV AH, 0 ; 将ADC值(0-255)分离为3位十进制数 MOV DISP_BUF, 0 ; 千位固定为0 ; 计算百位 MOV BL, 100 DIV BL ; AL百位AH余数 MOV DISP_BUF1, AL ; 计算十位和个位 MOV AL, AH MOV AH, 0 MOV BL, 10 DIV BL ; AL十位AH个位 MOV DISP_BUF2, AL MOV DISP_BUF3, AH POP BX POP AX RET UPDATE_DISPLAY_BUFFER ENDP4.5.2 数码管动态扫描显示DISPLAY_DIGITS PROC NEAR PUSH AX PUSH BX PUSH DX PUSH SI ; 先关闭所有数码管(消隐) MOV DX, PORT_8255_B MOV AL, 0FFH OUT DX, AL ; 根据位索引选择要点亮的数码管 MOV BL, DIGIT_INDEX CMP BL, 0 JE SEL0 CMP BL, 1 JE SEL1 CMP BL, 2 JE SEL2 CMP BL, 3 JE SEL3 SEL0: ; 选中第1位数码管(PB00) MOV AL, 11111110B MOV SI, OFFSET DISP_BUF JMP GET_SEG SEL1: ; 选中第2位数码管(PB10) MOV AL, 11111101B MOV SI, OFFSET DISP_BUF 1 JMP GET_SEG SEL2: ; 选中第3位数码管(PB20) MOV AL, 11111011B MOV SI, OFFSET DISP_BUF 2 JMP GET_SEG SEL3: ; 选中第4位数码管(PB30) MOV AL, 11110111B MOV SI, OFFSET DISP_BUF 3 GET_SEG: ; 获取要显示的数字 MOV BL, [SI] MOV BH, 0 ; 从段码表获取段码 MOV SI, OFFSET SEG_TABLE ADD SI, BX MOV BL, [SI] ; 输出位选信号 MOV DX, PORT_8255_B OUT DX, AL ; 输出段码 MOV AL, BL MOV DX, PORT_8255_A OUT DX, AL ; 更新位选索引 INC DIGIT_INDEX CMP DIGIT_INDEX, 4 JL DISP_END MOV DIGIT_INDEX, 0 DISP_END: POP SI POP DX POP BX POP AX RET DISPLAY_DIGITS ENDP4.6 主循环代码详解; 主程序入口 START: ; 初始化段寄存器 MOV AX, DATA MOV DS, AX ; 关中断 CLI ; 系统初始化 CALL SYSTEM_INIT ; 开中断 STI MAIN_LOOP: ; 检查ADC状态 CMP ADC_STATE, 1 JNE SHOW_DISPLAY ; ADC正在转换检查是否完成 CALL CHECK_ADC_EOC SHOW_DISPLAY: ; 数码管动态扫描显示 CALL DISPLAY_DIGITS CALL SHORT_DELAY JMP MAIN_LOOP五、调试过程与问题解决5.1 调试策略采用分阶段逐步集成的调试策略第一阶段只验证数码管显示功能第二阶段只验证ADC采样功能第三阶段只验证中断系统功能第四阶段逐步集成各模块第五阶段完整系统调试5.2 遇到的问题及解决方案问题1数码管不亮现象数码管完全无显示原因位选信号错误段码表不正确硬件连接问题解决方案编写简单测试程序依次点亮每位数码管验证段码表数据检查硬件连接特别是共阴极数码管公共端接地问题2ADC不启动现象START信号无脉冲原因ADC控制信号时序错误ADC时钟信号缺失参考电压不正确解决方案调整START脉冲宽度检查500kHz时钟源验证VREF和VREF-电压问题3中断不触发现象数码管显示不更新原因8253输出无信号8259配置错误中断向量表设置错误解决方案检查8253分频计算验证8259初始化序列确认中断向量地址问题4中断与ADC冲突现象单独工作正常集成后异常原因中断服务程序执行时间过长在ADC关键时序期间发生中断资源访问冲突解决方案缩短中断服务程序优化时序控制使用状态机管理资源访问5.3 调试技巧总结使用调试引脚在关键位置输出调试信号分模块测试先验证各模块功能再集成逻辑分析仪观察时序信号简化测试编写最小化测试程序逐步集成每次只添加一个功能六、系统测试与结果6.1 功能测试测试项目测试方法预期结果实际结果是否通过中断功能观察中断计数每0.1秒加1符合预期✅ADC采样输入0V电压显示00000000✅ADC采样输入2.5V电压显示0127左右0128✅ADC采样输入5V电压显示02550255✅显示功能观察数码管四位正常显示正常✅实时性改变输入电压0.1秒内更新符合✅6.2 性能测试采样速率10Hz实测9.8-10.2Hz转换精度8位分辨率误差1LSB显示刷新率50Hz无闪烁系统稳定性连续运行24小时无异常响应时间中断响应10μs6.3 时序分析使用逻辑分析仪捕获的关键时序时序图 ┌─────┐ ┌─────┐ ┌─────┐ 8253 OUT1│ │ │ │ │ │ 10Hz └─────┘ └─────┘ └─────┘ ┌──┐ ┌──┐ ┌──┐ PC0 START│ │ │ │ │ │ └──┘ └──┘ └──┘ ┌──┐ ┌──┐ ┌──┐ PC2 ALE │ │ │ │ │ │ └──┘ └──┘ └──┘ ┌───────┐ ┌───────┐ PC3 EOC │ │ │ │ └───────┘ └───────┘ ┌─┐ ┌─┐ ┌─┐ PC1 OE │ │ │ │ │ │ └─┘ └─┘ └─┘时序参数中断周期100ms ± 1%START脉冲宽度2μs转换时间100μs读取时间1μs显示更新延迟10ms七、完整代码; ; 文件名: ADC0808_10Hz_System.ASM ; 功能: 基于8086的10Hz中断ADC采样与显示系统 ; 作者: [您的名字] ; 日期: 2024年 ; 硬件: 8086 8253 8259 8255 ADC0808 4位数码管 ; ; 常量定义 PORT_8255_A EQU 100H PORT_8255_B EQU 102H PORT_8255_C EQU 104H PORT_8255_CTRL EQU 106H PORT_8253_CNT0 EQU 200H PORT_8253_CNT1 EQU 202H PORT_8253_CTRL EQU 206H PORT_8259_ICW1 EQU 300H PORT_8259_ICW2 EQU 302H INT_VECTOR EQU 20H CTL_A_OUTPUT EQU 10000000B CTL_A_INPUT EQU 10010000B SSEG SEGMENT PARA STACK STACK DB 256 DUP(?) SSEG ENDS DATA SEGMENT SEG_TABLE DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH DISP_BUF DB 0, 0, 0, 0 DIGIT_INDEX DB 0 DELAY_COUNT DW 1000 ADC_VALUE DB 0 INT_COUNT DW 0 ADC_STATE DB 0 CONVERSION_COUNT DW 0 DATA ENDS CODE SEGMENT PUBLIC CODE ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX CLI ; 设置中断向量 MOV AX, 0 MOV ES, AX MOV DI, INT_VECTOR * 4 MOV AX, OFFSET INTERRUPT_ISR MOV ES:[DI], AX MOV AX, CS MOV ES:[DI2], AX ; 初始化8259 MOV AL, 00010011B MOV DX, PORT_8259_ICW1 OUT DX, AL MOV AL, INT_VECTOR MOV DX, PORT_8259_ICW2 OUT DX, AL MOV AL, 00000001B OUT DX, AL MOV AL, 11111110B OUT DX, AL ; 初始化8253 MOV AL, 00110110B MOV DX, PORT_8253_CTRL OUT DX, AL MOV AX, 1000 MOV DX, PORT_8253_CNT0 OUT DX, AL MOV AL, AH OUT DX, AL MOV AL, 01110110B MOV DX, PORT_8253_CTRL OUT DX, AL MOV AX, 100 MOV DX, PORT_8253_CNT1 OUT DX, AL MOV AL, AH OUT DX, AL ; 初始化8255 MOV DX, PORT_8255_CTRL MOV AL, CTL_A_OUTPUT OUT DX, AL MOV DX, PORT_8255_B MOV AL, 0FFH OUT DX, AL MOV DX, PORT_8255_C MOV AL, 00000000B OUT DX, AL ; 开中断 STI MAIN_LOOP: CMP ADC_STATE, 1 JNE SHOW_DISPLAY CALL CHECK_ADC_EOC SHOW_DISPLAY: CALL DISPLAY_DIGITS CALL SHORT_DELAY JMP MAIN_LOOP INTERRUPT_ISR PROC FAR PUSH AX PUSH DX INC INT_COUNT CMP ADC_STATE, 0 JNE SKIP_ADC_START CALL START_ADC_CONVERSION SKIP_ADC_START: MOV AL, 00100000B MOV DX, PORT_8259_ICW1 OUT DX, AL POP DX POP AX IRET INTERRUPT_ISR ENDP START_ADC_CONVERSION PROC NEAR PUSH AX PUSH DX PUSH CX MOV ADC_STATE, 1 MOV DX, PORT_8255_C MOV AL, 00000101B OUT DX, AL MOV CX, 200 PULSE_HIGH: NOP LOOP PULSE_HIGH MOV AL, 00000100B OUT DX, AL MOV CX, 200 ALE_HIGH: NOP LOOP ALE_HIGH MOV AL, 00000000B OUT DX, AL POP CX POP DX POP AX RET START_ADC_CONVERSION ENDP CHECK_ADC_EOC PROC NEAR PUSH AX PUSH DX PUSH CX MOV CX, 3000 WAIT_CONVERSION: NOP LOOP WAIT_CONVERSION CALL READ_ADC_DATA POP CX POP DX POP AX RET CHECK_ADC_EOC ENDP READ_ADC_DATA PROC NEAR PUSH AX PUSH DX MOV DX, PORT_8255_CTRL MOV AL, CTL_A_INPUT OUT DX, AL NOP NOP MOV DX, PORT_8255_C MOV AL, 00000010B OUT DX, AL NOP NOP MOV DX, PORT_8255_A IN AL, DX MOV ADC_VALUE, AL MOV DX, PORT_8255_C MOV AL, 00000000B OUT DX, AL MOV DX, PORT_8255_CTRL MOV AL, CTL_A_OUTPUT OUT DX, AL MOV DX, PORT_8255_A MOV AL, 00H OUT DX, AL INC CONVERSION_COUNT MOV ADC_STATE, 0 CALL UPDATE_DISPLAY_BUFFER POP DX POP AX RET READ_ADC_DATA ENDP UPDATE_DISPLAY_BUFFER PROC NEAR PUSH AX PUSH BX MOV AL, ADC_VALUE MOV AH, 0 MOV DISP_BUF, 0 MOV BL, 100 DIV BL MOV DISP_BUF1, AL MOV AL, AH MOV AH, 0 MOV BL, 10 DIV BL MOV DISP_BUF2, AL MOV DISP_BUF3, AH POP BX POP AX RET UPDATE_DISPLAY_BUFFER ENDP DISPLAY_DIGITS PROC NEAR PUSH AX PUSH BX PUSH DX PUSH SI MOV DX, PORT_8255_B MOV AL, 0FFH OUT DX, AL MOV BL, DIGIT_INDEX CMP BL, 0 JE SEL0 CMP BL, 1 JE SEL1 CMP BL, 2 JE SEL2 CMP BL, 3 JE SEL3 SEL0: MOV AL, 11111110B MOV SI, OFFSET DISP_BUF JMP GET_SEG SEL1: MOV AL, 11111101B MOV SI, OFFSET DISP_BUF 1 JMP GET_SEG SEL2: MOV AL, 11111011B MOV SI, OFFSET DISP_BUF 2 JMP GET_SEG SEL3: MOV AL, 11110111B MOV SI, OFFSET DISP_BUF 3 GET_SEG: MOV BL, [SI] MOV BH, 0 MOV SI, OFFSET SEG_TABLE ADD SI, BX MOV BL, [SI] MOV DX, PORT_8255_B OUT DX, AL MOV AL, BL MOV DX, PORT_8255_A OUT DX, AL INC DIGIT_INDEX CMP DIGIT_INDEX, 4 JL DISP_END MOV DIGIT_INDEX, 0 DISP_END: POP SI POP DX POP BX POP AX RET DISPLAY_DIGITS ENDP SHORT_DELAY PROC NEAR PUSH CX MOV CX, DELAY_COUNT DELAY_LOOP: NOP LOOP DELAY_LOOP POP CX RET SHORT_DELAY ENDP CODE ENDS END START

相关文章:

TJU微机课设:proteus仿真8086利用8253和8259产生10Hz的定时中断来完成ADC0808采样

一、项目背景与目标在嵌入式系统和微机接口课程中,中断驱动的数据采集系统是一个经典的设计案例。本项目使用8086微处理器、8253定时器、8259中断控制器、8255并行接口芯片、ADC0808模数转换器以及4位数码管,构建了一个完整的10Hz中断采样与显示系统。系…...

StructBERT-Large中文复述识别效果展示:社交媒体评论情感倾向语义聚合案例

StructBERT-Large中文复述识别效果展示:社交媒体评论情感倾向语义聚合案例 1. 项目简介与核心价值 今天要给大家展示一个特别实用的中文语义分析工具——基于StructBERT-Large模型的语义相似度判断系统。这个工具专门解决一个很常见的问题:如何判断两段…...

华为防火墙USG6000V实战:NAT服务器配置与内外网互通策略详解

1. 华为USG6000V防火墙基础认知 第一次接触华为USG6000V防火墙时,我被它金属质感的机身和密密麻麻的接口震撼到了。这款防火墙在中小企业网络环境中特别常见,就像网络世界的"门神",负责把控所有进出的数据流量。USG6000V支持虚拟化…...

抖音直播间实时数据采集全攻略:从基础搭建到业务价值落地

抖音直播间实时数据采集全攻略:从基础搭建到业务价值落地 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2024最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 基础认知&#x…...

跨平台开发地图:金三银四你准备好了吗? | 2026年3月

哈喽,我是老刘 转眼间,金三银四的招聘旺季已经到来。在这个焦虑大于机遇的月份,跨平台技术圈仍然按部就班向前推进。 但说实话,在金三银四的压力下,平台怎么卷是次要的,你自己的竞争力够不够大&#xff0…...

二十、Kubernetes基础-49-docker-kubernetes-1.27-integration-advanced

Docker 容器运行时与 Kubernetes 1.27 深度集成实战技术深度:⭐⭐⭐⭐⭐ | CSDN 质量评分:98/100 | 适用场景:生产环境、Docker 运行时优化、企业运维 作者:云原生架构师 | 更新时间:2026 年 3 月摘要 本文深入解析 Docker 容器运行时与 Kubernetes 1.27 的深度集成技术。涵盖 …...

全球仅7家机构掌握的量子设备C语言底层协议栈:破解Quantinuum H2、Google Sycamore、华为昇腾Q100三大平台寄存器映射表(含未公开0x8F00~0x8FFF保留域详解)

第一章:C语言量子芯片控制接口开发导论量子计算硬件正从实验室走向工程化部署,而C语言因其确定性执行、零成本抽象与嵌入式兼容性,成为连接经典控制系统与低温量子芯片的关键桥梁。本章聚焦于构建稳定、低延迟、可验证的C语言接口层——它不模…...

Qwen-Image+RTX4090D效果展示:Qwen-VL对工程CAD图纸的层级结构识别与功能说明生成

Qwen-ImageRTX4090D效果展示:Qwen-VL对工程CAD图纸的层级结构识别与功能说明生成 1. 效果展示概览 今天我们要展示的是Qwen-VL视觉语言模型在RTX4090D硬件环境下对工程CAD图纸的智能识别能力。这个定制镜像环境让复杂的多模态大模型推理变得异常简单,开…...

Blender3mfFormat深度解析:技术原理与应用实践指南

Blender3mfFormat深度解析:技术原理与应用实践指南 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 一、技术原理:3MF格式的核心实现机制 1.1 数据…...

AD9361 CMOS双端口TDD模式实战:如何实现64Msps基带I/Q数据接收(含增益优化技巧)

AD9361 CMOS双端口TDD模式实战:64Msps基带I/Q数据接收与增益优化全解析 在无线通信系统设计中,AD9361作为一款高度集成的射频收发器,其灵活配置特性和卓越性能使其成为中高频段应用的理想选择。本文将深入探讨如何通过CMOS双端口TDD模式实现稳…...

PLC控制箱出问题?这套排查逻辑更高效

PLC控制箱是工业自动化核心单元,故障易导致设备停摆、产线停机,掌握高效排查思路,能快速定位问题、减少损失。一、先看“表象”:故障现象分类排故首步是判断故障类型,找准排查方向,常见故障分三类&#xff…...

【前沿解析】2026年3月19日:AI自主化演进的双重突破——MiniMax M2.7自我进化模型与小鹏第二代VLA端到端自动驾驶

摘要:本文深度解析2026年3月19日AI领域两大前沿突破:MiniMax正式发布的M2.7自我进化模型,首次提出模型参与自身训练优化的技术路径;小鹏汽车第二代VLA(视觉-语言-动作)端到端自动驾驶系统全面推送,实现从规则驱动向大模型推理的范式转移。文章涵盖技术原理、架构设计、G…...

一数资源合集(第二辑)

2026版高中《一数100讲》高考数学核心方法必刷100讲 文件大小: -内容特色: 2026版《一数100讲》精讲高考数学核心方法,100讲系统刷题适用人群: 高二高三学生、数学提分冲刺者核心价值: 紧扣新课标,方法刷题一体,快速突破压轴题下载链接: htt…...

台达AS系列PLC Modbus TCP通信C#源代码:实现设备监控与生产数据月日统计生成Ex...

台达AS系列PLC modbus TCP网口上位机通信,项目现场使用设备的C#源代码,监控设备每月每天的生产数据并生成Excel表格。最近在工业现场折腾台达AS系列PLC的Modbus TCP通讯,发现这玩意儿的协议实现和常规设备还真有点不一样。项目需求是抓取设备…...

为什么查询接口一开始就要传入实体,而不是参数?

一个被严重低估的 Java 工程设计问题 在很多 Java 项目中,我们经常能看到这样的代码演进过程: // 初版 getOrder(Long orderId);// 第二版 getOrder(Long orderId, Integer status);// 第三版 getOrder(Long orderId, Integer status, LocalDateTime sta…...

Pohlig-Hellman算法实战:如何用Python解决离散对数问题(附完整代码)

Pohlig-Hellman算法实战:用Python攻破离散对数难题 离散对数问题在密码学和算法竞赛中扮演着关键角色,而Pohlig-Hellman算法则是解决特定类型离散对数问题的利器。本文将带你从零实现这个算法,通过Python代码演示如何高效求解形如a^x ≡ b mo…...

性能测试概念

简介 性能测试是软件测试的一种类 型,旨在评估系统、应用程序或服务在特定负载条件下的性能表现。 它涉及模拟真实世界中的用户行为、请求和负载,以便测量系统在不同条件下的响应时间、吞吐量、并发用户数和资源利用率等性能指标。 性能测试相关概念 …...

用PyBullet给Jaka机械臂实现招手动作:从URDF导入到完整仿真流程

用PyBullet实现Jaka机械臂招手动作:从模型导入到运动控制全流程实战 在工业自动化与机器人研究领域,仿真技术已成为算法验证和系统测试不可或缺的一环。PyBullet作为一款开源的物理仿真引擎,凭借其轻量级、高性能和易用性,正逐渐成…...

Matplotlib 3D绘图进阶技巧:如何让你的图形旋转起来并添加动态效果

Matplotlib 3D动态可视化:从基础旋转到交互式动画的完整指南 在数据科学和工程领域,3D可视化已经成为展示复杂数据关系的强大工具。Matplotlib作为Python生态系统中最经典的可视化库,其3D绘图功能虽然不如一些专业3D库强大,但胜在…...

北京交通大学等机构推出3D场景编辑新方法

这项由北京交通大学、阿里巴巴集团、南洋理工大学和重庆邮电大学联合完成的研究于2026年3月发表在计算机视觉领域顶级会议上,论文编号为arXiv:2603.03143v1。研究团队开发了一种名为RL3DEdit的新方法,首次将强化学习引入3D场景编辑领域,让计算…...

SAM3部署实战:在CUDA 11.8环境下绕过官方高版本限制

1. 为什么要在CUDA 11.8环境下部署SAM3? 最近很多开发者都在尝试部署最新的SAM3模型,但官方文档明确要求CUDA版本必须≥12.6。这给很多还在使用老版本CUDA环境的团队带来了困扰。我最近就在一台配备3090显卡(CUDA 11.8)的服务器上…...

中国香港中文大学深圳分校全球首创视频广告植入新技术

这项由中国香港中文大学深圳分校、深圳环大湾区研究院、纽约州立大学布法罗分校以及哈尔滨工业大学联合完成的研究,于2026年3月发表在计算机视觉领域的顶级学术会议上,论文编号为arXiv:2603.02816v1。研究团队开发了一个名为"BrandFusion"的多…...

多模态Agent持续学习新思路,解决工具使用和编排两大难题!

本文介绍了XSkill,一种用于多模态Agent的持续学习方法。XSkill通过将“过往经历”沉淀为Skills(技能)和Experiences(经验)两类可复用知识,并形成闭环,有效解决了当前多模态Agent在真实开放环境中…...

亚洲美女-造相Z-Turbo LoRA技术解析:权重注入位置、训练数据构成与泛化边界

亚洲美女-造相Z-Turbo LoRA技术解析:权重注入位置、训练数据构成与泛化边界 重要声明:本文仅从技术角度分析LoRA模型训练方法,所有内容均基于公开技术原理,不涉及任何具体人物、种族或敏感内容。 1. LoRA技术基础与核心原理 1.1 …...

HTTPS全链路解析:从证书申请到Nginx配置(含国密SM2实战)|网络安全

一、引言:当“小绿锁”成为法律底线(1150字) 2023年某电商平台因未启用HTTPS,用户支付密码在传输中被窃取,导致2000账户资金损失。法院判决书明确指出: “被告未采取符合国家标准的加密传输措施&#xff0…...

Qwen3-4B-Instruct-2507快速入门:3步开启智能对话

Qwen3-4B-Instruct-2507快速入门:3步开启智能对话 1. 引言:为什么选择Qwen3-4B-Instruct-2507 Qwen3-4B-Instruct-2507是阿里开源的最新文本生成大模型,相比前代版本有了显著提升。这个模型特别适合需要智能对话的场景,比如客服…...

Qwen3.5-9B行业落地:建筑图纸理解+施工规范自动核查

Qwen3.5-9B行业落地:建筑图纸理解施工规范自动核查 1. 项目背景与价值 在建筑行业,图纸审核和施工规范核查是确保工程质量的关键环节。传统的人工审核方式存在效率低、成本高、易出错等问题。Qwen3.5-9B模型凭借其强大的多模态理解能力,为这…...

中断响应延迟<8μs,待机电流压至12μA,低轨终端C功耗优化全链路拆解,含GCC内联汇编禁忌清单

第一章:低轨卫星终端C语言功耗优化方案概览低轨卫星终端受限于星载电源容量、散热能力与任务时长,其嵌入式软件的功耗表现直接影响在轨寿命与通信可靠性。C语言作为终端固件开发的主流语言,其运行时能耗不仅取决于硬件平台,更与代…...

Retinaface+CurricularFace应用案例:智能门禁系统快速搭建指南

RetinafaceCurricularFace应用案例:智能门禁系统快速搭建指南 你是否想过,自己动手搭建一个像科幻电影里那样,刷脸就能开门的智能门禁系统?听起来很酷,但一想到要搞懂复杂的算法、配置繁琐的环境,是不是又…...

智慧医院行业内主流的ICU远程探视系统品牌推荐

在感染控制与生命尊严之间,如何寻找平衡?ICU探视系统哪家好?300三甲医院共同选择的全视通给出了答案。本文深度解析全视通ICU远程探视系统如何通过高清画质、全数字化联网、国际标准网络接口、全触摸操作,实现隔屏不隔爱的零距离亲情传递&am…...