计算机接口(部分实验)

news2025/2/24 6:30:30
;实验三:
;*******************************;
;* 8255方式0的C口输入,A口输出  *;
;*******************************;
io8255a        equ 288h
io8255c        equ 28ah
io8255        equ 28bh

code   segment
      assume cs:code
start:  mov dx, 28bH       ;设8255为C口输入,A口输出;控制端口地址
      mov al,8bh
      out dx,al
inout:  mov dx, io8255c             ;从C口输入一数据
      in al,dx
      mov dx,io8255a             ;从A口输出刚才自C口
      out dx,al               ;所输入的数据
      mov dl,0ffh                ;判断是否有按键
      mov ah,06h
      int 21h
      jz inout                ;若无,则继续自C口输入,A口输出
      mov ax,4c00h              ;否则返回
      int 21h
code   ends
      end start

;实验九:
DATA            SEGMENT
IO8254_0        EQU     280H
IO8254_K        EQU     283H
DATA            ENDS
CODE            SEGMENT
                  ASSUME  CS:CODE,DS:DATA
START:          MOV       AX,DATA
                MOV       DS,AX
                MOV       AL, 14H      ;设置8254通道0为工作方式2,二进制计数
                MOV       DX, IO8254_K 
                OUT       DX,AL
                MOV       DX,IO8254_0  ;送计数初值为0FH
                MOV       AL, 0FH
                OUT       DX,AL
LLL:            IN        AL,DX        ;读计数初值
                CALL      DISP         ;调显示子程序
                PUSH      DX  
                MOV       AH,06H 
                MOV       DL,0FFH
                INT       21H
                POP       DX
                JZ        LLL
                MOV       AX,4C00H     ;退出
                INT       21H
DISP            PROC      NEAR         ;显示子程序
                PUSH      DX
                AND       AL,0fh       ;首先取低四位
                MOV       DL,AL
                CMP       DL, 9         ;判断是否<=9
                JLE       NUM          ;若是则为'0'-'9',ASCII码加30H
                ADD       DL,7         ;否则为'A'-'F',ASCII码加37H
NUM:            ADD       DL,30H
                MOV       AH,02H       ;显示
                INT       21H
                MOV       DL,0dh       ;加回车符
                INT       21H
                MOV       DL,0ah      ;加换行符
                INT       21H
                POP       DX
                RET                    ;子程序返回
DISP            ENDP
CODE            ENDS
                END       START



;************************;
;*8251串行通讯(自发自收)*;
;************************;
data segment
 io8253a    equ 280h
 io8253b    equ 283h
 io8251a    equ 2b8h
 io8251b    equ 2b9h
 mes1 db 'you can press a key on the keybord!',0dh,0ah,24h
 mes2 dd  mes1
data ends
code segment
   assume cs:code,ds:data
start:      mov ax,data
      mov ds,ax
      mov dx,283h     ;设置8253计数器0工作方式
      mov al,16h
      out dx,al
      mov dx,280h     ;给8253计数器0送初值
      mov al,52
      out dx,al
      mov dx,2b9h     ;初始化8251
      xor al,al
      mov cx,03     ;向8251控制端口送3个0
 delay:     call out1
      loop delay
      mov al,40h     ;向8251控制端口送40H,使其复位
      call out1
      mov al,4eh     ;设置为1个停止位,8个数据位,波特率因子为16
      call out1
      mov al,27h     ;向8251送控制字允许其发送和接收
      call out1
      lds dx,mes2     ;显示提示信
      mov ah,09
      int 21h
waiti:   mov dx,2b9h
     in al,dx
     test al,01     ;发送是否准备好
     jz waiti
     mov ah,01         ;是,从键盘上读一字符
     int 21h
     cmp al,27         ;若为ESC,结束
     jz exit
     mov dx,io8251a
     inc al
     out dx,al         ;发送
     mov cx,40h
s51:       loop s51          ;延时
next:      mov dx,io8251b
     in al,dx
     test al,02     ;检查接收是否准备好
     jz next           ;没有,等待
     mov dx,io8251a
     in al,dx          ;准备好,接收
     mov dl,al
     mov ah,02         ;将接收到的字符显示在屏幕上
     int 21h
     jmp waiti
exit:      mov ah,4ch        ;退出
     int 21h
out1 proc near       ;向外发送一字节的子程序
      out  dx,al
      push cx
      mov  cx,40h
gg:       loop gg           ;延时
      pop  cx
      ret
