北京化工大学微机接口技术课程实验报告
微机原理与接口技术实验报告一

微机原理与接口技术实验报告(一)实验内容一:1、实验目的: 考察对内存寻址方式、8086指令的理解内存中的数据排列如上表所示,各寄存器内容如下DS=2100H ES=2111H SS=2000H BX=106H CX=3H SI=106H DI=12H BP=1100H SP=1100HFR=3402H (FR 标志寄存器,FR 中的DF -字符串操作方向位为1)在执行下列指令后,写出寄存器AX中的内容 0) pop ax; AX= 1) mov ax,bx; AX= 2) mov ax,[bx];AX= 3) mov ax,102H;AX= 4) mov ax,[102H];AX= 5) mov ax,6[SI];AX= 6) lea ax,6[BX][DI];AX= 7) mov ax,[BP+DI];AX= 8) rep lodsw;AX= , 还需写出SI=2、实验内容: (1)开始菜单下选择运行,输入cmd 回车,在开启的窗口中输入debug 后回车,进入程序输入环境(2)利用r 指令显示当前各寄存器储值并按照上文中的寄存器值进行修改 结果如下:物理地址 内容(字节) 物理地址 内容(字节)21100H BEH 21110H 99H 21101H 02H 21111H 00H 21102H 01H 21112H E8H 21103H 8BH 21113H 7EH 21104H 44H 21114H E0H 21105H 02H 21115H 74H 21106H 29H 21116H 06H 21107H 44H 21117H E8H 21108H 04H 21118H 17H 21109H 9CH 21119H 01H 2110AH 50H 2111AH ACH 2110BH E6H 2111BH EBH 2110CH 99H 2111CH 34H 2110DH C6H 2111DH 00H 2110EH 06H 2111EH 30H 2110FHE8H2111FH0BH(3)d指令查看21100H——2111FH内存单元的内容(4)e指令对该段内存单元进行赋值(5)a指令按顺序输入要求中列出的指令(6)u指令进行反汇编(7)t指令(跟踪命令)逐条运行指令,观察记录指令运行结果3、实验结果0) pop ax; AX=02be1) mov ax,bx; AX=01062) mov ax,[bx];AX=44293) mov ax,102H;AX=01024) mov ax,[102H];AX=8b015) mov ax,6[SI];AX=c6996) lea ax,6[BX][DI];AX=011e7) mov ax,[BP+DI];AX=7ee88) rep lodsw;AX=4429, SI=0108实验内容二:1、实验目的:熟悉masm for windows 软件的应用,体会汇编程序的编写、编译、执行及调试等各个环节。
微机接口技术报告

微机原理实验报告实验四 8255A并行接口实验一、实验目的1、学会通过PC总线、驱动器、译码器等在PC机外部扩充新的芯片。
2、了解8255A并行口的工作原理。
3、掌握8255A初始化的程序设计方法。
4、掌握8255A方式0的基本输入/输出和方式1的选通型输入/输出方式的使用方法。
二、实验内容1、使8255A工作于工作方式0,将由C口读入的开关状态从A口输出到LED上显示出来。
断开电源,按虚线连接电路,按图2-1将8255A接入系统。
具体包括:将8255A的CS接I/O地址输出端288H~28FH,C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2、使8255A工作于方式1,将由A口读入的状态从B口输出到LED上显示出来。
断开电源,按图2-2将8255A接入系统。
具体包括:将8255A的CS接I/O地址输出端288H~28FH,A口接逻辑电平开关K0~K5,B口接LED显示电路L0~L5,C口相应位分别接开关或LED发光二极管。
三、程序流程图实验一:8255A工作于方式0,将C口定义为输入方式,A口定义为输出方式。
程序流程图如图所示。
实验二:每个判断命令前都加入一个按键返回判断。
程序流程图如图四、程序代码实验一程序:PPIA EQU 288HPPIB EQU 289HPPIC EQU 28AHPPICTL EQU 28BHDATA SEGMENTMESS1 DB '8255A IN MODE 0!',0DH,0AH,'$'MESS2 DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV DX,OFFSET MESS2MOV AH,09HINT 21HMOV DX,PPICTL ;8255A初始化MOV AL,89HOUT DX,ALCOUNT:MOV DX,PPICIN AL,DX ;C口读入MOV DX,PPIAOUT DX,AL ;A口输出MOV AH,06HMOV DL,0FFHINT 21HJZ COUNT ;若有键按下则退出 MOV AX,4C00HINT 21HCODE ENDSEND START实验二程序:PPIA EQU 288HPPIB EQU 289HPPIC EQU 28AHPPICTL EQU 28BHDATA SEGMENTMESS1 DB '8255A IN MODE 0!',0DH,0AH,'$'MESS2 DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV DX,OFFSET MESS2MOV AH,09HINT 21HMOV DX,PPICTL ;8255A初始化 MOV AL,0B4HOUT DX,ALCOUNT:MOV DX,PPICIN AL,DXAND AL,20HCMP AL,20HJNZ COUNTMOV DX,PPIA IN AL,DXPUSH AX ABC: MOV DX,PPICIN AL,DXAND AL,02HCMP AL,02HJNZ ABCPOP AXMOV DX,PPIBOUT DX,ALMOV AH,06H MOV DL,0FFHINT 21HJZ COUNTMOV AX,4C00HINT 21HCODE ENDSEND START五、实验过程及结果六、实验思考题1、答:A口及B口以方式1工作时,只要不是作为联络线的C口其他位,都可以由程序按位设定为基本的输入输出线,用于传输数据。
微机与接口技术实验报告

