2133993529南航微机原理演示.ppt
微机原理与接口技术,实验课,指导教师 郝立新,接口技术是把由处理器、存储器等组成的基本系统与外部设备连接起来,从而实现CPU与外部设备通信的一门技术。微机的应用是随着外部设备的不断更新和接口技术的不断发展而深入到各行各业,任何微机应用开发工作都离不开接口的设计、选用及连接。微机应用系统需要设计的硬件是一些接口电路,所要编写的软件是控制这些接口电路按要求工作的驱动程序。,微机原理与接口技术实验课,实验一 字符串排序 实验二 基本输入输出接口 实验三 8259中断控制器 实验四 8254定时/计数器 实验五 8255并行接口控制器 实验六 ADC0809模/数转换器 实验七 DAC0832 数/模转换器*实验八 8251串行接口控制器*,实验一 字符串排序,实验目的 1.熟悉汇编语言程序的框架结构,掌握汇编语言上机操作过程。2.学会INT 21H功能调用,掌握人机对话的设计方法。3.进一步掌握主、子程序的设计方法。4.学会Tddebug调试环境和Turbo debug的使用。,字符串排序实验内容,设计一字符串排序程序:(1)当屏幕上显示“PLESAE ENTRY STRING”提示信息,从键盘输入一字符串;(2)对该字符串以ASCII码从小到大进行排序;(3)在屏幕上显示排好序的字符串。,字符串排序程序实验方法,(1)用INT 21H的09号显示字符串功能调用显示提示信息(2)用INT 21H的0A号输入字符串功能调用输入字符串至输入缓冲区(3)对输入缓冲区的字符串以ASCII码 从小到大进行排序(4)用INT 21H的09号显示字符串功能调用显示排好序的字符串,字符串选择排序设计思想,(1)将第一个数取出作为当前最小值,与其余N-1个数比较;若其余数比当前最小值小则两者交换,否则不交换;全部比较完,则得到N个数中的最小值,写到串前列。(2)对剩下的N1 个数重复(1)这一步,找到N1 个数中的最小值。(3)再重复(2),直到N 个数全部排列好为止。,实验程序清单,;TITLE BUBBLF SORTSTACK1 SEGMENT STACK DB 64 DUP(0)STACK1 ENDSDATA SEGMENTPROMPT DB 0DH,0AH,PLEASE ENTRY STRING,0DH,0AH,$CRLF DB 0DH,0AH,$CHAR LABEL BYTECHARH DB 60 CHARN DB?CHARF DB 60 DUP(?)DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1BEGIN PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AXAGAIN:LEA DX,PROMPT MOV AH,9 INT 21H LEA DX,CHAR MOV AH,0AH INT 21H MOV CL,CHARN OR CL,CL JZ DONE CALL SORT JMP AGAINDONE:RETBEGIN ENDP,SORT PROC XOR CH,CH MOV BX,CX MOV SI,OFFSET CHARF MOV BYTE PTR SI+BX,$CLDBIGLOOP:MOV AL,SI DEC CX JCXZ DISP PUSH CX INC SI PUSH SISMALLOOP:CMP AL,SI JBE NEXT XCHG AL,SINEXT:INC SI LOOP SMALLOOP,POP SI MOV SI-1,AL CALL DISP POP CX JMP BIGLOOP DISP:MOV DX,OFFSET CRLF MOV AH,9 INT 21H MOV DX,OFFSET CHARF MOV AH,9 INT 21H RETSORT ENDPCODE ENDS END BEGIN,实验步骤及要求,(1)输入源程序.ASM文件(2)编译程序.OBJ文件(3)连接程序.EXE文件(4)调试运行程序 运行当前可执行程序 调试程序1:实模式调试窗口进行调试 调试程序2:DOS环境进行调试,实模式调试窗口进行调试,(1)ViewCpu(2)代码显示区单击右键点击为Mixed Both,为Mixed No,(3)在寄存器显示区点击 Ctrl+R 切换16位/32位通用寄存器显示(4)执行完 MOV DS,AX,点击ViewCpu,使屏幕下方的数据显示区为DS的内容(5)F7 单步执行 F4 执行到光标处 F9 运行程序 Ctrl+Break 终止程序执行 Alt+X 退出TD,DOS环境进行调试,输入命令:DEBUG 文件名.EXE a.反汇编命令U 格式:U地址 或 U地址范围 b.检查和修改寄存器内容命令R 格式:R 或 R寄存器名 c.显示内存命令D 格式:D 地址 或 D地址范围 d.修改存储单元内容命令E 格式:E 地址 内容表 或 E 地址 e.跟踪与显示命令T 格式:T=地址 条数 f.运行命令G 格式:G=地址 地址1地址2 h.结束DEBUG返回到DOS命令 QDOS状态再返回到windows状态,输入EXIT命令,实验二 基本输入输出接口,1.了解微机PCI系统总线的结构。2.掌握地址译码电路的一般设计方法。3.掌握基本I/O接口电路的设计方法,熟练汇编语言I/O端口操作指令的使用。,实验内容,1.利用三态缓冲器74LS245、锁存器74LS574设计微机总线和外部设备的数据通道,实现微机对外部输入数据的读取和对输出数据的输出。用开关及LED显示单元和数据灯作为输入和输出显示设备,将读到开关的数据显示在数据灯上。2.在完成实验内容1的基础上,自行编制程序完成:根据输入开关的某一位的开关状态,决定LED显示单元数据灯的不同显示方式。,TD-PIT+实验系统硬件环境,PCI 总线扩展卡和TD-PIT+实验平台,TD-PIT+实验平台,系统总线单元电路和实验单元电路,系统总线单元电路,片选信号同偏移地址空间对应关系,实验系统向PC 机申请了接口实验所需的配置资源。其中包括:256字节的I/O 地址空间16MB 的存储地址空间一个中断请求线,实验系统的I/O地址的设计,32位系统总线IOM/信号,该信号为低电平时指示当前操作为I/O操作,为高电平指示当前操作为存储器操作,它和译码器不同的连接可以用来区分是I/O端口译码还是存储器端口译码 32位总线地址是由A2开始,所以地址是以4字节边界对齐的。现在本机分配的I/O端口起始地址为3000H,设计地址译码电路,主要是针对低8位地址线译码,得到偏移在00HFFH之间的端口 微机接口电路中,常采用74LS138译码器来实现I/O端口或存储器的地址译码。,输入输出接口设计,输入接口一般用三态缓冲器实现,外部设备输入数据通过三态缓冲器,通过数据总线传送给微机系统。输出接口一般用锁存器实现,输入输出接口设计,32 位I/O 接口单元,实验说明及步骤,将开关K7:0的数据通过输入数据通道读入CPU的寄存器,然后再通过输出数据通道将该数据输出到数据灯显示,该程序循环运行,直到按动键盘上任意按键再退出程序。(1)确认从PC机引出的两根扁平电缆已经连接在实验平台上。(2)自行设计并连接实验线路。a.32 位I/O 接口单元与系统总线单元的连接 1CSIOY0,BE3-BE0BE3-BE0 2IORXIOR,IOWXIOW(数据线已内部连接)b.32 位I/O 接口单元与开关及LED显示单元的连接 1.I7-I0K7-K0 2.O7-O0D7-D0(3)编辑ASM程序,注意使用正确的端口地址,然后编译链接。(4)运行程序,拨动开关,观看数据灯显示是否正确。,参考程序清单,IOY0 EQU 3000H STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSCODE SEGMENT ASSUME CS:CODESTART:MOV DX,IOY0 IN AL,DX OUT DX,AL MOV AH,1 INT 16H JZ STARTQUIT:MOV AX,4C00H INT 21HCODE ENDS END START,DEBUG常用命令输出命令O 格式:O 端口地址 字节值 向指定端口地址输出一个字节。输入命令I 格式:I 端口地址 从指定端口地址输入一个字节。自行编制程序完成:根据输入开关的某一位的开关状态,决定LED显示单元数据灯的不同显示方式。,K7=1右移,k6=1左移,IOY0 EQU 3000H STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSCODE SEGMENT ASSUME CS:CODESTART:MOV DX,IOY0 IN AL,DX Test al,10000000b Jnz aa Test ad,01000000b Jnz bbCc:MOV AH,1 INT 16H JZ STARTQUIT:MOV AX,4C00H INT 21Haa:mov cx,8 MOV DX,IOY0mov al,10000000baa1:out dx,al Call delay Ror al,1 Loop aa1 Jmp cc,bb:mov cx,8 MOV DX,IOY0mov al,00000001bbb1:out dx,al Call delay Rol al,1 Loop bb1 Jmp ccDelay:push cx mov cx,07ffhDd1:push cx mov cx,0fffffh loop$pop cx loop dd1 pop cx retCODE ENDS END START,点阵LED选作实验,R0R15 为行控制,L0L15 为列控制,给行送一个“1”,给列送一个“0”,则相应的LED 点亮。,NUAA DW 0000H,0000H,7C7FH,1206H,110CH,1218H,7C7FH,0000H DW 0000H,7C3FH,1240H,1140H,1240H,7C3FH,0000H,0000H,;HLXLED.ASMIOY0 EQU 3000H;片选IOY0对应的端口始地址I032_1 EQU 3000HI032_2 EQU 3001HI032_3 EQU 3002HI032_4 EQU 3003H STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENTNUAA DW 0000H,0000H,7C7FH,1206H,110CH,1218H,7C7FH,0000H DW 0000H,7C3FH,1240H,1140H,1240H,7C3FH,0000H,0000H DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AXMAIN:MOV CX,500DISP:PUSH CX MOV SI,OFFSET NUAA MOV BX,1111111111111110B MOV CX,16 DISP1:MOV AX,SI MOV DX,I032_1 OUT DX,AL MOV DX,I032_2 MOV AL,AH OUT DX,AL MOV AX,BX MOV DX,I032_3 OUT DX,AL MOV DX,I032_4 MOV AL,AH OUT DX,AL,CALL DALLY ROL BX,1 INC SI INC SI LOOP DISP1 POP CX LOOP DISP MOV AH,1;判断是否有按键按下 INT 16H JZ MAIN;无按键则跳回继续循环,有则退出QUIT:MOV AX,4C00H;结束程序退出 INT 21H,DALLY PROC NEAR;软件延时子程序 PUSH CX MOV CX,50D1:MOV AX,0FFFFHD2:DEC AX JNZ D2 LOOP D1 POP CX RETDALLY ENDPCODE ENDS END START,实验三 8259中断控制器,实验目的(1)学习中断控制器8259的工作原理。(2)掌握可编程控制器8259的应用编程方法。实验内容 利用PC机给实验系统分配的中断线,设计一个单中断应用。使用单次脉冲模拟中断产生。编写中断处理程序,在显示器屏幕上显示一个字符。,实验原理-8259控制器的介绍,实验原理-8259A的命令字,管理8级中断,通过级连,能构成多达64级的矢量中断系统。选择中断请求方式和中断优先模式。管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应及响应哪一级中断,3)响应中断时,向CPU传送中断类型号。初始化命令字ICW1-ICW4 操作命令字OCW1-OCW3,初始化命令字ICW1-ICW4,ICW1 决定中断请求信号为电平触发还是边沿触发。ICW2 8259的基址中断向量号,初始化命令字ICW1-ICW4,ICW3 识别主8259设备连接到从8259的级联信号 ICW4 选择特殊全嵌套或全嵌套模式,使能中断自动结束方式。,操作命令字OCW1-OCW3,OCW1 中断屏蔽操作寄存器,可屏蔽相应的中断信号。OCW2 改变中断优先级和发送中断结束命令。OCW3 使能特殊屏蔽方式,设置中断查询方式,允许读出中断请求寄存器和当前中断服务寄存器。,实验原理-PC微机系统中的8259,80 x86系列PC微机系统中两片8259A中断控制器,经级连可以管理15级硬件中断。主片8259端口地址使用020H和021H;从片8259端口地址使用0A0H和0A1H。,8259单中断应用实验,实验程序清单,INTR_IVADD EQU 01C8H;INTR对应的中断矢量地址 INTR_OCW1 EQU 0A1H;INTR对应的OCW1地址 INTR_OCW2 EQU 0A0H;INTR对应的OCW2地址 INTR_IM EQU 0FBH;中断屏蔽字11111011BSTACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENT MES DB Press any key to exit!,0AH,0DH,0AH,0DH,$CS_BAK DW?;保存INTR原中断处理程序入口段地址的变量IP_BAK DW?;保存INTR原中断处理程序入口偏移地址的变量IM_BAK DB?;保存INTR原中断屏蔽字的变量DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES;显示退出提示 MOV AH,09H INT 21H CLI;关中断 MOV AX,0000H;替换INTR的中断矢量 MOV ES,AX MOV DI,INTR_IVADD;INTR对应的中断矢量地址01C8H MOV AX,ES:DI MOV IP_BAK,AX;保存INTR原中断处理程序入口偏移地址 MOV AX,OFFSET MYISR MOV ES:DI,AX;设置当前中断处理程序入口偏移地址 ADD DI,2 MOV AX,ES:DI MOV CS_BAK,AX;保存INTR原中断处理程序入口段地址 MOV AX,SEG MYISR MOV ES:DI,AX;设置当前中断处理程序入口段地址 MOV DX,INTR_OCW1;设置中断屏蔽寄存器,打开INTR的屏蔽位 IN AL,DX MOV IM_BAK,AL;保存INTR原中断屏蔽字 AND AL,INTR_IM OUT DX,AL,STI;开中断WAIT1:MOV AH,1;判断是否有按键按下 INT 16H JZ WAIT1;无按键则跳回继续等待,有则退出QUIT:CLI;关中断 MOV AX,0000H;恢复INTR原中断矢量 MOV ES,AX MOV DI,INTR_IVADD;INTR对应的中断矢量地址 MOV AX,IP_BAK;恢复INTR原中断处理程序入口偏移地址 MOV ES:DI,AX ADD DI,2 MOV AX,CS_BAK;恢复INTR原中断处理程序入口段地址 MOV ES:DI,AX MOV DX,INTR_OCW1;恢复INTR原中断屏蔽寄存器的屏蔽字 MOV AL,IM_BAK OUT DX,AL STI;开中断 MOV AX,4C00H;返回到DOS INT 21H,MYISR PROC NEAR;中断处理程序MYISR PUSH AX MOV AL,39H MOV AH,0EH INT 10H MOV AL,20H INT 10HOVER:MOV DX,INTR_OCW2;向PC机内部8259发送中断结束命令 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL POP AX IRET MYISR ENDPCODE ENDS END START,实验四 8254定时/计数器,实验内容(1)定时应用实验。编写程序,应用8254的定时功能,实现一个1Hz的输出。(2)计数应用实验*。编写程序,应用8254的计数功能,用开关模拟计数,使每当按动KK1-5次后,产生一次计数中断,并在屏幕上显示一个字符5。,8254-可编程定时/计数器,8254的工作方式(1)方式0:计数到0结束,输出正跃变信号方式。(2)方式1:硬件可重触发单稳方式。(3)方式2:频率发生器方式。(4)方式3:方波发生器方式。(5)方式4:软件触发选通方式。(6)方式5:硬件触发选通方式。,8254-方式控制字,定时应用实验,编写程序,将8254的计数器2设置为方式3,用1.8432mHz作为CLK2时钟。计数初值为18432,相当对CLK2进行18432分频,在OUT2输出频率为100Hz的时钟。再将OUT2连接到计数器0的CLK0,设置计数器0也工作在方式3,计数初值为100,相当是进行100分频。则在OUT0得到1Hz的输出。,8254定时应用实验接线,计数初值公式为n=fCLKifOUTifCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。,定时应用实验程序清单,IOY0 EQU 3000H;片选IOY0对应的端口始地址MY8254_COUNT0 EQU IOY0+00H*4;8254计数器0端口地址MY8254_COUNT1 EQU IOY0+01H*4;8254计数器1端口地址MY8254_COUNT2 EQU IOY0+02H*4;8254计数器2端口地址MY8254_MODE EQU IOY0+03H*4;8254控制寄存器端口地址STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDS,CODE SEGMENT ASSUME CS:CODESTART:MOV DX,MY8254_MODE;初始化8254工作方式 MOV AL,0B6H;10110110 计数器2,方式3 OUT DX,AL MOV DX,MY8254_COUNT2;装入计数初值 MOV AL,00H;18432分频 OUT DX,AL MOV AL,48H OUT DX,AL MOV DX,MY8254_MODE;初始化8254工作方式 MOV AL,36H;00110110 计数器0,方式3 OUT DX,AL MOV DX,MY8254_COUNT0;装入计数初值 MOV AL,64H;100分频 OUT DX,AL MOV AL,00H OUT DX,ALQUIT:MOV AX,4C00H;结束程序退出 INT 21H CODE ENDS END START,计数应用实验,编写程序,将8254的计数器0设置为方式0,计数值为十进制5,用微动开关KK1+作为CLK0时钟,OUT0连接INTR,每当KK1-按动5次后产生中断请求,在屏幕上显示字符“5”。,参考程序流程图,计数应用实验程序清单,INTR_IVADD EQU 01C8H;INTR对应的中断矢量地址INTR_OCW1 EQU 0A1H;INTR对应PC机内部8259的OCW1地址INTR_OCW2 EQU 0A0H;INTR对应PC机内部8259的OCW2地址INTR_IM EQU 0FBH;INTR对应的中断屏蔽字IOY0 EQU 3000H;片选IOY0对应的端口始地址MY8254_ COUNT0 EQU IOY0+00H*4;8254计数器0端口地址MY8254_COUNT1 EQU IOY0+01H*4;8254计数器1端口地址MY8254_COUNT2 EQU IOY0+02H*4;8254计数器2端口地址MY8254_MODE EQU IOY0+03H*4;8254控制寄存器端口地址 STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENT CS_BAK DW?;保存INTR原中断处理程序入口段地址的变量IP_BAK DW?;保存INTR原中断处理程序入口偏移地址的变量IM_BAK DB?;保存INTR原中断屏蔽字的变量STR1 DB COUNT:$;显示的字符串DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX CLI MOV AX,0000H;替换INTR的中断矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,ES:DI MOV IP_BAK,AX;保存INTR原中断处理程序入口偏移地址 MOV AX,OFFSET MYISR MOV ES:DI,AX;设置当前中断处理程序入口偏移地址 ADD DI,2 MOV AX,ES:DI MOV CS_BAK,AX;保存INTR原中断处理程序入口段地址 MOV AX,SEG MYISR MOV ES:DI,AX;设置当前中断处理程序入口段地址 MOV DX,INTR_OCW1;设置中断屏蔽寄存器,打开INTR的屏蔽位 IN AL,DX MOV IM_BAK,AL;保存INTR原中断屏蔽字 AND AL,INTR_IM OUT DX,AL,STI MOV DX,OFFSET STR1;显示字符串 MOV AH,9 INT 21H MOV DX,MY8254_MODE;初始化8254工作方式 MOV AL,10H;00010000 计数器0,方式0 OUT DX,AL MOV DX,MY8254_COUNT0;装入计数初值 MOV AL,4 OUT DX,ALWAIT1:MOV AH,1;判断是否有按键按下 INT 16H JZ WAIT1;无按键则跳回继续等待,有则退出QUIT:CLI MOV AX,0000H;恢复INTR原中断矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,IP_BAK;恢复INTR原中断处理程序入口偏移地址 MOV ES:DI,AX ADD DI,2 MOV AX,CS_BAK;恢复INTR原中断处理程序入口段地址 MOV ES:DI,AX MOV DX,INTR_OCW1;恢复INTR原中断屏蔽寄存器的屏蔽字 MOV AL,IM_BAK OUT DX,AL STI MOV AX,4C00H;返回到DOS INT 21H,MYISR PROC NEAR;中断处理程序MYISR PUSH AX MOV AL,35H MOV AH,0EH INT 10H MOV AL,20H INT 10H MOV DX,MY8254_COUNT0;重装计数初值 MOV AL,4 OUT DX,ALOVER:MOV DX,INTR_OCW2;向PC机内部8259发送中断结束命令 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL POP AX IRET MYISR ENDP CODE ENDS END START,实验五 8255并行接口控制器,(1)掌握8255的工作方式及应用编程。(2)学习按键扫描的原理及电路接法。(3)掌握利用8255完成按键扫描及显示。实验内容 连接8255与键盘扫描单元,编写程序完成按键扫描功能,并将读到的按键值依次显示在数码管上。,8255并行接口控制器简介,方式0-基本输入/出方式方式1-选通输入/出方式方式2-双向选通工作方式,8255工作方式控制字格式,8255C口按位置/复位控制字格式,LED数码显示单元,LED共阴极数码管段码表,LED数码管有共阴极与共阳极两种。共阴极数码管的8个发光二极管阴极接在一起。其共阴极端接地平,其余八个引脚加高电平才能点亮发光二极管;共阳极数码管的8个发光二极管阳极接在一起。其共阳极端接高电平,其余八个引脚加低电平才能点亮发光二极管。,LED数码管静态显示和动态显示方式,静态显示方式:共阴极或共阳极点连接在起接地(低电平)或+5V(高电平);每位的段码线(a-dp)与一外8位的并行口相连。每一位可独立显示,只要在该位的段码线上保持段码电平,该位就能保持相应的显示字符。动态显示方式 将所有位的段码线并联在一起,由一个8位并行口控制显示字符;各位共阴极或共阳极点则由另一并行口控制所显示的位。要想每位显示不同的字符,就必须采用动态扫描方式,即在每一瞬间只使某位数码管显示相应字符。在此期间,段码的并行口输出相应字符段码,位码的并行口输出该位共阴极或共阳极点的控制电平,以保证该位显示相应字符。,LED数码显示单元,LED数码显示单元,4X4小键盘单元简介,键盘的工作方式有编程扫描方式、定时扫描方式和中断扫描方式。,键盘接口编程的四个基本功能,1.去抖动2被按键的识别和键码的产生 按键识别有扫描法和反转法两 种方法 3.确定所按下的键进行相应处理4判别键是否释放,实验步骤及要求,(1)确认从PC机引出的两根扁平电缆已经连接在实验平台上。(2)根据实验内容设计实验电路并进行连接:a.8255单元与系统总线单元的连线 1.D7-D0XD7-XD0 2.CSIOY0,A1-A0XA3-XA2 3.RDXIOR,WRXIOW b.8255的端口与键盘及数码管显示单元的连线 1.PA7-PA0Dp-A(段码线)2.PB7-PB2L1-L6(位码线)3.PC7-PC4Y4-Y1(行线)4.PC3-PC0X4-X1(列线)(3)根据实验内容和实验电路编写程序,然后编译链接。(4)运行程序,按动实验台小键盘,观察CRT、数码管显示是否正确。,参考实验程序清单,IOY0 EQU 3000H;片选IOY0对应的端口始地址PA55 EQU IOY0+00H*4;8255的A口地址PB55 EQU IOY0+01H*4;8255的B口地址PC55 EQU IOY0+02H*4;8255的C口地址P55CTL EQU IOY0+03H*4;8255的控制寄存器地址DATASEGMENTTABLE1 DB 11H,12H,14H,18H;键盘的各键的键值(行值、列值)DB 21H,22H,24H,28H DB 41H,42H,44H,48H DB 81H,82H,84H,88HLED DB 3FH,06H,5BH,4FH;LED数码管的共阴极段码 DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H,00HCHAR DB 0123456789ABCDEF;字符的ASCII码表MES DB Press any key on the small keyboard!,0DH,0AH DB Press key to display on the led!,0DH,0AH,$MESS DB Press main keyboard any key to exit!,0DH,0AH,0DH,0AH,$KEYC DB?;控制功能键的键值KEYN DB?;数字键的序号KEYBUF DB 6 DUP(10H)DATA ENDSSTAC SEGMENT PARA STACK DB 256 DUP(?)STAC ENDS,CODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACSTART:MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES;显示提示信息 MOV AH,9 INT 21H MOV DX,OFFSET MESS MOV AH,9 INT 21HLOP1:CALL TESTKEY;调用键盘扫描子程序 CALL DISP;调用数码管显示程序 MOV AH,0BH;检查键盘输入状态 INT 21H OR AL,AL JZ LOP1 QUIT:MOV AX,4C00H INT 21H,TESTKEY PROC;键盘扫描子程序 KEY0:MOV AL,81H;10000001B,8255的A口、B口输出 MOV DX,P55CTL;行PC4-7输出、列PC0-3输入 OUT DX,ALWAIT1:CALL DISP MOV DX,PC55;使行线全为低 MOV AL,00000000B OUT DX,AL IN AL,DX;取列线值 CMP AL,00001111B;有键按下吗?JZ WAIT1;无键按下,继续等待 PUSH AX;暂存列值 MOV CX,0FFFFH;延时去抖动LP2:LOOP LP2KEY1:MOV DX,P55CTL MOV AL,88H;10001000B OUT DX,AL;行线PC4-7为输入,列线PC0-3为输出 MOV DX,PC55;列线值反转输出 POP AX OUT DX,AL IN AL,DX;再取行值 NOT AL;取反形成键值 MOV KEYC,AL;存入KEYC单元,MOV SI,OFFSET TABLE1;识别被按键 MOV CX,16 MOV DL,00HKEY2:CMP AL,SI JZ KEY3 INC SI INC DL LOOP KEY2 JMP KEYEND,KEY3:MOV KEYN,DL;数字键存入KEYN单元 MOV BX,OFFSET CHAR;在CRT上显示键号字符 MOV AL,KEYN XLAT MOV DL,AL MOV AH,02H INT 21H MOV SI,OFFSET KEYBUF+1;存放数字键到输入缓冲区 MOV DI,OFFSET KEYBUF MOV CX,5KEY4:MOV AL,SI MOV DI,AL INC SI INC DI LOOP KEY4 MOV AL,KEYN MOV DI,AL,;判断键释放 MOV AL,81H;10000001B,8255的A口、B口输出 MOV DX,P55CTL;行PC4-7输出、列PC0-3输入 OUT DX,ALWAIT2:CALL DISP MOV DX,PC55;使行线全为低 MOV AL,00000000B OUT DX,AL IN AL,DX;取列线值 CMP AL,00001111B;键释放吗?JNZ WAIT2;键未释放,继续等待KEYEND:RETTESTKEY ENDP,DISP PROC;数码管显示子程序 MOV CL,10000000B;显示初位L1=1 MOV SI,OFFSET KEYBUF;指向键盘输入缓冲区DIS2:MOV AL,SI LEA BX,LED XLAT;换码 MOV DX,PA55 OUT DX,AL;输出段码 MOV DX,PB55 MOV AL,CL OUT DX,AL;输出位码 CALL DELAY INC SI ROR CL,1;下一位输出 CMP CL,02H JNZ DIS2 RETDISP ENDP,DELAY PROC NEAR;延时子程序 PUSH CX MOV CX,0FFFFH LOOP$POP CX RETDELAY ENDPCODE ENDS END START,实验五_2 步进电机实验,所谓步进,就是指每给步进电机一个递进脉冲,步进电机各绕组的通电顺序就改变一次,即电机转动一次。根据步进电机控制绕组的多少可以将电机分为三相、四相和五相。实验平台连接的步进电机为四相八拍电机,电压为DC12V,其励磁线圈及其励磁顺序如图及表所示。四相:AABBBCCCDDDA,对步进电机的转动方向、速度、角度进行调节,步进电机转动方向速度角度的调节,步距角 对应一个脉冲信号,电机转子转过的角位移用表示 实验平台连接的步进电机为四相八拍电机,电压为DC12V=360度/96步=3.75度步进电机正转:以步序递增依次输出表中数据 反转:以步序递减依次输出表中数据 速度:改变每步的停留时间 角度:步序输出的次数x步距角,;HLXBJ.asm;HLX步进电机控制实验IOY0 EQU 3000H;片选IOY0对应的端口始地址MY8255_A EQU IOY0+00H*4;8255的A口地址MY8255_B EQU IOY0+01H*4;8255的B口地址MY8255_C EQU IOY0+02H*4;8255的C口地址MY8255_MODE EQU IOY0+03H*4;8255的控制寄存器地址STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENTTTABLE DB 01H,03H,02H,06H,04H,0CH,08H,09H step db 0 DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AXMAIN:MOV DX,MY8255_MODE;定义8255工作方式 MOV AL,10010000b;工作方式0,A口输入,B口输出 OUT DX,ALA1:MOV BX,OFFSET TTABLE;根据步序换控制码输出 MOV AL,STEP XLAT MOV DX,MY8255_B OUT DX,ALA2:MOV DX,MY8255_A;读k2k0控制转速 IN AL,DX AND AL,07 INC AL MOV CL,AL MOV CH,0A3:PUSH CX;延迟 CALL DALLY POP CX LOOP A3,S:MOV DX,MY8255_A;读k7判别正/反转 IN AL,DX TEST AL,80H JZ S1 INC STEP;正转,步序加1 CMP STEP,7 JBE A4 MOV STEP,0 JMP A4S1:CMP STEP,0;反转,步序减1 JZ S2 DEC STEP JMP A4S2:MOV STEP,7A4:MOV AH,1;判断是否有按键按下 INT 16H JZ A1;无按键则跳回继续循环,有则退出QUIT:MOV DX,MY8255_B;步进电机全关 MOV AL,00 OUT DX,AL MOV AX,4C00H;结束程序退出 INT 21H,DALLY PROC NEAR;软件延时子程序 PUSH CX PUSH AX MOV CX,07FFHD1:MOV AX,5000HD2:DEC AX JNZ D2 LOOP D1 POP AX POP CX RETDALLY ENDPCODE ENDS END START,实验六 ADC0809模/数转换器,1.学习理解模/数信号转换的基本原理;2.掌握模/数转换芯片ADC0809的使用方法。实验内容 编写实验程序,将ADC单元中提供的0V5V信号源作为ADC0809的模拟输入量,进行A/D 转换,转换结果通过LED进行显示。,实验原理-ADC0809简介,实验原理-ADC0809单元电路,设计并连接实验电路,画出电原理图,接线图,a.A/D 转换单元与系统总线单元的连线:1.D7D0XD7-XD0 2.CSIOY1 3.WRIOW RDIOR 4.CLKCLKb.A/D 转换单元的外围连线:1.IN0ADJ(电位器)A-B-CGND(扩展单元)2.REF(+)+5