北航微机原理实验(源程序)-教师手册
民航大学微机原理实验报告及试验程序

微机原理与接口技术实验报告实验环境: Windows XP SP3实验软件:masm, link, debug, edit。
Test 1: debug命令及汇编指令和寻址的应用。
NO.1设堆栈指针SP=2000H, AX=3000H, BX=5000H;请编一程序段将AX和BX的内容进行交换。
要求:用3种方法实现。
方法一CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000HMOV BX,5000H MOV CX,AX MOV AX,BX MOV BX,CX CODE ENDS END START 方法二CODE SEGMENTASSUME CS:CODESTART: MOVAX,3000HMOV BX,5000HXCHG AX,BXCODE ENDSEND START方法三CODE SEGMENTASSUME CS:CODESTART: MOVAX,3000HMOV BX,5000HPUSH AXPUSH BXPOP AXPOP BXCODE ENDSEND STARTNO.2分别执行以下指令, 比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOV AX,BX 寄存器寻址, 将BX内容送AXMOV AX,[BX] 寄存器间接寻址, 将DS:BX内存单元内容送AXMOV AX,10[BX] 寄存器相对寻址, 将DS:BX+10内存单元内容送AXNO.3已知有如下程序段:MOV AX, 1234HMOV CL, 4在以上程序段的基础上, 分别执行以下指令:ROL AX, CL AX=4123HROR AX, CL AX=3412HSHL AX, CL AX=4120HSHR AX, CL AX=0412HSAR AX, CL AX=0041HRCL AX, CL AX=0410HRCR AX, CL AX=0041HNO.4设有以下部分程序段:TABLE DW 10H,20H,30H,40H,50HENTRY DW 3┇LEA BX,TABLEADD BX,ENTRYMOV AX,[BX]┇要求: (1)将以上程序段补充成为一个完整的汇编程序。
北航计软实验报告实验三