微机与接口技术实验报告微机与接口技术实验报告引言微机与接口技术是计算机科学中的重要领域,它涉及到计算机与外部设备之间的通信和数据传输。
本实验报告旨在介绍微机与接口技术的基本概念、实验过程和结果,以及对实验结果的分析和讨论。
一、实验目的本实验旨在通过设计和实现一个简单的数据输入输出接口,加深对微机与接口技术的理解。
具体目标包括:1. 理解接口技术的基本原理和工作方式;2. 掌握接口电路的设计和实现方法;3. 学会使用编程语言控制接口电路进行数据输入输出。
二、实验原理1. 接口技术的基本原理接口技术是计算机与外部设备之间进行数据传输的关键。
通过接口电路,计算机可以与各种外部设备进行通信,实现数据的输入和输出。
接口电路通常由硬件和软件两部分组成,硬件部分负责物理连接和信号转换,而软件部分则负责控制和管理数据传输。
2. 接口电路的设计和实现接口电路的设计需要考虑多个因素,包括外部设备的接口标准、数据传输速率、数据格式等。
常用的接口标准包括串行接口(如RS-232)和并行接口(如Centronics接口)。
设计接口电路时,需要根据具体需求选择合适的接口标准,并合理设计电路结构和信号处理方式。
3. 编程语言控制接口电路为了实现数据的输入和输出,需要使用编程语言控制接口电路。
常用的编程语言包括C、C++和Python等。
通过编写相应的程序,可以控制接口电路进行数据传输,并实现与外部设备的交互。
三、实验过程1. 硬件设计与连接根据实验要求,设计并连接适当的硬件电路,包括接口芯片、电阻、电容等。
确保电路连接正确,且与计算机的接口兼容。
2. 软件编程使用C语言编写程序,实现对接口电路的控制。
程序应能够实现数据的输入和输出,并确保数据的正确传输和处理。
3. 实验操作根据实验要求,进行相应的实验操作。
包括数据输入和输出测试、数据传输速率测试、数据格式转换测试等。
记录实验过程中的数据和结果。
四、实验结果分析1. 数据输入输出测试通过实验操作,测试接口电路的数据输入和输出功能。
微机原理与接口技术实验报告

