微机原理及应用课程设计报告
微机原理及应用课程设计报告

微机原理及应用课程设计设计题目: 基于PC机串行通信的点到点文件传输系统专业讣算机科学与技术班级计104学生 D指导教师2013 年秋季学期LI录U录 2实验LI3的二实验内容及要求 3、三课设基本思想 3、程序流程图以及程序设讣 5四、五. 实验结果截图6六. 程序源代码7七. 课程设计心得体会14A.参考文献151、实验目的1.学习虚拟串口的使用方法。
2.学会在windows平台上进行串口通信的方法。
二、实验内容及要求1•基本要求:采用VB,VC,C#或其他开发工具设计一个简易的聊天系统。
用户可以设置波特率或釆用自动协商机制。
界面如下图:接收信息|Text1发送信息Text22.设汁提示:在Windows平台上通过API或MSComn控件实现串行通信。
3.进一步设计要求:采用多线程完成通信任务。
三、课设基本思想1.在.\ET平台下使用C#创建串口通信程序,.NET2.0提供了串口通信的功能,其命名空间是System. 10. PortSo这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。
我们将使用标准的RS 232 C在PC间通信。
它丄作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。
2.串口的硬件知识:在数据传输的时候,每个字节的数据通过单个的电缆线传输。
包包括开始位,数据,结束为。
一旦开始位传出,后面就会传数据,可能是5, 6, 7或8位, 就看你的设定了。
发送和接收必须设定同样的波特率和数据位数。
3.关于本程序使用SerialPort的一些属性和方法:4、程序流程图以及程序设计开始、程序流程图:使用函数获取系统、“|前的可用串口初始化串JI初始化波特率建立串11连接并通信是否发送…进制文件发送二进制文件(二)、程序设计思想:首先需要定义一个SerialPort对象,添加DataReceived事件响应收到数据。
然后利用系统提供函数获取当前端口号,以及用户选择的波特率,对对象进行初始化。
单片微型计算机原理和应用课程设计

单片微型计算机原理和应用课程设计一、设计背景单片微型计算机是指把中央处理器、存储器、输入/输出接口和时钟等核心部件集成在一块芯片上的微型计算机。
单片微型计算机具有价格低廉、体积小、功耗低、易于编程等优点,广泛应用于各种智能控制系统中。
因此,对单片微型计算机进行深入研究和应用,具有重要的理论和实际意义。
二、课程目标本课程旨在让学生掌握单片微型计算机的基本原理和应用技术,培养学生的实际操作能力和解决实际问题的能力。
具体目标如下:1.掌握单片微型计算机的硬件结构和工作原理;2.掌握单片微型计算机的指令系统和汇编语言编程;3.掌握单片微型计算机的输入/输出接口及其编程技术;4.掌握单片微型计算机的中断响应和计时计数技术;5.了解单片微型计算机的应用领域和现状。
三、课程内容1. 单片微型计算机体系结构1.1 体系结构概述 1.2 内存管理单元 1.3 输入/输出系统 1.4 系统时钟和定时器 1.5 中断系统2. 单片微型计算机编程2.1 汇编语言基础 2.2 汇编语言程序设计 2.3 程序调试和优化3. 单片微型计算机输入/输出接口3.1 输入/输出数据格式 3.2 数据输入/输出接口 3.3 并行口输入输出接口4. 单片微型计算机中断响应和计时计数4.1 中断介绍 4.2 中断控制器 4.3 定时器和计数器5. 单片微型计算机的应用5.1 智能控制系统 5.2 计算机嵌入式系统 5.3 物联网应用四、教学方法本课程采用课堂讲授、实验教学相结合的方法,加强实践性教学。
在讲解理论的同时,引导学生开展实验设计和编程实践,以提高学生的实际操作能力和解决实际问题的能力。
五、考核方式本课程采用综合性考核方式,包括平时成绩、实验成绩和作业成绩等。
其中,平时成绩占30%,实验成绩占40%,作业成绩占30%。
六、教材和参考书目教材:《单片微型计算机原理和应用》参考书目:《单片微型计算机原理和应用教程》、《51单片机原理与应用》、《单片机原理与应用》等。
微机原理课程设计报告文库