out1 endp
code ends
end start

;*******************************;
;*     DMA传送实验(输入)     *;
;*******************************;

data segment
indata1 db 8 dup(30h),0dh,0ah,24h ;前面8个30h,然后是0dh 0ah 和24h
data ends
extra segment at 0d400h
indata2 db 11 dup(?)           ;开辟11个字节的内存区
extra ends
code segment
assume cs:code,ds:data,es:extra
start:
           mov ax,data
           mov ds,ax
        mov ax,extra
        mov es,ax
        lea si,indata1
        lea di,indata2
        cld
        mov cx,11
        rep movsb
        mov ax,extra
        mov ds,ax
        mov al,00
        out 1ch,al            ;清字节指针
        mov al,49h          ;写方式字
        out 1bh,al
        mov al,0dh            ;置地址页面寄存器
        out 83h,al
        mov al,00
        out 12h,al            ;写入基地址的低十六位
        mov al,40h
        out 12h,al
        mov ax,7              ;写入传送的8个字节数
        out 13h,al            ;先写低字节
        mov al,ah
        out 13h,al            ;后写高字节
        mov al,01             ;清通道屏蔽
        out 1ah,al            ;启动DMA
sss:    lea dx,indata2
lll:    mov ah,09
        int 21h
        mov ah,1
        int 16h
        je sss
exit:   mov ah,4ch
        int 21h
        code ends
        end start

数字电子时钟

http://www.doczj.com/doc/063226991-5.html

http://www.doczj.com/doc/268944014-13.html

红绿灯

# 8086-by-protues
基于8255,8259,8253的8086简易红绿灯系统
仿真实现结果描述
1)A通道的绿色数码管和B通道的红色数码管从5开始显示数字,B通道的红灯和A通道的绿灯同时点亮5秒钟,数码管显示的数字每秒减一。
2)A通道的绿色数码管和B通道的红色数码管显示的数字变为0后,A通道的蓝色数码管和B通道的红色数码管从3开始显示数字,此时A通道的黄灯亮,B通道持续红灯,持续三秒,数码管显示的数字每秒减一。
3)A通道的黄色数码管和B通道的红色数码管显示的数字变为0后,A通道的红色数码管和B通道的绿色数码管从5开始显示数字,此时A通道的红灯亮, B通道变为绿灯,持续5S,每秒数码管显示的数字减一。
5)A通道的红色数码管和B通道的绿色数码管显示的数字变为0后,A通道的红色数码管和B通道的黄色数码管从3开始显示数字,此时A通道的红灯亮,B通道黄灯亮,持续三秒,数码管显示的数字每秒减一。
6)A通道的红色数码管和B通道的黄色数码管显示的数字变为0后,又转去执行1),重复执行。
7)当按下INT6按钮两次时,所有方向的信号灯都变为红色,所有方向的红色数码管从5开始显示数字,每秒减一。当显示的数字变为0后,红绿灯恢复中断前的状态,继续执行。
8)当按下开关时,能自动从紧急状态中退出,恢复到原来的信号灯状态继续运行。


CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA,SS:STACK
ORG 100H
START:
        ; Write your code here
	MOV AX,DATA
	MOV DS,AX
	MOV AX,STACK
	MOV SS,AX
	MOV AX,TOP
	MOV SP,AX
	CLI
	;中断向量
	PUSH DS
	MOV AX,0
	MOV DS,AX
	
	MOV BX,152
	MOV AX,OFFSET INT6
	MOV [BX],AX
	MOV AX,0
	MOV [BX+2],AX
	
	MOV BX,156
	MOV AX,OFFSET INT7
	MOV [BX],AX
	MOV AX,0
	MOV [BX+2],AX
	POP DS
	
	;8259初始化
	MOV DX,CS8259A
	MOV AL,ICW1
	OUT DX,AL
	MOV DX,CS8259B
	MOV AL,ICW2
	OUT DX,AL
	MOV AL,ICW4
	OUT DX,AL
	MOV AL,OCW1
	OUT DX,AL
	STI
	;8255—1
	MOV AL,80H
	MOV DX,CT_PORT
	OUT DX,AL
	;8255-2
	MOV AL,80H
	MOV DX,CT_PORT2
	OUT DX,AL
	;8255-3
	MOV AL,10000010B
	MOV DX,CT_PORT3
	OUT DX,AL
	;8253
	MOV AL,00110110B;CNT0
	MOV DX,CTL
	OUT DX,AL
	MOV AX,1000
	MOV DX,CNT0
	OUT DX,AL
	MOV AL,AH
	OUT DX,AL
	MOV AL,01110110B;CNT1
	MOV DX,CTL
	OUT DX,AL
	MOV AX,1000
	MOV DX,CNT1
	OUT DX,AL
	MOV AL,AH
	OUT DX,AL
	MOV AL,10010100B;CNT2
	MOV DX,CTL
	OUT DX,AL
	MOV AL,2
	MOV DX,CNT2
	OUT DX,AL
	
	MOV SI,1
