设计一个8088/8086的微机系统,用于监控报警,具备如下功能: 存储系统要求: 32KB的RAM(6264),16KB的EEPROM(9864); 2系统使用1片8259、1片8253和1片8255实现主要功能: 1台设备监控8个点,设备启动信号为3个时钟周期的脉冲信号,某个点为异常时,输出电平为高,1个异常报警灯;3 系统对监控设备1秒钟检查一次; 如果检查到8点中任意一个异常 (一次只有1个点异常),完成以下操作:(1)将异常信号点以ASCII形式存储在RAM和ROM中,如第2个点异常,记为32H;(2) 报警灯闪烁,1秒灭,1秒亮; 警报解除按键1个,按下后,解除报警灯闪烁。
时间: 2024-03-31 14:31:59 浏览: 154
为了实现上述功能,建议采用以下硬件配置:
1. CPU: 8088/8086微处理器
2. 存储器: 32KB的RAM(6264),16KB的EEPROM(9864)
3. 中断控制器: 1片8259
4. 定时器: 1片8253
5. 并行I/O接口: 1片8255
下面是具体的实现步骤:
1. 系统初始化: 将8259、8253和8255初始化为合适的状态,设置端口地址及相应的中断向量。
2. 监控设备连接: 将8个监控点连接到8255的8个输入端口,将异常报警灯连接到8255的一个输出端口。
3. 监控程序: 设计一个循环程序,每秒钟检查一次所有监控点的状态。如果检测到任意一个点异常,将该点的编号以ASCII码的形式存储在RAM和EEPROM中。
4. 报警程序: 如果检测到异常,启动一个报警程序,该程序将报警灯设置为闪烁状态,每隔1秒钟改变一次灯的状态。同时,程序还要等待按键输入,如果检测到按键按下,则解除报警灯的闪烁状态。
5. 中断服务程序: 为8253和8259编写相应的中断服务程序,处理计时器和中断请求。
以上是一个基本的8088/8086微机系统的监控报警功能实现方案。具体实现过程中,还需要考虑硬件电路和软件程序的详细设计。
相关问题
设计一个8088/8086的微机系统,用于监控报警,具备如下功能: 存储系统要求:32KB的RAM(6264),16KB的EEPROM(9864); 系统使用1片8259、1片8253和1片8255实现主要功能; 1台设备监控8个点,设备启动信号为3个时钟周期的脉冲信号,某个点为异常时,输出电平为高,1个异常报警灯; 系统对监控设备1秒钟检查一次; 如果检查到8点中任意一个异常(一次只有1个点异常),完成以下操作: (1)将异常信号点以ASCII形式存储在RAM和ROM中,如第2个点异常,记为32H; (2)报警灯闪烁,1秒灭,1秒亮; 警报解除按键1个,按下后,解除报警灯闪烁。
要设计一个8088/8086的微机系统,用于监控报警,具备如上述功能,可以按照以下步骤进行设计:
硬件设计:
1. 确定系统的功能和性能要求,选择合适的硬件和软件。
2. 确定存储器要求为32KB的RAM(6264)和16KB的EEPROM(9864),进行存储器电路设计。
3. 选择8259、8253和8255芯片,进行接口电路设计。
4. 设计设备监控电路,包括8个点的监控电路和异常报警灯的电路。
5. 设计按键电路,用于实现警报解除功能。
6. 进行电路原理图绘制和PCB布局设计。
7. 完成硬件电路制作,进行调试和测试。
软件设计:
1. 选择操作系统,用于管理硬件资源和执行应用程序。
2. 编写监控报警程序,用于检测环境变化并发出报警信号。
3. 编写中断处理程序,用于响应外部中断信号。
4. 编写定时器中断处理程序,用于定时执行任务。
5. 编写按键中断处理程序,用于实现警报解除功能。
6. 编写存储异常信号点的程序,将异常信号点以ASCII形式存储在RAM和EEPROM中。
7. 编写控制异常报警灯的程序,实现报警灯闪烁,1秒灭,1秒亮。
8. 进行程序编译、下载和调试。
系统测试:
1. 将系统安装在需要监控报警的地方,并进行实际测试和使用。
2. 检查系统是否能够按照要求检测环境变化并发出报警信号。
3. 检查系统是否能够按照要求存储异常信号点并控制异常报警灯。
4. 检查系统是否能够按照要求实现警报解除功能。
5. 对系统进行全面测试和调试,确保系统正常工作。
设计一个8088/8086的微机系统并写出微机代码,用于监控报警,具备如下功能: 存储系统要求: 32KB的RAM(6264),16KB的EEPROM(9864); 2系统使用1片8259、1片8253和1片8255实现主要功能: 1台设备监控8个点,设备启动信号为3个时钟周期的脉冲信号,某个点为异常时,输出电平为高,1个异常报警灯;3 系统对监控设备1秒钟检查一次; 如果检查到8点中任意一个异常 (一次只有1个点异常),完成以下操作:(1)将异常信号点以ASCII形式存储在RAM和ROM中,如第2个点异常,记为32H;(2) 报警灯闪烁,1秒灭,1秒亮; 警报解除按键1个,按下后,解除报警灯闪烁。
这是一个相当复杂的问题,需要考虑硬件和软件两个方面。下面是一个简单的设计和代码实现。
硬件设计:
1. 主板采用8088/8086微处理器,具有32KB的RAM(6264)和16KB的EEPROM(9864)。
2. 使用1片8259芯片进行中断控制,1片8253芯片进行定时器控制,1片8255芯片进行输入输出控制。
3. 设备监控8个点,使用3个时钟周期的脉冲信号启动,如果任意一个点异常,输出电平为高,触发异常报警灯。
4. 系统每秒钟检查一次监控设备,如果检测到任意一个异常点,采取以下操作。
5. 将异常信号点以ASCII形式存储在RAM和ROM中,如第2个点异常,记为32H。
6. 报警灯闪烁,1秒灭,1秒亮。
7. 设计一个按键,用于解除报警灯闪烁。
软件设计:
1. 初始化系统,包括RAM和ROM的初始化,8259、8253和8255的初始化,以及定时器的设置。
2. 设计一个中断服务程序,用于处理异常报警和按键中断。
3. 设计一个定时器中断服务程序,用于每秒钟检查监控设备。
4. 在主程序中,使用循环语句不断地检查RAM中存储的异常信号点,如果有异常信号点,触发报警灯闪烁。
5. 在按键中断服务程序中,解除报警灯闪烁。
下面是一个简单的代码实现,仅供参考。
```
; 定义RAM和ROM的起始地址
RAM_START equ 0h
ROM_START equ 8000h
; 定义中断服务程序入口地址
INT_VECTOR equ 0h
; 定义8259、8253和8255的端口地址
INTERRUPT_CTRL equ 20h
TIMER_CTRL equ 40h
IO_CTRL equ 60h
; 定义监控设备端口地址和异常报警灯端口地址
DEVICE_PORT equ IO_CTRL+0
ALARM_PORT equ IO_CTRL+1
; 定义异常报警灯的闪烁时间
BLINK_TIME equ 500 ; 单位为毫秒
org INT_VECTOR ; 中断服务程序入口地址
INTERRUPT_PROC: ; 中断服务程序
; 处理异常报警
cmp byte ptr [RAM_START], 0 ; 如果RAM中有异常信号点
jz KEY_INT ; 跳转到按键中断服务程序
; 触发报警灯闪烁
mov al, 1 ; 将1写入异常报警灯端口
out ALARM_PORT, al ; 异常报警灯亮起
mov cx, BLINK_TIME ; 等待一段时间
call DELAY
mov al, 0 ; 将0写入异常报警灯端口
out ALARM_PORT, al ; 异常报警灯熄灭
mov cx, BLINK_TIME ; 等待一段时间
call DELAY
jmp KEY_INT ; 跳转到按键中断服务程序
KEY_INT: ; 按键中断服务程序
; 处理解除报警
mov al, 0 ; 将0写入异常报警灯端口
out ALARM_PORT, al ; 异常报警灯熄灭
ret ; 返回主程序
DELAY: ; 等待一段时间的子程序
push cx ; 保存cx寄存器
push dx ; 保存dx寄存器
mov dx, 3 ; 设置dx寄存器的值
DELAY_LOOP:
mov cx, 1000 ; 设置cx寄存器的值
DELAY_LOOP1:
loop DELAY_LOOP1 ; 循环等待
dec dx ; dx寄存器减1
jnz DELAY_LOOP ; 如果dx寄存器不为0,继续等待
pop dx ; 恢复dx寄存器
pop cx ; 恢复cx寄存器
ret ; 返回主程序
MAIN: ; 主程序
; 初始化RAM和ROM
mov ax, RAM_START ; 设置ax寄存器的值
mov es, ax ; 设置es寄存器的值
xor di, di ; 设置di寄存器的值
mov cx, 8000h ; 设置cx寄存器的值
mov al, 0 ; 设置al寄存器的值
rep stosb ; 清空RAM
mov ax, ROM_START ; 设置ax寄存器的值
mov es, ax ; 设置es寄存器的值
xor di, di ; 设置di寄存器的值
mov cx, 4000h ; 设置cx寄存器的值
mov al, 0 ; 设置al寄存器的值
rep stosb ; 清空ROM
; 初始化8259、8253和8255
mov al, 13h ; 设置8259的端口A
out INTERRUPT_CTRL+1, al
mov al, 90h ; 设置8259的端口B
out INTERRUPT_CTRL+1, al
mov al, 34h ; 设置8253的控制字
out TIMER_CTRL, al
mov al, 35h ; 设置8253的计数器初值
out TIMER_CTRL+3, al
mov al, 4Eh ; 设置8253的计数器次值
out TIMER_CTRL+3, al
mov al, 80h ; 设置8255的控制字
out IO_CTRL+2, al
; 设置定时器中断
cli ; 关中断
mov al, 34h ; 设置8253的控制字
out TIMER_CTRL, al
mov al, 35h ; 设置8253的计数器初值
out TIMER_CTRL+3, al
mov al, 4Eh ; 设置8253的计数器次值
out TIMER_CTRL+3, al
mov al, 0Bh ; 设置8259的端口A
out INTERRUPT_CTRL+1, al
mov al, 1 ; 设置8259的端口B
out INTERRUPT_CTRL+1, al
sti ; 开中断
; 循环检查监控设备
LOOP:
mov al, [DEVICE_PORT] ; 读取监控设备的输入电平
and al, 0FFh ; 将读取到的电平值转换为字节
cmp al, 0FFh ; 判断是否有异常信号点
jz LOOP ; 如果没有异常信号点,继续循环
; 存储异常信号点
mov byte ptr [RAM_START], al ; 存储到RAM
mov byte ptr es:[DI], al ; 存储到ROM
inc di ; 更新DI指针
mov byte ptr es:[DI], 0 ; 存储到ROM
inc di ; 更新DI指针
; 触发报警灯闪烁
int 08h ; 触发中断服务程序
jmp LOOP ; 继续循环
ret ; 返回操作系统
```
阅读全文