微机原理与接口技术实验报告引言微机原理与接口技术是计算机科学与技术专业的一门重要课程,通过实验的方式来深入理解微机原理和接口技术的原理和应用。
本实验报告将详细介绍我们在实验中所学到的内容和实验结果。
一、实验目的微机原理与接口技术实验的主要目的是让学生通过实验来了解和掌握微机系统的结构与工作原理,以及接口技术的基本原理和应用。
通过实验,我们可以加深对微机原理和接口技术的理解,并能够熟练操作相应的实验设备和软件。
二、实验内容本次实验主要包括以下几个方面的内容:1. 微机系统的组成与原理:了解微机系统的基本组成部分,包括微处理器、存储器、输入输出设备等,并学习它们的工作原理和相互之间的联系。
2. 微机系统的调试与测试:学习使用调试工具和测试设备来验证微机系统的正确性和稳定性,通过调试和测试来发现和排除系统中的问题。
3. 接口技术的原理与应用:了解各种接口技术的原理和应用,包括并行接口、串行接口、USB接口等,学会设计和实现简单的接口电路。
4. 接口电路的设计与调试:通过实际设计和调试接口电路,加深对接口技术原理的理解,并能够解决实际问题。
三、实验过程及结果在实验中,我们首先学习了微机系统的基本结构和工作原理,并通过实际操作,搭建了一个简单的微机系统。
通过调试和测试,我们验证了系统的正确性和稳定性。
接着,我们学习了各种接口技术的原理和应用。
我们以并行接口为例,设计了一个简单的并行接口电路,并通过实验验证了其正确性。
同时,我们还学习了串行接口和USB接口的原理,并了解了它们在实际应用中的重要性。
在接口电路的设计和调试过程中,我们遇到了一些问题,例如信号传输的稳定性、接口电路的兼容性等。
通过分析和调试,我们逐步解决了这些问题,并取得了令人满意的实验结果。
四、实验总结通过本次实验,我们深入了解了微机原理和接口技术的基本原理和应用。
通过实际操作和调试,我们不仅掌握了微机系统的组成和工作原理,还学会了设计和实现简单的接口电路。
微机原理与接口技术实验报告

微机原理与接口技术实验报告实验目的:本次实验旨在通过实际操作,加深对微机原理与接口技术的理解,掌握接口技术的基本原理和应用方法,提高学生的动手能力和实际应用能力。
实验内容:1. 学习并掌握微机原理与接口技术的基本知识;2. 了解并熟悉常见的接口技术及其应用;3. 进行实际操作,设计并完成一个简单的接口电路。
实验仪器与设备:1. 个人电脑;2. 电子元件,电阻、电容、集成电路等;3. 实验板、示波器、示教电脑等。
实验步骤:1. 阅读相关的微机原理与接口技术的教材,了解基本原理;2. 学习常见的接口技术,例如并行接口、串行接口等;3. 进行实际操作,设计一个简单的接口电路,包括硬件设计和软件编程;4. 调试电路,确保接口电路能够正常工作;5. 编写实验报告,总结实验过程和实验结果。
实验结果与分析:经过实际操作,我们成功设计并完成了一个简单的接口电路。
在实验过程中,我们深入理解了微机原理与接口技术的相关知识,掌握了接口技术的基本原理和应用方法。
通过调试电路,我们验证了接口电路的正常工作,加深了对接口技术的理解。
结论:本次实验使我们更加深入地了解了微机原理与接口技术,提高了我们的动手能力和实际应用能力。
通过设计和完成接口电路,我们对接口技术有了更加直观的认识,为今后的学习和工作打下了坚实的基础。
总结:微机原理与接口技术是计算机专业的重要课程,通过实验学习,我们不仅加深了对知识的理解,还提高了动手能力和实际应用能力。
希望同学们能够认真对待每一次实验,不断提升自己的能力,为未来的发展打下坚实的基础。
至此,本次微机原理与接口技术实验报告完毕。
微机接口技术实验报告并行接口实验

微机接口技术实验报告并行接口实验系别: 计算机科学与技术完成时间:2012-5-15一、实验目的1.熟悉并行接口电路;2.掌握8255并行接口芯片及8253定时器的应用及其编程技术。
二、实验内容及要求通过对8255芯片的编程,使得实验台上的步进电机按顺时针或逆时方向转动,同时扬声器(模拟电子琴)做高8度和低8度循环发音:1. 控制步进电机转动和电子琴发音;2.使用K0控制步进电机顺逆时针转动和电子琴发高低音;3.使用K1控制步进电机和电子琴速度(分快和慢两种速度);4.使用K2启动和停止步进电机转动和电子琴发音。
三、实验原理1、可编程并行芯片8255A并行接口即同时在多根I/O线上,以数据字节或字为单位实现CPU通过I/O端口与I/O 设备或被控制对象之间的信息传递,如计算机与打印机,A/D和D/A转换器,开关量接口等。
8255及其改进型8255A是最广泛应用的并行I/O接口。
8255A的主要性能参数如下:(1)8255A内共有4个端口,分别为口A、口B、口C和控制端口。
前三个端口为8位并行I/O端口,常用于传送数据信息;控制端口是用于接收CPU送来的控制命令,即控制字。
(2)8255A芯片可以三种不同的工作方式与I/O设备进行数据传输,具体方式由控制字来设定。
(3)8255与CPU之间交互信息可以使用中断方式进行。
它内部有三个中断源,分别产生与方式1(1个)和方式2(2个)中。
(4)8255A所有信号与TTL信号兼容,可直接与CPU的三总线连接使用。
(5)8255A使用单一的+5V电源,单项时钟。
8255A的三种工作方式:方式0——基本的输入/输出方式,方式1——选通的输入/输出方式,方式2——双向的输入/输出方式。
本次实验采用方式0,将口A和口B作为输出,分别控制步进电机的旋转和电子琴的发音,口C作为控制输入端。
根据端口编址及寻址方式,设定端口A的地址为288H,端口B地址为289H,端口C地址为28AH,控制端口的地址为28BH。
微机原理与接口技术实验报告二

