接口与通信实验报告(有注释)

更新时间:2024-05-08 07:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

接口与通讯实验报告

1、8253定时/计数器实验

2、8255并行接口实验 3、数字式时钟(电子钟) 4、D/A(数/模)转换实验

5、A/D(模/数)转换实验

一. 实验目的与要求

1. 学会8253芯片和微机接口原理和方法。

2. 掌握8253定时器/计数器的工作方式和编程原理。 二.实验内容 1.实验原理

本实验原理图如图5-12所示,8253A的A0、A1接系统地址总线A0、A1,故8253A 有四个端口地址,如端口地址表5-2所示。8253A的片选地址为48H~ 4FH。 因此, 本实验仪中的8253A四个端口地址为48H、49H、4AH、4BH,分别对应通道0、通道1、通道2和控制字。采用8253A通道0,工作在方式3(方波发生器方式),输入时钟CLK0 为1MHZ, 输出OUTO 要求为1KHZ的方波,并要求用接在GATE0引脚上的导线是接地(\电平)或甩空(\电平)来观察GATE对计数器的控制作用,用示波器观察输出波形。 2、 实验线路连接

(1) 8253A芯片的CLK0引出插孔连分频输出插孔1MHZ。 (2) 8253A的GATE0接+5V。

3、 实验步骤

(1) 按图5-12连好实验线路

(2) 运行实验程序

在系统显示\- 86H\状态下,按任意键,系统显示命令提示符\-\。

按GO键,系统显示\ 输入F000 : B290

再按EXEC键,显示\-1\

用示波器测量8253A的OUT0输出插孔,应有频率为1KHZ的方波输出。幅值0~5V。 三、实验程序,要求写注释。

CODE SEGMENT ASSUME CS:CODE

TCONTRO EQU 004BH ;控制口地址 TCON2 EQU 004AH ;计数器地址 CONTPORT EQU 00DFH DATAPORT EQU 00DEH DATA1 EQU 0500H START: JMP TCONT

TCONT: CALL FORMAT ;将要显示的“8253--1”写入内存

CALL LEDDISP ;调用数码管扫描程序将”8253—-1显示出来 MOV DX,TCONTRO ;控制口地址送入DX中 MOV AL,0B4H ;置8253工作方式2的控制字 OUT DX,AL ;置入控制字 MOV DX,TCON2 ;使用通道2 MOV AL,00

OUT DX,AL ;写时间常数低8位 MOV AL,20H ;改变时间常数为2000H OUT DX,AL ;写时间常数高8位

HLT

LEDDISP:MOV AL,90H ;显示数据方式命令字送8279控制 MOV DX,CONTPORT OUT DX,AL

MOV BYTE PTR DS:[0600H],00 ;置显示位数初值为0

LED1: CMP BYTE PTR DS:[0600H],07H ;判断显示位数满8位否 JA LED2 ;满8位转子程序返回 MOV BL,DS:[0600H] ;未满8位从数据区取数 MOV BH,0H

MOV AL,CS:[BX+DATA1]

MOV DX,DATAPORT ;8279数据口 OUT DX,AL

ADD BYTE PTR DS:[0600H],01H ;显示位数加1 JNZ LED1 LED2: RET

FORMAT: MOV BX,0 ;初始化子程序 MOV WORD PTR DS:[BX+0500H],4006H ADD BX,2

MOV WORD PTR DS:[BX+0500H],4040H ADD BX,2

MOV WORD PTR DS:[BX+0500H],6D4FH ADD BX,2

MOV WORD PTR DS:[BX+0500H],7F5BH RET CODE ENDS END START ??

一、 实验目的与要求

1. 掌握8255A和微机接口方法。 2. 掌握8255A的工作方式和编程原理。 二、 实验内容 1、实验原理

如实验原理图5-8所示,PC口8位接8个开关K1~ K8,PB口8位接8个发光二极管,从PC口读入8位开关量送PB口显示。拨动K1~ K8,PB口上接的8个发光二极管L1~ L8对应显示K1~ K8的状态。