4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2.快速排序
1)设置两个变量i、j,排序开始的时候: i=0, j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
实验报告
实验名称冒泡排序和快速排序
班级
学号
姓名
成绩
实验概述:
【实验目的及要求】
通过编程程序达到熟悉并掌握教材中所介绍的几种排序方法。
【实验原理】
1.冒泡排序
1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
b[i]=num;
}
printf("随机数产生完成\n");
for (i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n\n");
system("pause");
printf("\n\n");
com=0;
mov=0;
for (i=0;i<N;i++)
{
for (j=0;j<N-1;j++)
{
l++;
com++;
}
b[r]=b[l];
mov++;
北航微机原理实验1报告

实验一字符串排序实验时间:2015.11.21 实验编号:同组同学:无一、实验背景本实验可以实现对任意长度字符串的进行从小到大的排序并回显到屏幕上。
二、实验原理本实验的采用的实验原理主要是冒泡法原理图如下:三、预习思考题的实验验证分析预习思考题的实验分析验证(包括程序代码以及程序的执行结果)已经在预习报告中做出回答,在此不再进行赘述。
四、实验过程与结果1、实验过程:(1)双击计算机桌面上的TPC-2003实验系统配套的软件;(2)新建一个源程序,在当前运行环境下,选择菜单栏中的“文件”菜单,菜单下拉后选择“新建”,会弹出新建窗口,选择新建表单中的“ASM”,点击“确定”,新建汇编程序;(2)根据题目要求设计程序,并将其输入到软件界面上;(3)保存新建的源程序;(4)点击“汇编”的快捷键,编译调试窗口中显示出汇编结果,程序没有错误;(5)打开命令提示符操作界面,将生成的可执行文件拖入到其中,回车即可运行该程序;(6)对程序是否达到实验要求进行实验验证。
2、实验结果:本实验达到了以下要求1、利用INT 21H的1号功能,从键盘输入任意长度的字符串,以回车符结束;2、将输入的字符串存放在数据段中;3、对输入的字符串按ASCII码从小到大排序(ASCII小者占低地址存放);4、将排好序的字符串利用INT 21H的9号功能显示在微机屏幕上。
实验程序如下:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENTSTR DB 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROCMOV AX,DATAMOV DS,AXMOV SI,OFFSET STRINPUT: MOV AH,1INT 21HMOV [SI],ALINC SICMP AL,0DHJNZ INPUTDEC SIMOV BYTE PTR [SI],'$'DEC SIMOV BX,SIADDR2: MOV CX,BXMOV SI,OFFSET STR NEXT2: MOV AL,[SI]CMP AL,[SI+1]JBE NEXT1XCHG AL,[SI+1]MOV [SI],ALNEXT1: INC SILOOP NEXT2DEC BXJNZ ADDR2MOV DX,OFFSET STRMOV AH,9INT 21HMOV AH,4CHINT 21HMAIN ENDPCODE ENDSEND MAIN运行情况:输入一行需要排序的字符串,如下图所示回车,字符串输入结束,输出如下结果:五、结果分析与实验结论1、结果分析:本程序使用了21H的9号管脚进行输出,可以对大多数字符串进行从小到大的排序因其默认输出结束标志’$’,而’$’的ASCII码较小,故如果比较字符串大小时字符串中包含’$’,如下图就会出现输出如下情况即不能进行排序,故才是需要改成21H的2号功能才是实现输出。
北航微机原理-第四章PPT课件

定义宏:在代码段外定义 引用宏:在代码段内调用
举例:定义宏在引用宏之前 与子程序区别
调用方法不同:宏名 Vs. CALL指令 传递参数方式不同:实参/形参 Vs. R/M/堆栈 目标程序长度不同:宏展开 Vs. 同一目标程序段 执行速度不同:无需保存返回地址 Vs. 返回地址入栈出栈
100 DUP(?) 1,2,3 ‘ABCD’
汇编时,形成指令:
MOV CX, 100 MOV BL, 1 MOV AL, 1
MASM中的表达式
SEG, OFFSET
SIZE (SIZE = TYPE* LENGTH)
返回变量包含的总字节数 例如
MOV CX, SIZE M1
MOV BL, SIZE M2
目标文件 *.OBJ
LINK.EXE 链接
可执行文件 *.exe
程序错误 汇编错误—>MASM
运行错误—>调试工具Debug
汇编语言程序的执行
1、编写
使用文本编辑工具,以ASCII码的形式编写程序,程序文件后 缀名为.ASM
2、汇编
把源文件翻译成目标文件,.ASM->.OBJ,使用MASM命令, 如:C:\>MASM 文件名[.ASM];
START: PUSH DS XOR AX,AX
指令
PUSH AX
MOV AX, DATA
MOV DS, AX MOV DX, OFFSET X MOV AH, 9 INT 21H
由段组成 段定义伪指令格式
RET MAIN ENDP
由指令和伪指令组成
CODE ENDS
END MAIN
汇编语言程序分析
MOV AL, SIZE M3 汇编时,形成指令:
(完整版)北航微机原理实验报告

微计算机原理及运用实验报告目录实验一:I/O地址译码实验 (4)一、实验目的 (4)二、实验原理和内容 (4)三、实验程序 (4)四.实验总结 (5)实验二:8255并行接口实验 (6)一、实验目的 (6)二、实验原理和内容 (6)三、程序框图 (7)四.实验程序 (7)五.实验总结 (8)实验三:键盘显示控制实验 (9)一、实验目的 (9)二、实验内容及原理 (9)三、流程图 (10)四.程序 (10)五.实验总结 (13)实验四:8254定时器/计数器实验 (14)一、实验目的 (14)二、实验原理和内容 (14)三、实验程序 (14)四.实验总结 (15)实验五:继电器控制实验 (16)一、实验目的 (16)二、实验原理和内容 (16)三、实验中使用的程序 (16)四.实验总结 (18)实验六:DMA传送 (18)一、实验目的 (18)二、实验原理和内容 (18)三、程序 (19)四.实验总结 (20)实验七:8259 中断控制实验 (20)一、实验目的 (20)二、实验原理和内容 (21)三、流程图 (21)四.程序 (21)五.实验总结 (25)实验八:8255中断实验 (25)一、实验目的 (25)二、实验原理和内容 (25)三.实验程序 (26)四.实验总结 (27)实验一:I/O地址译码实验一、实验目的掌握I/O地址译码电路的工作原理。
二、实验原理和内容实验电路如附图1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
附图1 I/O地址译码电路利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
北航微机原理实验三报告

微机原理第三次实验报告一、实验目的1. 了解DVSTR710B实验平台的基本结构和使用方法。
2. 掌握实际硬件平台上的软硬件综合调试方法。
3. 掌握IO 接口的应用、定时器的设置、中断处理和串行通信。
二、实验设备DVSTR710B实验平台,J-Link仿真器,PC机,Windows XP操作系统和Keil for ARM(MDK4.14)开发环境,串口调试助手V2.1。
三、实验步骤环境准备:(1)检查Windows程序中是否有名称为“SEGGER”的程序组,如无,表示计算机上没有安装J-Link的驱动,请先运行 Setup_JLinkARM_V436k 进行安装。
(2)使用连接线连接J-Link仿真器与实验平台的JTAG端口。
(3)用USB 线将J-Link仿真器连接至计算机。
(4)连接实验平台的电源。
四、实验内容1.LED的控制代码及分析:LED.h文件中,LED_Init()函数写为:GPIO_Config(GPIO2, 0x5400,GPIO_OUT_PP);//第二个参数标志着个GPIO引脚的电平,若要使10,12,14输出高电平,则对应的二进制码为0101010000000000,即0x5400;且引脚应为输出状态。
GPIO_WordWrite(GPIO2, GPIO_WordRead(GPIO2) & 0x0);//与上同理,要关闭LED即将引脚置为低电平,同0相与即可。
实验结果:点击调试并全速运行后,三个LED灯交替闪烁。
2.按键信息采集代码及分析:Key.h文件中,所有的0xAA80写为0x0A80,因为要配置按键K1、K2和K3对应的PC7,9,11引脚为输入方式。
实验结果:按下K1、K2、K3分别会使L3、L4、L5亮起。
3.定时器和中断代码及分析:Main.c文件中,函数TIM_PrescalerConfig()的第二个参数由182修改成9,即TIM_PrescalerConfig(TIM0, 9);以实现20Hz频率定时。
微型计算机原理实验指导书-

微型计算机原理实验指导书目录一、基础实验部分实验一两个多位十进制数相加的实验 (1)实验二两个数相乘的实验 (3)实验三 BCD码相乘的实验 (5)实验四字符匹配程序 (7)实验五阶跃响应与冲激响应 (9)实验六零输入响应和零状态响应 (11)实验七信号的抽样与恢复 (13)二、选做实验部分实验八排序实验 (16)实验九8255A并行接口实验 (18)实验十串联谐振电路的特性研究 (20)实验十一一、二阶连续时间系统的模拟 (23)三、创新实验部分实验十二8259A中断控制器实验 (31)实验十三信号的分解与合成 (33)实验一两个多位十进制数相加的实验一、实验目的1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
二、实验仪器及材料计算机一台三、预习要求预习数据传送指令和算数运算指令四、实验内容将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
程序框图:五、实验报告写出源程序及注释六、思考题把源程序修改为任意两个六位十进制相加。
并思考如果最高位有进位怎么办?实验二两个数相乘的实验一、实验目的掌握乘法指令和循环指令的用法。
二、实验仪器及材料计算机一台三、预习要求预习乘法指令和循环指令。
四、实验内容实现十进制数的乘法。
被乘数和乘数均以ASCII码形式存放在内存中,乘积在屏幕上显示出来。
程序框图五、实验报告写出源程序及注释六、思考题修改程序,实现6位数乘2位数的功能。
实验三BCD码相乘的实验一、实验目的掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。
二、实验仪器及材料计算机一台三、预习要求预习乘法运算指令四、实验内容实现BCD码的乘法,要求被乘数和乘数均以组合的BCD码形式存放,各占一个内存单元,乘积存放在另外两个内存单元中。
微机原理II实验指导书(软件部分)revised

前言《微型计算机原理及应用》是一门实践性很强的专业技术基础课,因此,必须在课堂教学的基础上配以足够的实验或实践性教学环节,以便理论联系实际,使学生能深入理解课堂教学内容,加强学生动手能力,以加深对理论学习的理解和掌握,提高学生分析问题﹑解决问题的能力。
本实验指导书是《微型计算机原理及应用》一书的配套教材。
主要内容为汇编语言上机操作及程序调试方法及软件部分实验对于每一个实验都给出了实验目的﹑实验内容﹑预习要求﹑报告要求﹑实验提示﹑思考题。
实验提示部分我们仅给出部分文字提示和参考流程图,以作为学生自己编程时的参考。
我们主张学生在做实验前,必须要充分预习,充分准备,要依靠自己在实验前编出的程序,经过实验调试改正程序,得出正确的结果。
这样做实验,才能真正有收获,才能真正提高分析问题和解决问题的能力。
本实验指导书在编写的过程中,得到了本系的领导和老师的支持﹑指导和帮助,在此表示衷心的谢意。
由于编者水平有限,书中不妥或错误之处在所难免,欢迎大家在使用中提出宝贵意见。
编者2005年8月目录实验须知 (3)第一部分汇编语言上机操作及软件部分实验实验一汇编语言上机环境的熟悉和命令使用 (4)实验二利用D E B U G命令调试程序 (7)实验三汇编语言综合编程实验 (9)实验四利用中断指令进行输入输出程序设计 (12)实验须知一、预习要求1.实验前认真阅读实验教程中有关内容,明确实验目的、内容和实验任务。
2.每次实验前做好充分的预习,对所需预备知识做到心中有数。
3.实验前应编好源程序,并对调试过程、实验结果进行预测。
二、实验要求1.实验课请勿迟到,缺席。
2.爱护设备,保持清洁,不随意更换设备。
3.认真完成实验任务,实验结果经教师检查。
4.做硬件实验时,严禁带电操作,即所有的接线、改线及拆线操作均应在不带电的状态下进行,并注意防止导线堵塞插孔。
5.发生事故,应立即切断电源,并马上向教师报告,检查原因,吸取教训。
6.实验完毕,请整理实验设备,再离开实验室。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录第一章:汇编基础与硬件基础 (2)实验二TPC2300A集成开发环境 (2)内容1.2.2 分段存储结构和数据变量的定义 (2)内容1.2.3 汇编程序设计---数据串操作 (3)内容1.2.4 汇编程序设计--循环和分支程序 (3)内容1.2.5 汇编程序设计---子程序及其调用 (4)内容1.2.6 汇编程序设计--DOS中断调用 (5)实验三TPC-2003A接口箱系统硬件及逻辑电路 (6)内容1.3.2 I/O译码电路 (6)第二章基础实验 (7)实验一8253接口芯片基础 (7)内容2.1.1 8253用于手动脉冲计 (7)内容2.1.2 8253用于分频 (8)实验二8255接口芯片基础 (9)内容2.2.1 8255作为基本输入输出 (9)内容2.2.2 8255方式0的应用-红绿灯控制 (9)内容2.2.3 8255对8253GATE的控制 (11)内容2.2.4: 手动脉冲计数输出显示 (13)第三章综合实验 (14)实验一AD/DA接口芯片基础 (14)内容3.1.1:ADC0809的数据采集功能 (14)内容3.1.2:DAC0832的波形输出功能 (15)实验一8253/8255综合实验 (16)内容3.2.1: 继电器控制 (16)内容3.2.2: 自动计数输出显示 (18)内容3.2.3 直流电机转速显示与计算 (19)实验三8253/8255/DAC0832综合实验 (23)内容3.3.1:直流电机转速控制 (23)内容3.3.2:直流电机测速 (25)实验四8255综合实验 (28)内容3.4.1:步进电机控制 (28)第一章:汇编基础与硬件基础;* *;实验二 TPC2300A集成开发环境;* *;内容1.2.2 分段存储结构和数据变量的定义;******************************************;;* *;;* 编写程序统计字符串str的字符个数, *;;*存于counts单元。
字符串以“$”为结束符, *;;* 长度小于255个字符。
*;;* *;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 1-2-2.asm *;;******************************************;mydata segmentstr db 'assemble language$'counts db ?mydata endsmycode segmentassumecs:code,ds:datastart: mov ax,datamov ds, axmov cl,0mov bx, offset strnext: cmp [bx] '$'jz exitinc clinc bxjmp nextexit: mov counts,cl ;存储字符的个数mov ah,4chint21hmycode endsend start;******end of program 1-2-2.asm**************内容1.2.3 汇编程序设计---数据串操作;************************************************;;;* *;;* 将buffa开始的连续字节单元数 *;;* 传送到buffb开始的连续字操作数单元 *;;* (不考虑数据块的重叠) *;;* *;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 1-2-3.asm *;;************************************************;data segmentbufa dw 0234h,2345h,987fhdw 0c234h,0012h,1234h,7890hbufb dw 7dup(?)data endscode segmentassume cs:code,ds:datamov ax,datamov ds, axmov si,offset bufamov di,offset bufbmov cx,14next: mov ax,[si]mov [di],axinc siinc diloop next ;循环传送,直到传送完mov ah,4chint 21hcode endsend start;**********end of progme 1-2-3.asm***************;内容1.2.4 汇编程序设计--循环和分支程序;************************************************;;* 在字节存储单元d1、d2和d3中存有三个 *;;*不相等无符号数,由大到小排列后存于d1、d2、d2,*;;* 注意使用无符号数比较时的转移指令。
*;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 1-2-4.asm *;;************************************************;data segmentd1 db 30hd2 db 0e2hd3 db 80hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,d1mov bl,d2mov cl,d3cmp al,blja lplxchg al,bllpl: cmp al,clja lp2xchg al,cllp2: cmp bl,clja lp3xchg bl,cllp3: mov d1,almov d2,blmov d3,clmov ah,4chint 21hcode endsend start;**********end of program 1-2-4.asm*************;内容1.2.5 汇编程序设计---子程序及其调用;* *************************************************;;* 计算3个带符号数的绝对值之和,三个数长度为 *;;* 字类型,要求用子程序计算绝对值,用主程序实现 *;;* 累加;整理实验结果。
*;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 1-2-5.asm *;;************************************************;mydata segmentdata dw -20h, 34h, 21h,23a5h,1200habsm dw 0mydata endsmycode segmentassume cs:mycode, ds:mydatastart: mov ax,mydatamov ds,axmov si, offset datamov cx, 5xor bx,bxrept: mov ax,[si]call subabsadd bx,axinc siinc siloop reptmov absm,bx ;绝对值之和mov ah,4chint 21hsubabs proc nearand al, aljns bckneg albck: retsubabs endpmycode endsend start;**********end of program 1-2-5.asm**************;内容1.2.6 汇编程序设计--DOS中断调用;************************************************;;* 利用DOS中断6号功能调用,在屏幕上显示字符A~Z *;;* *;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 1-2-6.asm *;;************************************************;code segmentassume cs:codestart: mov dl,'A'mov cx,26next: mov ah,06h ;DOS调用,功能好06,dl中为在屏幕上显示的字符 int 21hinc dl ;下一个字符ASCIIloop next ;显示下一个字符mov ah,4chint 21hcode endsend start;**********end of program 1-2-6.asm*************;实验三 TPC-2003A接口箱系统硬件及逻辑电路内容1.3.2 I/O译码电路;************************************************;;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 1-3-2.asm *;;************************************************;ioport equ 0ec00h-0280h; 0ec00h替换为本机基地址outport1 equ ioport+2a0houtport2 equ ioport+2a8hcode segmentassume cs:codestart: mov dx,outport1out dx,alcall delay ;调延时子程序mov dx,outport2out dx,alcall delay ;调延时子程序mov ah,1 ;bios中断调用,判断有无键入字符,int 16hje start ;zf=1无键入,转start继续,zf=0有键入,结束mov ah,4chint 21hdelay proc near ;延时子程序mov bx,2000 ;修改计数值可改变LED亮灭频率lll: mov cx,0ll: loop lldec bxjne lllretdelay endpcode endsend start;**********end of program 1-3-2.asm*************;第二章基础实验实验一 8253接口芯片基础内容2.1.1 8253用于手动脉冲计; ;************************************************;*; Create Data: 26/06/2009 YHB *;;* Prog ID: 2-1-1.asm *;;************************************************;ioport equ 0d400h-0280h ; 0ec00h替换为本机基地址io53ctl equ ioport+283hio53_0 equ ioport+280hcode segmentassume cs:codestart: mov al,14h ;设置8253通道0为工作方式2,二进制计数mov dx,io53ctl ;8253 控制口端口out dx,al ;送控制字mov dx,io53_0 ;计数器0端口mov al,0fh ;设计数初值0FH (0aQ)out dx,al ;送计数初值lll: in al,dx ;读计数初值call disp ;调显示子程序push dx ;保护端口值,防止中断调用破坏mov ah,06h ;6号中断,mov dl,0ffh ;表示该功能调用是输入,如果dl不是0ffh,表示把dl中的asciia码输出 int 21hpop dxjz lll ;循环显示mov ah,4ch ;退出int 21hdisp proc near ;显示子程序push dx ;dx为端口地址,先保存起来,防止后面调用中断功能时使用dl寄存器时破坏dx值 and al,0fh ;首先取低四位,al值是读取的计数器的当前计数值mov dl,alcmp dl,9 ;判断当前计数值是否<=9jle num ;若为'0'-'9',其ASCII码值为计数值加30H,0+30h=30hadd dl,7 ;否为'A'-'F',其ASCII码值为计数值加37H, A+37h=41hnum: add dl,30hmov ah,02h ;中断功能号02,显示ASCII值为dl的字符int 21hmov dl,0dh ;显示回车符int 21hmov dl,0ah ;显示换行符int 21hpop dxret ;子程序返回disp endpcode endsend start;**********end of program 2-1-1.asm*************;内容2.1.2 8253用于分频; ;**************************************************;;* 用1MHz的频率源,输出1Hz的频率, *;;* 用示波器或者逻辑笔观察 *;;* *;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 2-1-2.asm *;;************************************************;ioport equ 0ec00h-0280h ;0ec00h替换为本机基地址io8253a equ ioport+280hio8253b equ ioport+281hio8253d equ ioport+283hcode segmentassume cs:codestart: mov dx,io8253d ;向8253写控制字mov al,36h ;使0通道为工作方式3out dx,al ;写入控制字mov ax,1000 ;写入循环计数初值1000mov dx,io8253aout dx,al ;先写入低字节mov al,ahout dx,al ;后写入高字节mov dx,io8253dmov al,76h ;设8253通道1工作方式2out dx,al ;写入控制字mov ax,1000 ;写入循环计数初值1000mov dx,io8253bout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节mov ah,4ch ;程序退出int 21hcode endsend start;;**********end of program 2-1-2.asm*************;实验二 8255接口芯片基础内容2.2.1 8255作为基本输入输出;************************************************;;* *;;* 端口设置: C口输入,A口输出 *; ;* *;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 2-2-1.asm *;;************************************************; ioport equ 0d400h-0280h ;0d400h替换为本机基地址io55a equ ioport+288hio55ctl equ ioport+28bhio55c equ ioport+28ahcode segmentassume cs:codestart: mov dx,io55ctl ;设8255为C口输入,A口输出 mov al,8bhout dx,al ;送入控制字inout: mov dx,io55c ;从C口输入一数据in al,dxmov dx,io55a ;从A口输出刚才自C口out dx,al ;所输入的数据mov dl,0ffh ;判断是否有按键,dos中断功能06hmov ah,06hint 21hjz inout ;若无,则继续自C口输入,A口输出;zf=1表示无键按下mov ah,4ch ;否则返回DOSint 21hcode endsend start;;**********end of program 2-2-1.asm*************;内容2.2.2 8255方式0的应用-红绿灯控制;************************************************;;*;* *;;* 十字路口红绿灯模拟 *;;* 端口各灯的设置: *;;* L7红 L6黄 L5绿 0 0 L2红 L1黄 L0绿 *;;* L7L6L5 模拟南北向,L2L1L0模拟东西向 *;;* *;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 2-2-2.asm *;;************************************************;data segmentioport equ 0ec00h-0280h ;0ec00h替换为本机基地址io55a equ ioport+288hio55b equ ioport+289hio55c equ ioport+28ahio55ctl equ ioport+28bhtraffctl db 24h,44h,81h,82hmsg db 0dh,0ah, 'check L7 L6 L5 and L2 L1 L0 ', 0dh,0ah,'press any ken to stop program',0ah,0dh,'$' data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset msg ;屏幕上显示提示信息mov ah,09h ;中断功能号09hint 21hctn: mov dx,io55ctlmov al,90hout dx,al ;设置8255为C口输出mov dx,io55cmov al,traffctlout dx,al ;南北绿灯,东西红灯,L7~L0 =24hcall delaymov al,traffctl+1 ;南北黄灯,东西红灯,L7~L0 =44hout dx,alcall delaymov al,traffctl+2 ;南北红灯,东西绿灯,L7~L0 =81hout dx,alcall delaymov al,traffctl+3 ;南北红灯,东西黄灯,L7~L0 =82hout dx,alcall delaypush dxmov ah,06hmov dl,0ffhint 21hpop dxjz ctn ;没有键按下,继续循环exit: mov ah,4chint 21hdelay proc near ;延时子程序,采用寄存器自减实现mov cx,0ffffhcxdown: mov si,0ffffhsidown: dec sijnz sidownloop cxdownretdelay endpcode endsend start;;**********end of program 2-2-2.asm*************;内容2.2.3 8255对8253GATE的控制;********************************************************;;* 8255对8253计数器门控 *; ; create 06/07/2009 by YHB *;; program ID: 2-2-3.asm *;;*********************************************************; ioport equ 0ec00h-0280hio55ctl equ ioport+28bh ;8255控制口io55a equ ioport+288h ;8255 A口io55c equ ioport+28ah ;8255Cio53ctl equ ioport+283h ;8253控制io53_2 equ ioport+282h ;8253计数器2io53_1 equ ioport+281h ;8253计数器1io53_0 equ ioport+280h ;8253计数器0data segmentmess db 'Press any key to exit the program',0aH,0dH,'$'led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset mess ;在屏幕上显示提示信息mov ah,09hint 21h ;显示提示信息mov dx,io55ctl ;8255,方式0,A口输出,C口高四位输入,C口低四位输出 mov al,88hout dx,almov dx,io53ctlmov al,36h ;计数器0,方式3,先读写低8位,再读写高8位out dx,al ;送控制端口mov dx,io53_0mov ax,10000 ;输入时钟1MHZ,计数初值50000,输出时钟周期50msout dx,alnopnopmov al,ahout dx,almov dx,io53ctlmov al,54h ;计数器1,方式2,只读写低8位out dx,al ;送控制端口mov dx,io53_1mov al,100 ;输入CLK1接OUT0,计数初值100out dx,al ;送初值mov dx,io53ctlmov al,94h ;计数器2,方式2,只读写低8位out dx,almov dx,io53_2mov al,0fh ;计数初值out dx,alctn: mov dx,io53_2;读当前计数值并显示call leddispmov ah,01h ;判断有无键按下int 16hjnz stp ;zf=0,有键按下,返回,zf=1,无键按下,继续程序 mov dx,io55cin al,dx ;读C口状态and al,80h ;判断PC7是否为1jnz seth ; 如为1,转seth,mov dx,io55cmov al,0h ;否者,设置PC0为低电平out dx,aljmp ctnseth: mov dx,io55c ;设置PC0为高电平mov al,0ffhout dx,aljmp ctnstp: mov ah,4ch ;退出程序,返回DOSint 21hleddisp proc nearpush dxin al,dx ;读当前计数值mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码代表的LED数字,存于almov dx,io55a ;从8255的A口输出out dx,alpop dxretleddisp endpcode endsend start;****************end of program 2-2-3.asm******************************;内容2.2.4: 手动脉冲计数输出显示************************************************;;* *;;* 输入为脉冲发生器,在LED上输出F~0的计数值 *;;* *;;* Create Data: 26/06/2009 YHB *;;* Prog ID: 2-2-3.asm *;;************************************************;data segmentioport equ 0ec00h-0280h ;0ec00h由本机接口卡实际基地址代替io55a equ ioport+288hio55b equ ioport+289hio55c equ ioport+28ahio55ctl equ ioport+28bhio53_0 equ ioport+280hio53_1 equ ioport+281hio53_2 equ ioport+282hio53ctl equ ioport+283hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71hmesg db 0dh,0ah,'check led for timing value, press any key to stop program',0dh,0ah,'$' data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io55ctl ;使8255的A口为输出方式mov ax,80hout dx,almov dx,io55a ;LED清屏mov al,0out dx,almov dx,offset mesg ;屏幕上显示提示mov ah,09hint 21hmov dx,io53ctl ;向8253写控制字mov al,14h ;使0通道为工作方式2,二进制计数out dx,almov al,0fh ;计数初值mov dx,io53_0out dx,alctn: call leddisp ;调LED显示子程序push dx ;保存8253-2通道端口地址mov ah,06hmov dl,0ffhint 21hpop dxjz ctn ;没有键按下时,继续循环mov ah,4ch ;有键按下,退出int 21hleddisp proc nearpush dxin al,dx ;读当前计数值mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码代表的LED数字,存于almov dx,io55a ;从8255的A口输出out dx,alpop dxretleddisp endpcode endsend start;;**********end of program 2-2-3.asm*************;第三章综合实验实验一 AD/DA接口芯片基础内容3.1.1:ADC0809的数据采集功能;************************************************;;* *;;* ADC0809的数据采集功能 *;;* *;;* Create Data: 26/06/2009 YHB *; ;* Prog ID: 3-1-1.asm *; ;************************************************; ioport equ 0ec00h-0280h ;0ec00h替换为本机基地址io0809a equ ioport+298hcode segmentassume cs:codestart: mov dx,io0809a ;启动A/D转换器out dx,almov cx,0ffh ;延时delay: mov si,0ffh ;选择显示刷新速率delay1: dec sijnz delay1loop delayin al,dx ;从A/D转换器输入数据mov bl,al ;将AL保存到BLmov cl,4shr al,cl ;将AL右移四位;bios 中断调用。