微机原理与接口技术实验报告(二)1、实验内容一:实验目的:(1) 阅读《实验操作.ppt》, 学习汇编工具的使用(2) 学习附录的程序代码, 理解并输入、编译和查错3) 学习利用编译错误信息进行附录的程序修改;(程序包含一个语法错误和一个逻辑错误)4)学习程序流程控制: (条件跳转指令ja jb (call指令, 观察程序执行时堆栈的变化(学会用debug –g命令设置断点);5 )学习程序中有限的寄存器的使用。
2.实验内容:(1)打开masm for windows软件, 在其中输入实验要求附给的程序, 保存后运行, 程序报错:(2)经分析发现, “noneeded”没有定义, 改为“notneeded”后正常运行(3)运行过程中发现当字母或数字个数达到两位数时, 统计结果的各位与十位对调了。
如下图, 字母数应为13, 但显示为31(4)经检查, 发现第80行程序有误, inc指令应改为dec指令。
运行后程序正常, 调试完毕。
如下图程序框图如下:实验内容二:1.实验目的及内容:编写完整程序, 实现功能:统计以下字符串STR中空格的数目, 结果保存在COUNT中, 并把个数在屏幕上显示出来。
STR DB ' AB CDE FG H I J K L MNOPQ RST UV W XYZ 12 34 56 78 9'L EQU $-STRCOUNT DB ?(字符串STR可以从这里直接拷贝到程序中)实验结果:程序如下:dispmsg macro messgemov ah,9lea dx,messgeint 21hendmDATA segmenttishi db 0dh,0ah,'the original string is:' string db ' AB CDE FG H I J K L MNOPQ RST UV W XYZ 12 34 56 78 9' STRINGLEN= $-stringnewline db 0dh,0ahNspace db 0dH,0aH,'Number of char space is:',?,?Nsp db ?,'$'DATA endsSTACK segment stack 'stack'sta db 100 dup(?)stack endsCODE segmentASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,seg DATAMOV DS,AXxor cx,cxxor dl,dlmov cl,stringlenlea bx,stringcnt:mov al,[bx]cmp al,' 'jz yesspinc blloop cnt jmp shijinzhiyessp:inc dlinc blloop cntjmp shijinzhishijinzhi:lea bx,Nspmov ah,02hint 21hcall char2asc dispmsg tishiMOV AH,4CHINT 21Hchar2asc procmov dl,10 next: xor ah,ahdiv dladd ah,'0'mov [bx],ahdec bxor al,aljnz nextretchar2asc endpcode endsend startEND START运行结果如下:程序流程图如下:实验中遇到的问题及解决方法:1.汇编语言中寄存器有限, 在使用时注意是否保存寄存器中原有的值, 防止在使用寄存器时将原值改变。
微机接口技术与应用实验报告

微机接口技术与应用课程设计学校名称:院系:班级:小组成员:一.实验名称交通灯设计二.实验目的用软件模拟交通灯并在硬件设备实现。
三.实验环境四.实验说明交通灯分南北向和东西,一边三个,分别是绿红黄,红绿黄灯交替有四种情况,依次为:0--东西绿灯,南北红灯1--东西黄灯,南北红灯2--东西红灯,南北绿灯3--东西红的,南北黄灯。
当有黄灯亮时停顿1000s,其余的停顿2000s。
五.连接试验箱8255与280~28f连接,PA0,PA1,PA2,PA3,PA4,PA5口分别与L0,L1,L2,5,L6,L7相连接。
六.实验代码#include<stdio.h>#include<conio.h>#include "ApiExusb.h"#pragma comment(lib,"ApiExusb.lib")#include <windows.h>// 回调函数声明LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);// 初始化窗口类声明BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName);// 初始化窗口声明BOOL InitWindows(HINSTANCE hInstance, int nCmdShow, char *lpszClassName, char *lpTitle);WNDCLASS wndclass; // 定义一个窗口类HWND hwnd; // 定义一个窗口句柄int nNum=0; // 为灯的状态赋初值,记录交通灯的状态,0--东西绿灯,南北红灯1--东西黄灯,南北红灯//2--东西红灯,南北绿灯3--东西红的,南北黄灯int status[4]={0x21,0x11,0x0c,0x0a}; //控制试验箱灯的状态POINT pt[6]={{20,20},{80,20},{140,20},{20,80},{80,80},{140,80}}; //六盏灯的圆心坐标上面为东西,下面为南北,从左到右依次为绿黄红int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){MSG Msg; // 定义消息char lpszClassName[] = "交通灯"; // 窗口的类名char lpTitle[] = "基本绘图-交通灯"; // 窗口标题名if(!Startup()) /*打开设备*/{//printf("ERROR: Open Device Error!\n");return 0;//exit(0);}printf("Enter any key will return:\n");PortWriteByte(0x28b,0x80); //向控制口写命令,控制c口输出// 初始化窗口类if (!InitWindowsClass(hInstance, lpszClassName)){return FALSE;}// 初始化窗口if (!InitWindows(hInstance, nCmdShow, lpszClassName, lpTitle)){return FALSE;}//消息循环while(GetMessage(&Msg, NULL, 0, 0)){TranslateMessage(&Msg);DispatchMessage(&Msg);}Cleanup(); /*关闭设备*/return Msg.wParam; // 程序终止时将信息返回系统}// 初始化窗口类定义BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName){//1、窗口类定义wndclass.style = 0; // 窗口类型为默认类型wndclass.lpfnWndProc = WndProc; // 窗口处理函数为WNDPROCwndclass.cbClsExtra = 0; // 窗口类无扩展wndclass.cbWndExtra = 0; // 窗口实例无扩展wndclass.hInstance = hInstance; // 当前实例句柄wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 窗口的最小化图标为默认图标wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口采用箭头光标wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 窗口采用白色背景wndclass.lpszMenuName = NULL; // 窗口中无菜单wndclass.lpszClassName = lpszClassName; //类名为lpClassName//2、注册窗口类if (!RegisterClass(&wndclass)){ // 如果注册失败则发出警告声音MessageBeep(0);return FALSE;}return TRUE;}// 初始化窗口声明BOOL InitWindows(HINSTANCE hInstance, int nCmdShow, char *lpszClassName, char *lpTitle)//3、创建窗口hwnd = CreateWindow(lpszClassName,lpTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,600,450,NULL,NULL,hInstance,NULL);//4、显示窗口ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);return TRUE;}// 回调函数定义LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){HDC hDC; // 定义设备环境句柄HPEN hPen; // 定义画笔句柄HBRUSH hBrush; // 定义画刷句柄PAINTSTRUCT PtStr; // 定义包含绘制信息的结构体变量int R = 10;// 定义圆的半径switch(message){case WM_KEYDOWN: //响应按键消息//----未完待续break;case WM_PAINT:{ // 处理绘图消息hDC = BeginPaint(hwnd, &PtStr); // 得到设备句柄SetMapMode(hDC, MM_ANISOTROPIC); // 设置映像模式SetWindowExtEx(hDC, 400, 300, NULL); // 设置窗口区域(逻辑单位)400,300SetViewportExtEx(hDC, 600, 450, NULL); // 设置视口区域(物理单位)SetViewportOrgEx(hDC, 200, 200, NULL); // 设置视口原点坐标为(300,200)hPen = (HPEN)GetStockObject(BLACK_PEN);SelectObject(hDC, hPen);// 绘制六盏交通灯外圆int i=0;if(status[nNum]&0x20)hBrush = CreateSolidBrush(RGB(0, 255, 0)); //东西为绿灯elsehBrush = CreateSolidBrush(RGB(255, 255, 255));SelectObject(hDC, hBrush);Ellipse(hDC,pt[i].x-R,pt[i].y-R,pt[i].x+R,pt[i].y+R);i++;//东西为黄灯if(status[nNum]&0x10)hBrush = CreateSolidBrush(RGB(255, 255, 0));elsehBrush = CreateSolidBrush(RGB(255, 255, 255));SelectObject(hDC, hBrush);Ellipse(hDC,pt[i].x-R,pt[i].y-R,pt[i].x+R,pt[i].y+R);i++;//东西为红灯if(status[nNum]&0x08)hBrush = CreateSolidBrush(RGB(255, 0, 0));elsehBrush = CreateSolidBrush(RGB(255, 255, 255));SelectObject(hDC, hBrush);Ellipse(hDC,pt[i].x-R,pt[i].y-R,pt[i].x+R,pt[i].y+R);i++;//南北为绿灯if(status[nNum]&0x04)hBrush = CreateSolidBrush(RGB(0, 255, 0));elsehBrush = CreateSolidBrush(RGB(255, 255, 255));SelectObject(hDC, hBrush);Ellipse(hDC,pt[i].x-R,pt[i].y-R,pt[i].x+R,pt[i].y+R);i++;//南北为黄灯if(status[nNum]&0x02)hBrush = CreateSolidBrush(RGB(255, 255, 0));elsehBrush = CreateSolidBrush(RGB(255, 255, 255));SelectObject(hDC, hBrush);Ellipse(hDC,pt[i].x-R,pt[i].y-R,pt[i].x+R,pt[i].y+R);i++;//南北为红灯if(status[nNum]&0x01)hBrush = CreateSolidBrush(RGB(255, 0, 0));elsehBrush = CreateSolidBrush(RGB(255, 255, 255));SelectObject(hDC, hBrush);Ellipse(hDC,pt[i].x-R,pt[i].y-R,pt[i].x+R,pt[i].y+R);i++;PortWriteByte(0x28a,status[nNum]);if(kbhit())exit(0);if((status[nNum]&0x02)||(status[nNum]&0x10)) //有黄灯亮,则睡1000,否则睡2000Sleep(1000);elseSleep(2000);nNum=(++nNum)%4; //控制交通灯循环InvalidateRect(hwnd, NULL, 1); // 重绘窗口区域DeleteObject(hPen);DeleteObject(hBrush);EndPaint(hwnd, &PtStr);break;}case WM_DESTROY:{PostQuitMessage(0);}default:{return DefWindowProc(hwnd, message, wParam, lParam);}}return 0;}七.实验现象试验箱上红绿灯与Win32执行出来的图形界面上的模拟红绿灯交替亮现象是同步的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京化工大学测控专业微机接口技术课程综合创新实验报告
目录
1.课程名称 (1)
2.课程背景 (1)
3.功能分析. (1)
4.设计 (1)
4.1 硬件设计 (1)
4.2 软件设计 (3)
4.3 主题代码 (3)
5.设计心得 (6)
5.1收获与心得 (6)
5.2 思考 (7)
6.参考文献 (7)
1.实验名称基于计时中断的自动清零计数器
2.实验背景
设计一个能实现在数码管上显示的00~99的自动清零计数器,并且计数频率可调。
3.功能分析
为了实现上述要求,有三个工作要做:一是利用可编程定时器/计时器82C54产生一个周期约为2s的方波作为中断的触发信号;二利用可编程中断控制器82C59A响应外部中断源,中断触发信号来自设计的方波;三利用可编程并行接口芯片82C55A驱动数码管显示,利用六位数码管的的低两位来显示出当前的计数值。
4.设计
4.1.硬件设计
先进行硬件设计和端口地址选择。
82C54的电路结构原理如图1所示。
图1.自动清零计数装置电路结构原理1
82C54的端口地址为0040H(通道0),0041H(通道1),0042H(通道2),0043H(命令口)。
通道0作计数器使用,工作在3方式,目的是产生一个方波,GTAE0接+5V,CLK0接由系统8MHZ时钟分频得到1MHZ的脉冲信号。
输出端OUT0,接到中断控制器的IR3端口,利用OUT0输出方波的上升沿触发中断。
下图是中断控制器的硬件设计图。
图2.自动清零计数装置中断结构原理
如图,82C59A的IR3端口接82C54的OUT0端口,中断请求线INT接到8086的INTR,中断回答线INTA接到8086的INTA;使能端CS接到实验箱的FF80H端口。
这样就实现了82C54的OUT0产生的方波来一次上升沿就触发一次中断。
下图是可编程并行芯片82C55A的硬件图:
图3.自动清零计数装置82C55A结构
如图,当82C55A用于数码管显示时,PA口作为键扫/字位口;PB口作为字形口,PC口作为键入口;即PA口作为位选信号,PB口作为段选信号。
数码管的最低位用来显示当前计数值的个位数字,次低位用来显示当前计数值的十位数
字,通过添加延时,可达到尽量无抖动和尽量无消隐的效果。
下图是实验流程图:
图4.自动清零计数装置流程图
4.2.软件设计
根据上述硬件设计的安排和设计目标的要求,可设定:
通道0的方式命令为00110110B=36H,要产生周期约为2s的方波,根据如图公式:
图3
可得定时常数为0C350H。
4.3主体代码
汇编语言程序清单如下:
CODE SEGMENT
ASSUME CS:CODE
INTPORT1 EQU 0FF80H
INTPORT2 EQU 0FF81H
INTQ3 EQU INTREEUP3
TCONTRO EQU 0043H
TCON0 EQU 0040H
PA EQU 0FF20H
PB EQU 0FF21H
PC EQU 0FF22H
CTL EQU 0FF23H
ORG 12D0H
START: JMP START0
BUF DB?,?,?,?,?,?
INTCNT DB?;个位数字
INTCNT10 DB?;十位数字
TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;0-9 START0: CLD
;8255初始化
MOV DX, CTL
MOV AL, 80H
OUT DX, AL
;8259初始化
MOV AL,13H
MOV DX,INTPORT1
OUT DX,AL
MOV AL,08H
MOV DX,INTPORT2
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,0F7H
OUT DX,AL
;8253初始化L
MOV DX,TCONTRO
MOV AL,36H ;计数器0,先写低字节再写高字节,方式3 OUT DX,AL
MOV DX,TCON0
MOV AX,0C350H ;设置计数初值
MOV DX,TCON0
OUT DX,AL ;先写低字节
MOV AL,AH
OUT DX,AL ;再写高字节
; 修改中断变量
MOV AX,0H
MOV ES,AX
MOV DI,002CH
LEA AX,INTQ3
STOSW
MOV AX,0000H
STOSW
MOV INTCNT,0H ;TIME=0 STI
;等待中断
WATING:
MOV AL, INTCNT
MOV AH,0
CALL DISP
CALL DELAY
JMP WATING
;中断服务子程序
INTQ3: CLI ;关中断
PUSH AX ;保护现场
PUSH BX
PUSH CX
PUSH DX
MOV AL,INTCNT
INC AL
CMP AL, 10
JNZ INTRE2
MOV AL, 0
INC INTCNT10
CMP INTCNT10,10
JNZ INTRE2
MOV INTCNT10,0
INTRE2:
MOV INTCNT,AL
MOV AL,20H
MOV DX,INTPORT1
OUT DX,AL
POP DX ;恢复现场
POP CX
POP BX
POP AX
STI
IRET
;8255显示子程序AL
DISP: ;显示个位数字PUSH AX
PUSH BX
PUSH DX
MOV DX, PB
MOV BX, OFFSET TAB
XLAT TAB
OUT DX, AL
MOV AL, 0FEH
MOV DX, PA
OUT DX, AL
CALL DELAY
DISP1: ;显示十位数字MOV AL,INTCNT10
MOV DX, PB
MOV BX, OFFSET TAB
XLAT TAB
OUT DX, AL
MOV AL, 0FDH
MOV DX, PA
OUT DX, AL
POP DX
POP BX
POP AX
RET
DELAY:
PUSH CX
MOV CX, 0FFH
D: NOP
LOOP D
POP CX
RET
CODE ENDS
END START
5.设计心得
5.1收获与心得
本次设计中,我们小组一起学习和讨论了82C55A,82C59A以及82C54的基本原理,同时结合这三种芯片设计出基于计时中断的自动清零计数器,我们都这三种芯片的实际应用有了更加深刻的理解。
虽然在实验期间遇到一些问题,但我们都尽量自己去查资料解决,这些都是很锻炼我们自己的。
5.2思考
在本次设计中,如有需要,可以把功能改进,如增加按键选择模式,可以选择计数/定时模式,还可以把计数/定时范围由两位扩展到四位。
6.参考文献
[1] 刘乐善.32位微型计算机接口技术及应用 [M] . 武汉:华中科技大学出版社,2006
[2] 杨素行。
微型计算机系统原理及应用(第三版)[M].北京:清华大学出版社,2009。