(a)工作方式控制字 (b)C口按位置位/复位控制字

2、实验线路连接

(1) 8255A芯片PC0~ PC7插孔依次接K1~ K8。 (2) 8255A芯片PB0~PB7插孔依次接L1 ~ L8。 (3) 8255A的CS插孔接译码输出070H-07FH插孔。 3、实验步骤

(1) 按图5-8连好线路。 (2) 运行实验程序。

在系统显示\-86H\状态下,按任意键,显示器显示\-\。按GO键,显示 \XX\输入 F000 : B160再按EXEC键,在DVCC-8086H显示上显示器\-1\,同时拨动K1~K8,L1~L8

会跟着亮灭。

三、实验程序,要求写注释。

CODE SEGMENT ASSUME CS:CODE

IOCONPT EQU 0073H ;8255控制端口地址 IOCPT EQU 0072H ;C口端口地址 IOBPT EQU 0071H ;B口端口地址 CONTPORT EQU 00DFH DATAPORT EQU 00DEH ; 命令控制端口地址 DATA1 EQU 0500H ; 数据端口地址 START: JMP IOLED IOLED: CALL FORMAT ;调用初始化程序子程序

CALL LEDDISP ;调用显示“8255-1”子程序

MOV AL,82H ;设置8255控制字,B,C口的输入输出方式对调了 MOV DX,IOCONPT

OUT DX,AL ; 写进控制字 NOP ; 不操作,延时作用 NOP NOP

IOLED1: MOV DX,IOBPT ;读取PB口的值 IN AL,DX

MOV DX,IOCPT ;将PB口的值送PC口显示 OUT DX,AL MOV CX,0FFFFH DELAY: LOOP DELAY ;程序延迟循环模块 JMP IOLED1

LEDDISP:MOV AL,90H ;显示“8255-1”子程序 MOV DX,CONTPORT OUT DX,AL

MOV BYTE PTR DS:[0600H],00

LED1: CMP BYTE PTR DS:[0600H],07H; 判断显示为数是否满8位 JA LED2; 是跳到LED2

MOV BL,DS:[0600H]; /否,取高一位数据 MOV BH,0H

MOV AL,CS:[BX+DATA1] MOV DX,DATAPORT

OUT DX,AL ; 显示数据

ADD BYTE PTR DS:[0600H],01H JNZ LED1

LED2: RET ; 子程序返回

FORMAT: MOV BX,0 ;初始化程序子程序 MOV WORD PTR DS:[BX+0500H],4006H

ADD BX,2

MOV WORD PTR DS:[BX+0500H],4040H ADD BX,2

MOV WORD PTR DS:[BX+0500H],6D6DH ADD BX,2

MOV WORD PTR DS:[BX+0500H],7F5BH RET CODE ENDS END START

一.实验目的与要求

1.学习8253编程定时/计数器的工作方式

2.掌握中断控制器8259A与微处理机接口的原理和方法 3.掌握中断控制器8259A的综合应用编程

二.实验内容

1.实验原理

用8253和8259现实数码管显示时钟。利用8253的定时器功能。8253有三个端口地址为48H,49H,4AH本实验采用8253的通道2,工作方式3(方波发生器方式)输入CLK2为1MHZ。先给8253的初值0C350H,循环记数。即一次记数完毕后,自动装入初值。输出OUT2作为8259的输入脉冲。8259有两个口地址,本实验为20H和21H,其中20H用来写ICW1,21H用来写ICW2、ICW4,本实验中8259为单片,边沿触发,采用3号中断源,即IR3和8259输出口OUT2相连,每过1/20秒接收到一个中断,向8259发出中断请求信号,如果电平信号不符合要求,则自动转到7号中断,显示“ERR”,CPU响应后,在中断处理程序中,对中断次数进行记数,记满20次,把时间缓冲区的时间加1,并将其输入到显示缓冲区,以便显示器显示更新后的时间。计数初值的计算:1/1000000*X=1/20,X=50000D=0C350H(用1MHZ信号产生1/20秒方波)。