ENDLESS:
	NOP
	STI

	;MOV CX,6
	JMP ENDLESS
		 

INT6:	 ;中断服务
	 PUSH AX
	 PUSH BX
	 PUSH CX
	 PUSH DX
	 STI
	 MOV DX,CTL
	 MOV AL,01001100B
	 OUT DX,AL
	 ;MOV DX,CT_PORT
	 ;MOV AL,10000000B
	 ;OUT DX,AL
	 MOV DX,A_PORT
	 MOV AL,00001001B
	 OUT DX,AL
	 MOV CX,6
NEXT6:	 
	 MOV DX,B_PORT3
	 IN AL,DX
	 CMP AL,10000000B
	 JBE EX
	 LEA BX,BLOCK
	 ;清零
	 MOV AL,[BX]
	 MOV DX,B_PORT
	 OUT DX,AL
	 MOV DX,C_PORT
	 OUT DX,AL
	 MOV DX,B_PORT2
	 OUT DX,AL
	 MOV DX,A_PORT2
	 OUT DX,AL
	 ;
	 MOV AL,CL
	 SUB AL,1
	 XLAT
	 MOV DX,C_PORT2
	 OUT DX,AL
	 MOV DX,A_PORT3
	 OUT DX,AL
	 CALL DELAY
	 LOOP NEXT6	 
EX:
	 LEA BX,BLOCK
	 MOV AL,[BX]
	 MOV DX,C_PORT2
	 OUT DX,AL
	  MOV DX,A_PORT3
	 OUT DX,AL
	 MOV AL,20H
	 MOV DX,CS8259A
	 OUT DX,AL
	 CLI
	 POP DX
	 POP CX
	 POP BX
	 POP AX
	 ;恢复红绿灯
	MOV AL,00110110B;CNT0
	MOV DX,CTL
	OUT DX,AL
	MOV AX,1000
	MOV DX,CNT0
	OUT DX,AL
	MOV AL,AH
	OUT DX,AL
	MOV AL,01110110B;CNT1
	MOV DX,CTL
	OUT DX,AL
	MOV AX,1000
	MOV DX,CNT1
	OUT DX,AL
	MOV AL,AH
	OUT DX,AL
	 STI
	 IRET

INT7:    CLI;中断服务程序
	 PUSH AX
	 PUSH BX
	 PUSH CX
	 PUSH DX
	 MOV CX,FLAG
	 CMP CX,0
	 JG A1
	 MOV FLAG,20
	 
A1:	 ;A绿 B红
	DEC FLAG
	CMP CX,10
	JB B1
        SUB CX,10
	CMP CX,3
	JBE A2
	MOV AL,00001010B
	MOV DX,A_PORT
	OUT DX,AL
	MOV AL,CL
	SUB AL,4
	LEA BX,BLOCK
	XLAT
	MOV DX,B_PORT
	OUT DX,AL
	MOV DX,C_PORT2
	OUT DX,AL
	JMP EXIT
	
A2:	;A黄 B红
	MOV AL,00001100B
	MOV DX,A_PORT	
	OUT DX,AL	
        MOV AL,CL
	LEA BX,BLOCK
	XLAT
	MOV DX,C_PORT
	OUT DX,AL
	MOV DX,C_PORT2
	OUT DX,AL
	JMP EXIT
	
B1:	;A红 B绿
	CMP CX,3
	JBE B2
	MOV AL,00010001B
	MOV DX,A_PORT	
	OUT DX,AL
	MOV AL,CL
	SUB AL,4
	LEA BX,BLOCK
	XLAT
	MOV DX,A_PORT3
	OUT DX,AL
	MOV DX,A_PORT2
	OUT DX,AL
	JMP EXIT
	
B2:	;A红 B黄
	MOV AL,00100001B
	MOV DX,A_PORT	
	OUT DX,AL	
	MOV AL,CL
	LEA BX,BLOCK
	XLAT
	MOV DX,A_PORT3
	OUT DX,AL
	MOV DX,B_PORT2
	OUT DX,AL
	 
