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

news2026/3/20 1:30:54
一、项目背景与目标在嵌入式系统和微机接口课程中中断驱动的数据采集系统是一个经典的设计案例。本项目使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2428271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…