2.实验线路连接

(1)8253A芯片的CLK2引出插孔连分频输出插孔1MHZ。 (2)8253A的GATE2接+5V。

(3)8259A的IR3插孔和8253的OUT2插孔相连。 3.程序流程框图

主程序 中断子程序

开始 开始 N 调用显示00-00-00 中断次数=20 次数加1 写8253控制字 写时间缓冲区 中断返回 填8259中断向量表 调用显示缓冲区 8259初始化 结束 开中断 等待中断 4.实验主要仪器设备和材料

PC机、DVCC-8086JH实验系统及连接导线。

5.实验方法、步骤及结果测试 (1)按图3—24连好线路。

(2)打开DVCC86H目录下的CLOCK子目录中的Eclock.asm。 (3)运行实验程序:

①按“调试”按钮(它包括‘编译’、‘联接’、‘传送’功能)。 ②按“运行”按钮。

在DVCC-8086H显示上显示器\—00—00\,然后开始计时。 三、

实验程序,要求写注释。

CODE SEGMENT ASSUME CS:CODE

INTPORT1 EQU 0020H ;8259口地址1,用来写ICW1

INTPORT2 EQU 0021H ;8259口地址2,用来写ICW2、ICW4 INTQ3 EQU INTERUPT3 INTQ7 EQU INTERUPT7

CONTPORT EQU 00DDH ;8279命令状态口地址 DATAPORT EQU 00DEH ;8279键盘显示数据口地址

DATA1 EQU 0500H ;错误信息显示缓冲区起始地址(0500H-0507H) DATA2 EQU 0508H DATA3 EQU 0518H DATA4 EQU 0520H DATA5 EQU 0528H DATA6 EQU 0529H DATA7 EQU 052AH DATA8 EQU 052BH DATA9 EQU 052CH DATA10 EQU 052EH

ORG 1800H

START: JMP TINT1

TINT1: CALL FORMAT CLD

MOV DX,004BH

MOV AL,0B6H

OUT DX,AL MOV DX,004AH MOV AL,50H

OUT DX,AL MOV AL,0C3H

OUT DX,AL

MOV SI,DATA3

CALL LEDDISP

MOV AX,0H MOV DS,AX

CALL WRINTVER MOV AL,13H MOV DX,INTPORT1 OUT DX,AL MOV AL,08H

MOV DX,INTPORT2 OUT DX,AL

;显示译码表起始地址(0508H-0517H) ;初始状态显示缓冲区(0518H-051FH) ;时间显示缓冲区起始地址(0520H-0527H) ;存放已重新刷新数码管个数 ;存放1/20秒定时中断次数 ;存放时间的小时值 ;存放时间的分值 ;存放时间的秒值

;待更新的显示区内的地址 ;写8253控制字,通道2,方式3 8位 ;计数初值高8位 ;计数初值低 MOV AL,0BH

OUT DX,AL ;写中断控制字 MOV AL,0F7H

OUT DX,AL ;用IR2请求中断 WAITING: STI

JMP WAITING

WRINTVER: MOV AX,0H MOV ES,AX

MOV DI,002CH LEA AX,INTQ3 STOSW

MOV AX,CS STOSW

MOV DI,003CH LEA AX,INTQ7 STOSW

MOV AX,CS STOSW RET

INTERUPT3: CLI MOV AL,DS:[DATA6] INC AL

MOV DS:[DATA6],AL

CMP AL,14H JC PLAY MOV BYTE PTR DS:[DATA6],00H MOV SI,DATA4 CALL LEDDISP CALL NEWTIME CALL CONVERSALL PLAY: MOV AL,20H

MOV DX,INTPORT1 OUT DX,AL STI IRET

INTERUPT7: CLI MOV SI,DATA1 CALL LEDDISP MOV AL,20H

MOV DX,INTPORT1 OUT DX,AL