EXIT:	 MOV DX,CS8259A
	 MOV AL,20H
	 OUT DX,AL
	 CLI
	 POP DX
	 POP CX
	 POP BX
	 POP AX
	 STI
	 IRET

	
DELAY PROC
	 PUSH CX
	 MOV CX,0
	 LOOP $
	 LOOP $
	 LOOP $
	 MOV CX,15000
	 LOOP $
	 POP CX
	 RET
DELAY ENDP

CODE    ENDS
DATA SEGMENT
	 ;8255-1
	 A_PORT EQU 0A000H;Y2
	 B_PORT EQU 0A002H
	 C_PORT EQU 0A004H
	 CT_PORT EQU 0A006H
	 ;8255-2
	 A_PORT2 EQU 9000H;Y1
	 B_PORT2 EQU 9002H
	 C_PORT2 EQU 9004H
	 CT_PORT2 EQU 9006H
	 ;8255-3
	 A_PORT3 EQU 0C000H;Y4
	 B_PORT3 EQU 0C002H
	 C_PORT3 EQU 0C004H
	 CT_PORT3 EQU 0C006H
	 ;8259
	 CS8259A EQU 8000H;Y0
	 CS8259B EQU 8002H
	 ICW1 EQU 00010011B ;边沿触发,单片,需要ICW4
	 ICW2 EQU 00100000B ;中断向量地址20H
	 ICW4 EQU 00000001B ;非特殊全嵌套方式,非缓冲方式,非自动EOI,8086
	 OCW1 EQU 00111111B ;允许6,7中断请求
	 ;8253
	 CNT0 EQU 0B000H;Y3
	 CNT1 EQU 0B002H
	 CNT2 EQU 0B004H
	 CTL EQU 0B006H
	 FLAG DW 20
	 TIME DW 5
	 BLOCK DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H,77H,7CH,39H,5EH,79H,71H
DATA ENDS
STACK SEGMENT
	 STA DB 512 DUP(0FFH)
	 TOP EQU $-STA
STACK ENDS
        END START

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

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

相关文章

Vue3 项目实例(二)vite.config.ts的配置与axios安装

一、vite.config.ts的配置 1、对相对路径的处理&#xff08;&#xff09; import { defineConfig } from vite import vue from vitejs/plugin-vue // vite 提供node核心对象path import path from path // https://vitejs.dev/config/ export default defineConfig({plugins…

FPGA高端项目:解码索尼IMX327 MIPI相机+2路视频融合叠加,提供开发板+工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理HLS多路视频融合叠加图像缓存HDMI输出工程…

数字化赋能乡村:开启乡村发展新纪元

随着信息技术的迅猛发展和数字化浪潮的席卷&#xff0c;乡村发展正迎来前所未有的机遇与挑战。数字化赋能乡村&#xff0c;不仅是推动农业现代化、提升农村治理水平的必由之路&#xff0c;更是开启乡村发展新纪元的关键所在。本文将围绕数字化赋能乡村这一主题&#xff0c;探讨…

【React】React知识要点记录

描述UI 万物皆组件 为什么多个 JSX 标签需要被一个父元素包裹&#xff1f; 切勿将数字放在 && 左侧 React 中为什么需要 key&#xff1f; React 为何侧重于纯函数? 渲染树 模块依赖树 添加交互 React如何传递事件处理函数&#xff1f; React 如何知道返回哪个 sta…

带你了解自动驾驶中的功能安全

谈一谈自动驾驶中的功能安全 附赠自动驾驶学习资料和量产经验&#xff1a;链接 一 概述 汽车涉及到人的生命财产安全&#xff0c;谈汽车首先要谈的就是安全。目前自动驾驶的安全主要分为三大块&#xff1a;功能安全&#xff0c;网络&#xff08;信息&#xff09;安全&#xf…

阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…

自动驾驶_交通标志识别:各目标检测算法评测

自动驾驶|交通标志识别&#xff1a;各目标检测算法评测 论文题目&#xff1a;Evaluation of Deep Neural Networks for traffic sign detection systems 开源代码&#xff1a;https://github.com/aarcosg/traffic-sign-detection 附赠自动驾驶学习资料和量产经验&#xff1a;…

【好书推荐-第十四期】《 互联网大厂晋升指南:从P5到P9的升级攻略》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

【Linux】Ubuntu 压缩与解压缩