微机原理课程设计报告文库一、课程目标知识目标:1. 理解微机原理的基本概念,掌握微机硬件结构及其功能;2. 学会分析微机工作原理,了解指令系统及编程方法;3. 掌握微机接口技术,了解常见接口芯片的功能和应用。
技能目标:1. 能够运用所学知识进行微机系统的简单设计和调试;2. 培养学生具备一定的微机编程能力,能够编写简单的汇编语言程序;3. 提高学生动手实践能力,能够进行基本的硬件焊接和电路搭建。
情感态度价值观目标:1. 培养学生对微机原理课程的兴趣,激发学生学习热情;2. 培养学生具备良好的团队合作意识,学会与他人共同解决问题;3. 增强学生的创新意识,鼓励学生勇于探索新知识,提高自主学习能力。
课程性质:本课程为理论与实践相结合的课程,强调培养学生的动手实践能力和创新能力。
学生特点:学生已具备一定的电子技术和计算机基础,具有较强的学习能力和好奇心。
教学要求:教师应注重理论与实践相结合,引导学生主动参与课堂讨论,鼓励学生动手实践,培养学生解决问题的能力。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
通过本课程的学习,使学生能够掌握微机原理的基本知识,具备实际应用能力,为后续相关课程和未来职业发展打下坚实基础。
二、教学内容本课程教学内容主要包括以下几部分:1. 微机硬件结构:介绍微处理器、存储器、输入输出接口等硬件组件的工作原理和功能;教材章节:第一章 微机系统概述内容列举:CPU结构、存储器分类、I/O接口基础等。
2. 指令系统与编程:讲解汇编语言的基本指令、寻址方式、程序设计方法等;教材章节:第二章 指令系统与汇编语言内容列举:基本指令、汇编语言程序结构、循环、分支等编程技巧。
3. 微机接口技术:分析常见接口芯片的原理与应用,如并行接口、串行接口、定时器/计数器等;教材章节:第三章 微机接口技术内容列举:并行接口、串行接口、定时器/计数器接口芯片等。
4. 微机系统设计与实践:培养学生动手实践能力,进行简单的微机系统设计与调试;教材章节:第四章 微机系统设计与实践内容列举:硬件焊接、电路搭建、程序下载与调试等。
微机原理课程设计报告计算N的阶乘