;中断矢量地址(IR3) ;中断矢量地址(IR7) ;中断3服务程序

;DATA6存放1/20秒定时中断次数 ;判断是否满20次中断 ;否,清零中断次数

;指向时间显示缓冲区首地址 ;数码管显示子程序

;本子程序段按十进制完成时、分、 ;本程序段将秒、分、时值进行显示译码 IRET

LEDDISP: MOV AL,90H ;数码管显示子程序 MOV DX,CONTPORT OUT DX,AL

MOV BYTE PTR DS:[DATA5],00H ;存放已重新刷新数码管个 LED1: CMP BYTE PTR DS:[DATA5],07H ;判断是否已刷新8个数码 JA LED2 ;是,退出本数码管 MOV BL,DS:[DATA5] ;否,刷新本数码管 MOV BH,0H

MOV AL,CS:[BX+SI] MOV DX,DATAPORT OUT DX,AL

ADD BYTE PTR DS:[DATA5],01H JNZ LED1 LED2:

FORMAT: MOV BX,0

MOV WORD PTR DS:[BX+DATA1],5050H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],0079H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],0000H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],0000H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],063FH ADD BX,2

MOV WORD PTR DS:[BX+DATA1],4F5BH ADD BX,2

MOV WORD PTR DS:[BX+DATA1],6D66H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],077DH ADD BX,2

MOV WORD PTR DS:[BX+DATA1],6F7FH ADD BX,2

MOV WORD PTR DS:[BX+DATA1],7C77H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],5E39H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],7179H ADD BX,2

RET ;未满8位从数据区取数送 ;显示位数加1 ;显示错误“rr” ;显示错误“E” ;显示“10 ” ;显示“32 ” ;显示“54 ” ;显示“76” ;显示“98 ” ;显示“BA ” ;显示“DC ” ;显示“FE ” MOV WORD PTR DS:[BX+DATA1],3F3FH ;显示“00 ” ADD BX,2

MOV WORD PTR DS:[BX+DATA1],3F40H ;显示“0— ” ADD BX,2

MOV WORD PTR DS:[BX+DATA1],403FH ;显示“—0 ” ADD BX,2

MOV WORD PTR DS:[BX+DATA1],3F3FH ;显示“00 ” ADD BX,2

MOV WORD PTR DS:[BX+DATA1],3F3FH ADD BX,2

MOV WORD PTR DS:[BX+DATA1],3F40H ADD BX,2

MOV WORD PTR DS:[BX+DATA1],403FH ADD BX,2

MOV WORD PTR DS:[BX+DATA1],3F3FH

MOV BYTE PTR DS:[DATA6],00D MOV BYTE PTR DS:[DATA7],00D MOV BYTE PTR DS:[DATA8],00D MOV BYTE PTR DS:[DATA9],00D MOV WORD PTR DS:[DATA10],DATA4 RET

CONVERS1: MOV BH,0H

AND AL,0FH MOV BL,AL

MOV AL,CS:[BX+DATA2]

CONVERS2: PUSH AX CALL CONVERS1 MOV BX,WORD PTR DS:[DATA10] MOV DS:[BX],AL

ADD WORD PTR DS:[DATA10],01H POP AX PUSH CX MOV CL,4H SHR AL,CL POP CX

CALL CONVERS1

MOV BX,WORD PTR DS:[DATA10] MOV DS:[BX],AL RET RET

CONVERSALL: MOV AL,BYTE PTR DS:[DATA9]

CALL CONVERS2 ADD WORD PTR DS:[DATA10],02H MOV AL,BYTE PTR DS:[DATA8] CALL CONVERS2

ADD WORD PTR DS:[DATA10],02H MOV AL,BYTE PTR DS:[DATA7] CALL CONVERS2

MOV WORD PTR DS:[DATA10],DATA4 RET

NEWTIME: CMP BYTE PTR DS:[DATA9],59H JC ADD1

MOV BYTE PTR DS:[DATA9],0D CMP BYTE PTR DS:[DATA8],59H JC ADD2