首先在Windows下安装7Zip压缩软件&#xff0c;以便于可以生成 .tar 和 .bz2 的压缩格式的文件。例如新建一个test文件夹&#xff0c;操作后如下。 gzip 压缩工具&#xff1a;负责 .gz 格式的文件的压缩和解压缩&#xff0c;gzip --help 查看使用帮助&#xff1b; 压缩文件&…

【Android】图解View的工作流程原理

文章目录 入口DecorView如何加载到Window中MeasureSpec MeasureView的测量ViewGroup的测量 LayoutView的layout() Draw1、绘制背景3、绘制View内容4、绘制子View6、绘制装饰 入口 DecorView如何加载到Window中 MeasureSpec 该类是View的内部类&#xff0c;封装View的规格尺寸…

下一个电商风口会是什么呢?揭秘电商新蓝海,我来告诉你答案!

大家好&#xff0c;我是电商花花。 直播电商还能持续多久呢&#xff1f; 这个电商项目你肯定没听过&#xff0c;叫视频号小店&#xff0c;只有电商老炮才知道&#xff0c;这是2024年乃至今后3年的风口。 我做电商这么多年&#xff0c;在视频号小店刚出台就开始研究视频号&am…

IDEA删除块注释(文档注释)/**

1. 问题缘由 在使用java写LeetCode的时候&#xff0c;有些题会有一些封装好的类&#xff0c;在本地编写代码的时候&#xff0c;如果没有定义好这些类&#xff0c;就会爆红&#xff0c;看着很难受&#xff0c;此时可以把官方定义好的类拿过来&#xff0c;但是这些类是有块注释的…

电商-广告投放效果分析(KMeans聚类、数据分析-pyhton数据分析

电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09; 文章目录 电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09;项目介绍数据数据维度概况数据13个维度介绍 导入库&#xff0c;加载数据数据审查相关性分析数据处理建立模型聚类结果特征分析…

基于单片机电容介电常数测量显示系统设计

**单片机设计介绍&#xff0c;基于单片机电容介电常数测量显示系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机电容介电常数测量显示系统的设计&#xff0c;是一个集成了电子技术、单片机编程、电容测量以及显…

uni-app如何实现高性能

这篇文章主要讲解uni-app如何实现高性能的问题&#xff1f; 什么是uni-app&#xff1f; 简单说一下什么是uni-app&#xff0c;uni-app是继承自vue.js&#xff0c;对vue做了轻度定制&#xff0c;并且实现了完整的组件化开发&#xff0c;并且支持多端发布的一种架构&#xff0c…

【Python】 小顶堆:困难 Leetcode 23. 合并 K 个升序链表 -- Python中heapq对于自定义数据类型的比较

描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 代码 代码1 由于可能存在相同…

HTML——5.表单、框架、颜色

一、表单 HTML 表单用于在网页中收集用户输入的数据&#xff0c;例如登录信息、搜索查询等。HTML 提供了一系列的表单元素&#xff0c;允许用户输入文本、选择选项、提交数据等。 <!DOCTYPE html> <html lang"en"> <head> <meta charset&q…

我的系统设计方法论

上一篇文章简述了我的日常需求分析方法&#xff0c;需求分析完成之后就进入系统设计阶段&#xff0c;真正的工时估算和开发测试计划&#xff0c;都是在做了一定的系统设计之后才能做好的。 不想做工时估算和做到哪里是哪里&#xff0c;是一个态度问题。工时估算困难&#xff0c…

数据结构篇:深度剖析LSM及与B+树优劣势分析

本文旨在探讨LSM的特性及其在实际应用场景中的作用&#xff0c;同时对其与B树进行比较&#xff0c;以帮助更好地理解和运用这两种数据结构。 什么是LSM&#xff08;Log-structured Merge-tree&#xff09; 全称 Log-Structured Merge-Tree 日志结构合并树&#xff0c;但不是树…

5G随身wifi真实测评!飞猫5g随身wifi怎么样?飞猫5GVS格行5G随身wifi哪款网速快?5G随身wifi推荐品牌第一名!

飞猫5G随身wifi&#xff1a; 产品外观&#xff1a;黑色大气外观&#xff0c;净重175g&#xff0c;屏幕有信号和指示灯。 产品性能&#xff1a;采用展锐芯片。6根LDS天线&#xff0c;网速100-200mbps&#xff0c;网络延迟10-20ms&#xff0c;2.4G/5G双频可选&#xff0c;超稳定…