科技学院课程设计报告( 2012—2013 年度第一学期)课程:微机原理及应用题目:计算N的阶乘院系:动力工程系班级:学号:学生姓名:指导教师:设计周数:一周成绩:日期:2013年1 月11 日《微机原理及应用》课程设计任务书一、目的与要求1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。
2.掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。
3.培养学生分析问题、解决问题的能力。
4.培养学生对微型计算机应用系统的基本设计能力。
5.提高学生的实践动手能力和创新能力。
二、主要内容设计题目:计算N的阶乘。
数值N由键盘输入,N的范围为0~65535,结果在屏幕上显示。
1.针对所选择的设计题目进行硬件设计,合理选用所需元器件,绘制系统结构框图、硬件接线图,并在实验系统上完成电路的连接和调试。
2.根据所选题目的要求对微机系统进行程序设计,绘制程序总体流程图并编写源程序上机调试。
3.写出课程设计报告,对整个设计过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识和收获。
三、进度计划四、设计成果要求1.系统硬件设计合理,软件编程达到设计要求。
2.系统硬件结构图和软件流程图绘制清楚规范。
3.设计报告完整规范。
五、考核方式根据设计任务的完成情况、课程设计报告撰写情况及演示答辩情况采用五级记分制评定成绩。
学生姓名:指导教师:一、课程设计目的与要求1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。
2.掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。
3.培养学生分析问题、解决问题的能力。
4.培养学生对微型计算机应用系统的基本设计能力。
5.提高学生的实践动手能力和创新能力二、课程设计正文1.程序正文CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDM ;回车换行DATA SEGMENTMESS1 DB ‘INPUT THE NUMBER ACCORDING TO HEXNUM!’,0DH,0AH, ‘$’ MESS2 DB ‘THE RESULT IS:’,0DH,0AH, ‘$’ERROR DB ‘INPUT ERROR!’,0DH,0AH, ‘$’LEN DW 1CYY DW ?BUF DW 256 DUP (0)DATA ENDSSTACK SEGMENTSTA DW 32 DUP (?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPMOV AH,09HMOV DX,OFFSET MESS1INT 21H ;显示输入提示信息CALL GETNUM ;读取键入的N值MOV BP,DX ;N值送BPCMP BP,0JZ EEECMP BP,1JZ EEE ;N=0或N=1则转EEEMOV SI,OFFSET BUF ;缓冲区首址MOV [SI],DX ;缓冲区初始化为值NXXX: DEC BP ;N值减1CMP BP,0001HJZ LLL ;若为1则转LLLXOR BX,BX ;偏移指针清0MOV WORD PTR [CYY],0 ;进位单元请0MOV CX,[LEN] ;当前结果长度送CXTTT: MOV AX,[SI+BX]MUL BP ;相乘ADD AX,[CYY] ;加低位进位JNC JJJ ;结果元进位转JJJINC DX ;有进位将高位单元加1JJJ: MOV [SI+BX],AX ;结果送缓冲区中MOV [CYY],DX ;高位送进位单元INC BXINC BX ;1个字长度LOOP TTT ;循环CMP DX,0000HJZ BBB ;最后1次的进位为0则转BBBINC WORD PTR [LEN] ;长度加1MOV [SI+BX],DX ;进位送缓冲区中BBB: JMP XXXEEE: MOV SI,OFFSET BUFMOV WORD PTR [SI],1 ;结果为1LLL: MOV AH,09HMOV DX,OFFSET MESS2INT 21H ;显示表头MOV CX,[LEN]MOV BX,CX ;长度DEC BXSHL BX,1 ;1个字为2个字节CCC: MOV AX,[SI+BX]CALL DISPDEC BXDEC BX ;显示结果LOOP CCCMOV AX,4C00H ;结束INT 21HDISPP PROC NEARMOV BL,ALMOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPLMOV DL,BLAND DL,0FHCALL DISPLRETDISPP ENDPDISPL PROC NEARADD DL,30HCMP DL,3AHJB DDDADD DL,27HDDD: MOV AH,02HINT 21HRETDISPL ENDPDISP PROC NEAR ;显示子程序,按十六进制数方式显示AX中的数PUSH BXPUSH CXPUSH DXPUSH AX ;入栈保存MOV AL,AHCALL DISPP ;显示高字节POP AXCALL DISPP ;显示低字节POP DXPOP CXPOP BXRETDISP ENDPGETNUM PROC NEARPUSH CXXOR DX,DXGGG: MOV AH,01HINT 21H ;读取键入字行的ASCⅡ码送ALCMP AL,0DHJZ PPPCMP AL,20HJZ PPP ;是回车键或空格键则转PPPSUB AL,30HJB KKK ;非字符转KKKCMP AL,0AHJB GETS ;在‘0~9’间转GETSCMP AL,11HJB KKK ;非字符转KKKSUB AL,07HCMP AL,0FHJBE GETS ;在‘A~F’间转GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKK ;不在‘a~f’间转KKKSUB AL,20H ;‘a~f’的ASCⅡ码值→16进制数GETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AX ;将本次键入的数字加进DX中JMP GGG ;接受下一个键入的数字KKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21H ;显示输入出错信息PPP: PUSH DXCRLF ;回车换行POP DXPOP CXRETGETNUM ENDPCODE ENDSEND START2.程序框图计算N!的流程三、课程设计总结1、程序运行中的问题及解决方案在进行编程调试运行后,以输入5为例结果为0078H,但是运行DOS中显示的为007800,后面多显示为2个0,错误!返回DOS后,点击窗口——DOS,显示的为正常结果!2、心得体会此次课程设计我们收获颇多。
微机原理及应用的实验报告

微机原理及应用的实验报告1. 实验介绍在本次实验中,我们将学习微机原理及应用的基本知识,并通过实践来深入理解和应用这些知识。
本实验旨在让我们熟悉微机系统的原理、组成部分以及在实际应用中的一些常见问题和解决方案。
2. 实验目的•了解微机系统的基本组成部分•掌握微处理器的工作原理和操作方法•学习使用汇编语言编写简单的程序•熟悉实验中常用的开发工具和调试技术3. 实验步骤1.首先,我们需要了解微机系统的基本组成部分。
微机系统主要由中央处理器(CPU)、内存、输入输出设备和总线组成。
其中,CPU是微机系统的核心部件,它负责执行程序的指令和处理数据。
内存用于存储程序和数据,输入输出设备用于与外部环境进行数据交互,总线则负责连接各个部件之间的数据传输。
2.接下来,我们将学习微处理器的工作原理和操作方法。
微处理器是CPU的核心组成部分,它由运算器、控制器和寄存器组成。
运算器负责执行各种算术和逻辑运算,控制器负责控制程序的执行流程,寄存器用于保存指令、数据和中间结果。
3.在实验中,我们将学习使用汇编语言编写简单的程序。
汇编语言是一种低级语言,它与机器语言直接相对应。
通过编写汇编程序,我们可以更加直观地了解指令的执行过程以及数据的处理方式。
同时,在实验中我们还将学习如何使用调试工具对程序进行调试和测试。
4.最后,我们将熟悉实验中常用的开发工具和调试技术。
在实验中,我们将使用一些开发工具如汇编器、编译器和调试器来编写、编译和调试程序。
同时,我们还将学习如何使用逻辑分析仪和示波器等调试工具来对程序进行分析和验证。
4. 实验结果通过本次实验,我对微机原理及应用有了更深入的了解。
我学会了微机系统的基本组成部分,了解了微处理器的工作原理和操作方法,并且能够使用汇编语言编写简单的程序。
同时,我还熟悉了实验中常用的开发工具和调试技术,能够使用它们来进行程序的编写、编译和调试。
通过实验,我对微机系统的原理和应用有了更加直观和深入的认识。
微型计算机原理及其应用课程设计 (2)

微型计算机原理及其应用课程设计一、引言随着计算机科技的飞速发展,微型计算机已经成为了人们日常工作、学习不可或缺的一部分。
作为计算机基础学科,微型计算机原理及其应用的课程设计对于学生的计算机知识储备和应用能力提升具有重要的意义。
本文旨在探讨微型计算机原理及其应用课程设计的重要性,介绍课程设计的内容和要求等相关内容。
二、微型计算机原理及其应用2.1 微型计算机的定义微型计算机是指在一块半导体芯片中集成了计算机的全部或部分功能的计算机系统。
微型计算机通常由中央处理器、内存和外设等组成。
2.2 微型计算机的发展历程微型计算机的发展历程可以概括为以下几个阶段:•第一阶段:20世纪60年代到70年代初期,主要是以单芯片微处理器为核心的微型计算机时代;•第二阶段:70年代末期到80年代末期,主要是以微型计算机系统为核心的微型计算机时代;•第三阶段:90年代至今,主要是以个人计算机为核心的微型计算机时代。
2.3 微型计算机的应用领域微型计算机的应用领域非常广泛,包括但不限于以下几个方面:•科学研究领域:微型计算机可以用于科学实验数据的采集、处理和分析等;•工程技术领域:微型计算机可以用于控制和监测工业生产过程中的各种参数;•经济管理领域:微型计算机可以用于财务管理、人力资源管理等多个方面;•生活娱乐领域:微型计算机可以用于数字娱乐、互联网应用等多个方面。
三、课程设计内容和要求3.1 课程设计内容微型计算机原理及其应用的课程设计内容包括但不限于以下几个方面:•硬件方面:微型计算机的基本构成、内存管理、中央处理器、输入输出设备等;•软件方面:微型计算机的操作系统、应用软件、程序设计等;•实验设计:对于所学内容进行实际应用和实验操作。
3.2 课程设计要求微型计算机原理及其应用的课程设计要求包括但不限于以下几个方面:•学生要求掌握微型计算机的基本构成和原理,了解计算机系统的基本运作方式;•学生要求具备一定的程序设计和软件开发能力,并掌握各类软件的操作方法;•学生要求能够通过实验设计来加深对所学内容的理解和应用能力。
微机原理应用实践课程设计

微机原理应用实践课程设计课程设计背景微机原理是计算机专业的一门重要课程,它主要介绍微机系统的组成、功能和工作原理等方面的知识。
在学习这门课程时,由于理论部分较多,对于一些学生来说很难真正理解其中的意义和应用。
因此,在学习完微机原理的基本理论后,我们需要进行一些实践性的应用,以便更好地理解微机原理的实际应用。
本课程设计旨在通过实践活动,让学生对于微型计算机从硬件到软件的整个系统有一个更加全面深入的了解,加深对微机原理的理解,提高对微型计算机系统分析和应用的能力。
课程设计内容本次课程设计的主要内容是通过设计一个小型的工业控制系统,来加深学生对于微机系统各个部分的理解。
具体来说,课程设计包括以下几部分:系统构建在本次工业控制系统中,我们需要使用到微型计算机、数据采集卡、继电器等设备。
在系统构建环节中,需要学生学习并掌握这些设备的组成、功能和用途。
硬件设计在硬件设计环节中,学生需要根据实际需求,设计并制作数据采集电路、继电器驱动电路等硬件设备。
通过本环节的实践,学生可以更加深入理解硬件电路的原理和应用。
软件设计在软件设计环节中,学生需要利用C语言编写相应的程序,实现工业控制系统的控制逻辑。
通过本环节的实践,学生可以学习到如何使用C语言进行编程,以及如何将硬件电路和软件程序进行配合和搭建一个完整的工业控制系统。
系统测试在系统测试环节中,学生需要测试所设计的工业控制系统的各个功能是否正常运行。
通过测试环节的实践,学生可以学习到如何进行系统测试和调试,优化系统配置。
课程设计目标通过对微机原理应用实践的学习与实际应用的操作演练,落实和提高学生的实验技能、设计能力与动手能力,达到以下目标:1.深入理解微机系统的组成、功能和工作原理等方面的知识;2.掌握微型计算机、数据采集卡、继电器等设备的组成、功能和用途;3.掌握硬件电路设计和调试的方法;4.掌握C语言编程的基本原理和方法;5.掌握如何使用C语言编写工业控制系统的程序;6.掌握工业控制系统的测试和调试方法;7.提高学生的实验技能、设计能力和动手能力。
微机技术原理课程设计报告

微机技术原理课程设计报告设计背景和目的:微机技术原理课程设计的主要目的是培养学生的计算机系统综合能力,通过设计和实现一个完整的微机系统,来加深学生对微机技术原理的理解,提高他们的动手能力和解决问题的能力。
本次课程设计的主题是设计一个简单的计算器程序,要求能够实现基本的四则运算功能以及其它一些扩展功能。
设计方案和流程:1. 确定系统需求:根据题目要求,确定计算器的基本功能为加减乘除四则运算,同时考虑到用户体验,还要加入其他一些功能,如开平方、取余等。
2. 确定系统架构:根据需求,确定使用的软件开发平台和工具,如C++编程语言和Visual Studio集成开发环境(IDE)。
3. 分解系统模块:根据计算器的功能,将系统分解为多个模块,如界面模块、算法模块和控制模块等。
4. 设计界面模块:根据用户交互需求,设计并实现计算器的用户界面,包括数字按钮、运算符按钮和结果显示区域等。
5. 设计算法模块:根据需求,设计并实现计算器的算法模块,包括加、减、乘除等基本运算算法,以及开平方、取余等扩展算法。
6. 设计控制模块:根据系统架构,设计并实现计算器的控制模块,用于协调界面模块和算法模块之间的交互,处理用户输入和计算结果的显示。
7. 调试和测试:在开发过程中,及时调试和测试各个模块的功能,确保各模块之间的协调正常,并对程序进行全面测试,保证程序的正确性和稳定性。
实施计划和进度安排:本次课程设计将分为多个阶段进行,每个阶段都有具体的任务和时间安排。
以下是整个设计的大致计划和进度安排:1. 第一周:确定系统需求,设计系统架构,完成界面模块的设计和实现。
2. 第二周:完成算法模块的设计和实现,完成控制模块的设计和实现。
3. 第三周:进行系统的集成测试和调试,解决存在的问题和bug。
4. 第四周:进行功能测试和性能测试,优化程序,准备最终的系统交付。
设计结果和实施效果:经过设计和实施,计算器程序可以实现基本的四则运算功能,并且还加入了一些扩展功能,如开平方、取余等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告( 2011 -- 2012 年度第 1 学期)名称:微机原理及应用题目:8255/273实现六位简单计算器院系:控制与计算机工程学院班级:自动0901学号:1091190119学生姓名:孙浩然指导教师:杨国田设计周数:一周同组人:阴海强、吴义凡、唐平舟成绩:日期:2011年12 月30日任务书一、目的与要求1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。
2.培养学生分析问题、解决问题的能力。
3.培养学生对微型计算机应用系统的基本设计能力。
4.要求学生掌握汇编语言程序设计的基本方法,学会典型接口的基本设计方法。
二、主要内容1.选定课程设计参考题目及分工负责部分2.对要求的微机应用系统进行设计,画出系统结构框图、系统接线图。
3.用所设计的微机系统进行典型程序的设计并上机进行调试。
4.写出设计报告,要求文字整洁、语言通顺、制图规范、程序完整正确。
三、进度计划序号设计内容完成时间备注1 选择课程设计题目,查阅相关资料2011.12.262 进行软硬件设计 2011.12.27、283 上机调试 2011.12.294 撰写设计报告 2011.12.305 演示及答辩 2011.12.31四、设计成果要求1.系统硬件设计合理,软件编程达到设计要求。
2.系统硬件结构图和软件流程图绘制清楚规范。
3.设计报告完整规范。
五、考核方式根据课程设计报告书撰写情况及答辩情况采用五级记分制评定成绩。
学生姓名:孙浩然指导教师:杨国田2011年12月30日一、课程设计的目的与要求目的:在微机原理及应用课程中分别学过了微机原理各个基本组成模块的原理和编程技术的基础上,综合应用各部分知识,在实验室现有设备的情况下,设计一个具有一定功能的应用系统,达到对各部分知识加深理解、融会贯通的目的,并进一步锻炼学生的动手能力和综合分析能力,同时培养学生的团队精神。
要求每个同学独立完成自己分担的部分,整体方案可以组内同学讨论确定。
要求:能完成六位十进制数的加、减、乘、除运算,操作过程与普通计算器相同,即先输入一个操作数,然后按下“+”“—”“×”“÷”键,再输入下一个操作数,按等号键开始运算并显示结果,若结果超过六位,则显示“E”。
二、分工及任务:阴海强负责硬件架构,吴义凡负责主程序框架及键盘管理,唐平舟负责显示管理及部分算法,孙浩然负责其余算法。
三、设计正文将可编程外围接口芯片8255A 与键盘和七段LED 连接,通过对8255A 编程及对键盘的操作实现计算功能:键盘码包括数字0~9、运算符号“+” “-” “*” “/”“=”和清零“CL”键,通过键盘依次输入第一个运算数字、运算符号、第二个运算数字、“=”,在七段LED 灯上显示运算结果,期间数字输入有误可按“CL”键之后重新输入。
四、课程设计总结或结论1.通过这次课程设计,进一步了解了可编程并行I/O接口芯片8255的特性和引脚功能以及基本知识点,了解了该芯片的应用。
同时了解了汇编语言对学习其他计算机起到一个比较、对照、参考的促进作用。
学习事物总是从最简单基础的开始。
那么学习高级语言也当然应当从汇编开始。
学习汇编语言实际上是培养了学习计算机语言的能力和素养。
个人认为,学习汇编语言对学习其他语言很有促进作用。
2.通过编程实现,熟悉了8255方式控制字,了解了三种工作方式和基本工作原理。
3.通过查阅资料,对于可编程接口芯片有了更深的认识,掌握了基本的微机接口方法。
4.本次课程设计,自己认真地做了资料的查阅,过程中,认真思考,积极探索,之后,提炼总结。
总的来说,基本完成了课程设计要求和任务。
五、参考文献1、《清华大学TPC—2003A实验指导书》,2006版2、《新编16/32位微型计算机原理及应用》,李继灿主编,清华大学出版社,2008版,第四版3、《微机原理实验指导书》,杨国田、高明明编写,校内待出版,2002年3月,第一版附录一、设计流程图二、各部分原理1、LED 显示器及其功能七段LED 显示器由七个发光段构成,每段均是一个LED 二极管。
这七个发光段分别称为a,b,c,d,e,f,g,通过控制不同段的点亮和熄灭,以显示所要得到的数字七段LED 的输出功能也是通过8255的并行输出实现。
RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O 口均被置成输入方式。
PA0~PA7:端口A 输入输出线,一个8 位的数据输出锁存器/缓冲器,一个8 位的数据输入锁存器。
PB0~PB7:端口B 输入输出线,一个8 位的I/O 锁存器,一个8 位的输入输出缓冲器。
PC0~PC7:端口C 输入输出线,一个8 位的数据输出锁存器/缓冲器,一个8 位的数据输入缓冲器。
端口C 可以通过工作方式设定而分成2 个4 位的端口,每个 4 位的端口包含一个4 位的锁存器,分别与端口A 和端口B 配合使用,可作为控制信号输出或状态信号输入端口。
CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255 与CPU 进行通讯。
RD:读信号线,当这个输入引脚为低电平时,允许8255 通过数据总线向CPU 发送数据或状态信息,即CPU 从8255 读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,允许CPU 将数据或控制字写8255。
D0~D7:三态双向数据总线,8255 与CPU 数据传送的通道,当CPU 执行输入输出指令时,通过它实现8 位数据的读/写操作,控制字和状态信息也通过数据总线传送。
8255 的读写控制:8255 的读/写控制逻辑电路接受CPU 发来的控制口号RD、WR、RESET 和地址信号A1~A0。
然后根据命令端口,控制信号的要求,将端口的数据读出选信CPU 或者将CPU送来的数据写入端口,各端口的工作状态。
通过用输出指令对8255A 的控制字寄存器编程,写入设定工作方式的控制字,可以让3个数据口以不同的方式工作,端口A 可工作于3 种方式的任一种,端口B 只能工作于方式0 和方式1,端口C 除了用于输入输出端口外,还能配合A 口和B 口工作,为这两个端口的输入输出操作提供联系信号。
3、键盘原理当进行扫描时,扫描信号由列引脚输入键盘。
以0111、1011、1101 和1110 的顺序每次扫描不同的列,然后读取列引脚的信号就可以判断是哪个键被按下。
识别键盘上哪个键被压下的过程的扫描步骤:1.检测是否所有键都都松开了,若没有则反复检测。
2.但所有键都松开了,再检测是否有键压下,若无键一下则反复检测。
3.如有键压下,要消除键抖动,确认有键压下。
4.对压下的键进行编码,将该键的行列信号转换成16 进制码,由此确定哪个键被压下了。
如出现多键重按的情况,只有在其它键均释放后,仅剩一个键闭合时,才把此键当作本次压下的键。
5.该键释放后,再回到2。
4、8086处理器5、可编程并行I/O接口芯片8255三、程序;由资料得各端口地址port equ 0d400h-0280h ;D口地址port_a equ port+288h ;A口地址port_b equ port+28bh ;B口地址port_c equ port+28ah ;C口地址data segmentcurf db 0 ;当前数标志符calf db 0 ;运算符标志符finf db 0 ;完成符标识符numb0f db 0 ;NUMB0清空标志numb1f db 0 ;NUMB1清空标志count db 100 ;计数器numb0 db 6 dup(0ah) ;第一个运算数numb1 db 6 dup(0ah) ;第二个运算数ledtab db 40h,79h,24h,30h,19h,12h,02h,78h,00h,10h,06h,7fh,06h ;LED显示向量div_res db 6 dup(0) ;除法结果data endsstack segment stackdb 200 dup(0)stack endscode segmentassume ds:data,,ss:stack,cs:codebg:mov ax,datamov ds,ax;----------------------------------------------------------------------------------------;各变量初始清0mov dx,portout dx,almov si,1 ;清空两个运算数,0位等于0,其他位等于0AH(空)mov cx,5mov numb0,0mov numb1,0ini: mov numb0[si],0ahmov numb1[si],0ahinc siloop inimov curf,0 ;当前数置0,表示指向第一个数mov calf,0 ;运算符置0,表示没有运算符mov finf,0 ;完成符置0,表示没有完成mov numb0f,1 ;第一个数清空标志置1,表示第一个数被清空mov numb1f,1 ;第二个数清空标志置1,表示第二个数被清空;-----------------------------------------------------------------------------------------;LED刷新display_led:mov ch,0feh;初始化片选码,先显示低位mov al,chmov dx,port_cout dx,allea bx,ledtablea si,numb0cmp curf,0 ;判断当前要显示的数据段jz next_bitadd si,6next_bit:add bl,numb[si] ;找出十进制数在显示向量上的对应值,加以显示adc bh,0mov al,[bx]rol ch,1 ;巡检inc sitest ch,40hjnz next_bitdec count ;循环100次,是LED显示便于看清cmp count,0jnz display_ledmov count,100;--------------------------------------------------------------------------------------- ;扫描键盘(参考教科书)mov al,00hmov dx,port_aout dx,allooa:mov dx,pot_bin al,dxand al,0fhcmp al,0fhjz looacall d_20ms ;消抖in al,dxand al,0fhcmp al,0fhjz looastart:mov bl,4 ;行数送blmov bh,4 ;列数送bhmov al,0fehmov cl,0fhmov ch,0ffhlop1:mov dx,port_arol almov ah,almov dx,port_bin dx,port_band al,clcmp al,cljnz lop2add ch,bhmov al,ahdec bljnz lop1jmp startlop2:inc chror aljc lop2mov al,cl ;将keyID存入ALcmp al,09hjbe numkey ;跳转至数字键部分cmp al,0ahjz addkey ;跳转至加法键部分cmp al,0bhjz subkey ;跳转至减法键部分cmp al,0chjz mulkey ;跳转至乘法键部分cmp al,0dhjz divkey ;跳转至除法键部分cmp al,0ehjz clrkey ;跳转至清除键部分;-------------------------------------------------------------------------------------;数字键部分numkey:save_numb1:cmp calf,0jz save_numb0 ;若没有运算符号则将输入数存入NUMB0mov curf,1 ;当前符值1,指向第二个数mov si,5cmp numb1[si],0ah ;若最高位为空,则标志当先数没有存满六位,继续存入jnz display_led ;否则直接刷新LEDcmp numb1f,1 ;若数当前被清空过,则直接将输入数存入最低位jz place0adjust1:mov cx,6 ;逐位前移mov si,0xchg al,numb1[si]inc siloop adjustmov numb1f,0 ;将NUMB1F置0,表示第二个数没有清零jmp display_ledplace1:mov numb1[0],almov numb1f,0jmp display_ledsave_numb0:mov curf,0cmp finf,0 ;若完成符为1,表示完成过一次运算,则清空NUMBO jz save_nextmov si,1 ;清空NUMB0mov cx,5mov numb0,0save_ini:mov numb0[si],0ahloop save_inimov numb0f,1mov finf,0save_next:mov si,5cmp numb1[si],0ahjnz display_ledcmp numb0f,1jz place1adjust0:mov cx,6mov si,0xchg al,numb0[si]inc siloop adjustmov numb0f,0jmp display_ledplace0:mov numb0f,0jmp display_led;-------------------------------------------------------------------------------------- ;等号键部分equkey:call calp ;按下等号则调用CALP运算子程序,mov calf,0 ;运算后清空运算符mov finf,1 ;置完成符jmp display_led;-------------------------------------------------------------------------------------- ;运算符号键部分addkey:cmp calf,0 ;若之前没有过运算符,则置运算符jz placefcall calp ;若之前有过运算符,则调用CALP进行运算jmp placef ;运算结束后置当前运算符jz placefcall calpjmp placefmulkey:cmp calf,0jz placefcall calpjmp placefdiv:cmp calf,0jz placefcall calpjmp placefplacef:cmp al,0ahjz addfcmp al,0bhjz subfcmp al,0chjz mulfcmp al,0dhjz divfaddf:mov calf,1jmp display_led ;置运算符完毕后刷新LEDsunf:mov calf,2jmp display_ledmulf:mov calf,3jmp display_leddivf:mov calf,4jmp display_ledclrkey:jmp bg ;按下clear键后跳转至开头,全部清零;---------------------------------------------------------------------------------------calp proc;先将两个数中的0AH换成0以便计算mov si,5trans0:cmp numb0[si],0ah ;转换第一个数jz change0jmp trans_nextchange0:mov numb0[si],0dec sijnz trans0trans_next:mov si,5 ;转换第二个数trans1:cmp numb1[si],0ahjz change1jmp calp_nextchange1:mov numb1[si],0dec sijnz trans1calp_next:cmp calf,0 ;若运算符为0,则直接刷新LED jz calf_over ;否则跳转至结束处retcmp calf,1 ;根据运算符调用运算子程序jz addcalcmp calf,2jz subcalcmp calf,3jz mulcalcmp calf,4jmp calf_over ;调用相应计算子程序subcal:call subpjmp calf_overmulcal:call mulpjmp calf_overdivcal:call divpcalf_over:retcalp endp;----------------------------------------------------------------------------------------- ;加法子程序addp procmov si,0mov cx,6clc ;清除进位标志addnext_bit:mov al,numb0[si]adc al,numb1[si]aaamov numb0[si],alinc siloop addnext_bitjc bgcall recovretaddp endp;----------------------------------------------------------------------------------------- ;减法子程序subp procmov si,0subnext_bit:mov al,numb0[si]sbb al,numb1[si]aasmov numb0[si],alinc siloop subnext_bitjc bgcall recovretaddp endp;----------------------------------------------------------------------------------------- ;乘法子程序mulp procmov si,1mov cx,5mov dl,numb1mov bl,10hmov bh,0mul_tran:push cxmov ax,0mov al,numb1[si]mul blmov cl,bhsal ax,cladd bh,4add dx,ax ;dx中存放加法次数inc sipop cxadd dx,ax ;dx中存放加法次数inc sipop cxloop mul_tranmov cx,dxmul_again:push cxmov si,0mov cx,6clc ;清除进位标志mulnext_bit:mov al,numb0[si]adc al,numb0[si]aaamov numb0[si],alinc siloop:mulnext_bitjc bgpop cxloop:mulagaincall recovretmulp endp;----------------------------------------------------------------------------------------- ;除法子程序divp procmov si,0FFH ;判断除数是否为0mov cx,6check_0:inc sicmp si,6jz bg ;若6位皆为0则溢出清零jz check_0mov si,0 ;清除除法结果mov cx,6clrres: mov div_res[si],0inc siloop clrresdivsub:mov si,0mov cx,6clc ;清除借位标志subnext_bit:mov al,numb0[si]sbb al,numb1[si]aaamov numb0[si],alinc siloop subnext_bitjc div_over ;每减一次则结果加1clcmov si,0mov cx,5mov al,div_res[si]adc al,1aaamov div_res[si],aldivres:inc simov al,div_res[si]adc al,0aaaloop divresjum divsubdiv_over:call recovretdivp endp;------------------------------------------------------------------------------------------ ;恢复两个数把高位的0换成0AHrecov procmov si,5retrans0:cmp numb0[si],0 ;转换第一个数jz rechange0jmp retrans_nextrechange0:mov numb0[si],0ahdec sijnz retrans0retrans_next:mov si,5 ;转换第二个数retrans1:cmp numb1[si],0jz rechange1jmp recov_overrechange1:mov numb1[si],0dec sijnz retrans1recov_over:retrecov endp。