MOV BYTE PTR DS:[DATA8],0D CMP BYTE PTR DS:[DATA7],23H JC ADD3

MOV BYTE PTR DS:[DATA7],0D JMP OK

ADD1: MOV AL,BYTE PTR DS:[DATA9] ADD AL,1D DAA

MOV BYTE PTR DS:[DATA9],AL JMP OK

ADD2: MOV AL,BYTE PTR DS:[DATA8] ADD AL,1D DAA

MOV BYTE PTR DS:[DATA8],AL JMP OK

ADD3: MOV AL,BYTE PTR DS:[DATA7] ADD AL,1D DAA

MOV BYTE PTR DS:[DATA7],AL OK: RET

CODE ENDS END START

四.实验体会

本实验使自己对中断的概念认识更深了,首先这次实验程序实现

先保存好环境,设置中断开中断,进入中断处理程序,关中断,恢复现场等。实验中使用的8259为单片,边沿触发,采用3号中断源,即IR3和8259输出口OUT2相连,每过1/20秒接收到一个中断,向8259发出中断请求信号,如果电平信号不符合要求,则自动转到7号中断,显示“ERR”,CPU响应后,在中断处理程序中,对中断次数进行记数,记满20次,把时间缓冲区的时间加1,并将其输入到显示缓冲区,以便显示器显示更新后的时间。总的来说,这次实验让自己体会了,硬件在实现需求功能上和软件很不一样,软件重视的处理数据的算法而硬件则更强调命令和硬件特性的逻辑性。

一、 实验目的与要求

进一步掌握数/模转换的基本原理。 二、 实验内容 1.实验原理

实验原理如图 5-5所示,由于DAC0832有数据锁存器、选片、读、写控制信号线,故可与 8088CPU 总线直接接口。图中是只有一路模拟量输出, 且为单极型电压输出。DAC0832工作于单缓冲方式,它的ILE接+5V,/CS和/XFER相接后作为0832芯片的片选0832CS。这样, 对DAC0832执行一次写操作就把一个数据直接写入DAC寄存器、模拟量输出随之而变化。 2.实验线路的连接

将D/A片选信号DACS插孔和译码输出070H-07FH插孔相连。 3.实验要求

(1)本实验要求在Aout端输出方波信号。根据Vout= —(VREF(输入数字量的十进制数))/256,即可知道,只要将数字量0-256(00H-FFH)从0开始逐渐加1递增至256为止,不断循环,在AOUT端就会输出连续不断的锯齿波。 (2)、根据要求改写锯齿波程序 将锯齿波变成三角波。 4.实验软件框图:

5.实验主要仪器设备和材料

PC机、DVCC-8086JH实验系统及连接导线。 6.实验方法、步骤及结果测试

(1)根据实验原理图正确连接好实验线路 (2)正确理解实验原理

(3) 实验步骤:

a:按“调试”按钮(它包括‘编译’、‘联接’、‘传送’功能)。 b:选“窗口”下拉菜单里的“进入示波器窗口”(这是模拟示波器)然后将其最小化。 c:按“运行”按钮。

d :将模拟示波器窗口打开,选择“串行口2”,再按“Ctrl+F2开关”即可看到波形。 在DVCC-8086JH数码管上显示“0832-2”,用真示波器测量DAC0832下AOUT插孔,应有锯齿波输出。

e:根据要求改写锯齿波程序 将锯齿波变成三角波

三. 实验程序,要求写注释。

(以下是以最高点0FFH,最低点00H,的三角波程序) CODE SEGMENT

ASSUME CS:CODE //初始化一些常量值 DAPORT EQU 0070H //0832数据口地址 CONTPORT EQU 00DFH //8279命令控制口地址 DATAPORT EQU 00DEH //8279数据口地址 DATA EQU 0500H

//------------------------------------------------------------------------ START: JMP DACONTORL

DACONTORL:CALL FORMAT //初始化LED

CALL LEDDISP //用LED显示“0832——2” MOV DX,DAPORT

MOV AL,00H //从最低点为:00H开始 DACON1: OUT DX,AL //输出三角波上升那段 INC AL //步长为1 MOV CX,06H

DACON2: LOOP DACON2 //根据cx=6延时

CMP AL,0FFH //三角波最高点为:0FFH JNZ DACON1 //没到达最高点

DACON3:OUT DX,AL //输出三角波下降那段 DEC AL MOV CX,06H

DACON4: LOOP DACON4 //根据cx=6延时

CMP AL,00H JNZ DACON3 JMP DACON1

LEDDISP:MOV AL,90H //显示数据方式命令字送8279控制口 MOV DX,CONTPORT //8279命令控制口 OUT DX,AL

MOV BYTE PTR DS:[0600H],00 //显示为数初值为0

LED1: CMP BYTE PTR DS:[0600H],07H //判断显示为数是否满8位 JA LED2 //是跳到LED2

MOV BL,DS:[0600H] //否,取高一位数据

MOV BH,0H

MOV AL,CS:[BX+DATA]

MOV DX,DATAPORT //8279数据口地址 OUT DX,AL //显示数据

ADD BYTE PTR DS:[0600H],01H //取高一位数据,显示数据位数加1 JNZ LED1

LED2: RET //子程序返回 FORMAT: MOV BX,0

MOV WORD PTR DS:[BX+0500H],405BH ADD BX,2

MOV WORD PTR DS:[BX+0500H],4040H ADD BX,2

MOV WORD PTR DS:[BX+0500H],4F5BH ADD BX,2

MOV WORD PTR DS:[BX+0500H],3F7FH

RET CODE ENDS END START

//子程序返回

一、 实验目的与要求

加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。

二、 实验内容 1 、实验原理

本实验采用 ADC0809 做 A/D 转换实验。ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us,转换精度为±1/512,适用于多路数据采集系统。ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。

图中ADC0809的CLK信号接CLK=2.385MHZ,基准电压Vref(+)接Vcc。一般在实际应用系统中应该接精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR经逻辑组合后,去控制ADC0809的ALE、START、ENABLE信号。ADC0809的转换结束信号EOC未接, 如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD-C 接系统数据线的低3位,因此ADC0809的8个通道值地址分别为00H、01H、02H、03H、04H、05H 、 06H、07H。

启动本A/D转换只需如下三条命令:

MOV DX,ADPORT ;ADPORT为ADC0809端口地址。 MOV AL,DATA ;DATA为通道值。

MOV DX, AL ; 通道值送端口。

读取A/D转换结果用下面二条指令: MOV DX,ADPORT IN AL,DX

2 、 实验线路的连接

在原理图5-2中,粗黑线是学生需要连接的线, 粗黑线两端是需连接的信号名称。 (1)IN0插孔连W1的输出V1插孔。

(2)0809CS连译码输出060H~06FH插孔。

3、调节电位器W1,以改变模拟电压值,显示器上会不断显示新的A/D转换结果。用ADC0809做A/D转换,其模拟量与数字量对应关系的典型值为+5V-FFH,2.5V-80H,0V-00H。

4 、 实验软件参考程序存放在两个地方: 一是放在系统监控中, 二是放在随机软盘中。 每个实验程序所对应的起始地址见附一、二。

(a) 运行系统监控中的实验程序

在系统接上电源,显示\-86H\后,按任意键,显示器显示\-\。 按GO键,显示\输入F000:B000

再按EXEC键,在DVCC-8086H上应显示\-XX\。

(b) 运行随机软件中的实验程序

三、实验程序,要求写注释。

CODE SEGMENT ASSUME CS:CODE ADPORT EQU 0060H

CONTPORT EQU 00DFH ;8279命令状态口 DATAPORT EQU 00DEH ;8279数据口

INTPORT1 EQU 0020H ;8259口地址1,用来写ICW1

INTPORT2 EQU 0021H ;8259口地址2,用来写ICW2、ICW4 INTQ3 EQU INTREEUP3 ORG 1200H START: JMP ADCONTORL DATA1 EQU 0580H DATA2 EQU 0500H ADCONTORL:

CALL FORMAT ;调用初始化显示程序 MOV AX,0H MOV DS,AX MOV BX,DATA1 MOV DS:[BX],AL ADD BX,01H MOV DS:[BX],AL ADD BX,01H MOV AL,40H MOV DS:[BX],AL

ADD BX,01H MOV AL,40H MOV DS:[BX],AL ADD BX,01H MOV AL,6fH MOV DS:[BX],AL ADD BX,01H MOV AL,3fH MOV DS:[BX],AL ADD BX,01H MOV AL,7fH MOV DS:[BX],AL MOV AL,3fH ADD BX,01H MOV DS:[BX],AL ADCON: MOV AX,00 MOV DX,ADPORT OUT DX,AL

MOV AX,0H MOV DS,AX

CALL WRINTVER ;调用写入中断向量子程序 MOV AL,13H ;8259的控制字 MOV DX,INTPORT1

OUT DX,AL ;写ICW1 MOV AL,08H MOV DX,INTPORT2

OUT DX,AL ;写ICW2 MOV AL,0BH OUT DX,AL MOV AL,0F7H

OUT DX,AL ;写ICW4

MOV BYTE PTR DS:[0601H],01H ;TIME=1 STI ;开中断 WATING: JMP WATING WRINTVER:MOV AX,0H MOV ES,AX MOV DI,002CH LEA AX,INTQ3 STOSW MOV AX,CS STOSW

RET

INTREEUP3:CLI

MOV DX,ADPORT IN AL,DX MOV CL,AL

CALL CONVERS ;进行转换 CALL LEDDISP

MOV AX,00 MOV DX,ADPORT

OUT DX,AL ;启动A/D转换

STI; ;开中断,使得可以继续响应中断请求 IRET; ;中断返回

;JMP ADCON ;返回重新准备接收新的中断请求 CONVERS:MOV BH,0H AND AL,0FH MOV BL,AL

MOV AL,CS:[BX+DATA2] MOV BX,DATA1 MOV DS:[BX],AL INC BX PUSH BX MOV AL,CL MOV CL,04H SHR AL,CL

MOV BL,AL ; 取数据高4位 MOV BH,0H

MOV AL,CS:[BX+DATA2] ; 数据高4位转化 POP BX

MOV DS:[BX],AL; /保存刷新后相应的LED显示代码

RET ; 子程序返回

LEDDISP:MOV AL,90H ;显示数据方式命令字送 MOV DX,CONTPORT OUT DX,AL

MOV BYTE PTR DS:[0600H],00 ;置显示位数为0

LED1: CMP BYTE PTR DS:[0600H],07H ;判断显示位数满8否 JA LED2 ;满8位转子程序返回 MOV BL,DS:[0600H] ;未满8位从数据区取数送 MOV BH,0H

MOV AL,DS:[BX+DATA1] MOV DX,DATAPORT OUT DX,AL

ADD BYTE PTR DS:[0600H],01H

JNZ LED1

LED2: RET ;子程序返回 FORMAT: MOV BX,0

MOV WORD PTR DS:[BX+0500H],063FH ADD BX,2

MOV WORD PTR DS:[BX+0500H],4F5BH ADD BX,2

MOV WORD PTR DS:[BX+0500H],6D66H ADD BX,2

MOV WORD PTR DS:[BX+0500H],077DH ADD BX,2

MOV WORD PTR DS:[BX+0500H],6F7FH ADD BX,2

MOV WORD PTR DS:[BX+0500H],7C77H ADD BX,2

MOV WORD PTR DS:[BX+0500H],5E39H ADD BX,2

MOV WORD PTR DS:[BX+0500H],7179H RET CODE ENDS END START

本文来源:https://www.bwwdw.com/article/hcwg.html

Top