微机原理课程设计 函数发生器

xxxx 大 学

理学与信息科学学院

微 机 接 口 课 程 设 计 报 告

设 计 题 目             函数发生器设计                 

学生专业班级       计算机科学与技术09-1班                                

学生姓名(学号)                                    

设计小组其他同学姓名(学号)                   

指 导 教 师                                            

完 成 时 间             20##年6月22日                                  

实 习(设计)地点                       

  20##年6月22日


一、课程设计目的和任务

设计目的:1、建立微机系统概念加深对微机系统的理解和认识,提高微机系统的应用能力。2、进一步学习和掌握微机程序设计方法,通过应用程序的应用和调试学习程序的调试。3、进一步熟悉微机典型接口芯片的使用,接口及外部设备系统的连接方法。

 设计任务:利用D/A设计一个波形发生器,能分别产生三角波、正弦波、锯齿波和方波等其中的三种以上的波形;并利用按键(自行定义)进行输出波形选择,并对应按键选择输出波形,将以上四种波形显示在屏幕上,将当前输出波形代号显示在LED上(左边位):0为锯齿波、1正弦波、2三角波、3方波;设计电路并在实验箱上连接线路同时编程实现其功能。

二、分析与设计

1.设计任务分析:信号发生器是我们在学习,科学研究等方面不可缺少的工具。此外,信号发生器在教学、试验、测控等各个领域有十分广泛的应用,其输出信号的频率范围覆盖了各个频段,从甚低频到甚高频,操作方式也从手动旋钮到程控,产生的波形从传统的正(余)弦波和脉冲波形,发展到现在能产生各种任意波形。以前的信号发生器往往独占一个机箱,而现在的一些应用中,它只是一块插在计算机中的扩展卡,还有一些信号发生器设计成一个独立的小模块,通过RS-232C或RS-422,RS-485等串行总线和计算机连接。我们知道当我们使用计算机来构成数据采集或者过程控制等系统时,所要采集的外部信号或被控制对象的参数,往往是温度、压力、流量、声音和位移等连续变化的模拟量。但是,计算机只能处理不连续的数字量,即离散的有限值。因此,必须用A/D转换器将模拟信号转换成数字量后才能送入计算机进行处理。

 而计算机处理后的结果也必须通过D/A转换器来转换成模拟量后,在示波器上显示结果波形和在记录仪上描述下来,或者是驱动执行部件,才能达到控制目的。可见模数转换和数模转换在构成一个控制系统中起着非常重要的作用。

2。  设计方案论证:D/A转换器产生各种波形的原理:利用D/A转换器输出的模拟量与输入数字量成正比关系这一特点,将D/A转换器作为微机输出接口,CPU通过程序向D/A转换器输出随时间呈现不同变化规律的数字量,则D/A转换器就可输出各种各样的模拟量,如方波、三角波、锯齿波、正弦波等。

8255A实现波形切换的原理:从8255A的B口读入外接开关的信号,CPU读入不同信号值,从而执行不同的代码,向D/A转换器传送不同的数据,控制D/A转换器输出锯齿波、三角波、方波、正弦波。

3.硬件设计:课程设计应用到试验箱,以8088为核心,涉及到芯片有8055A和D/A0832。

(D/A转换器) D/A0832是8位并行输出电流型D/A转换器,其主要参数:转换时间1us,满量程误差土1LSB,参考电压—10V~+10V,供电电压+5V~+15V,输入逻辑电平与TTL兼容。引脚图如下图:

 

(可编程并行接口)8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。其内部还有一个控制寄存器,即控制口。通常A口、B口作为输入输出的数据端口。C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。8255可编程并行接口芯片工作方式说明: 方式0:基本输入/输出方式。适用于三个端口中的任何一个。每一个端口都可以用作输入或输出。输出可被锁存,输入不能锁存。 方式1:选通输入/输出方式。这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。方式2:双向总线方式。只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。

      

4.程序流程图和源代码清单:

源代码:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

DATA  SEGMENT

TAB DB 80H,83H,86H,89H,8DH,90H,93H,96H

DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH

DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H

DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H

DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H

DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H

DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH

DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH

DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H

DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH

DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH

DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H

DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H

DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H

DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H

DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H

DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H

DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH

DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H

DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H

DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH

DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H

DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H

DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H

DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H

DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H

DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H

DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H

DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH

DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H

 DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H

DB 256 DUP(?)

DATA  ENDS

CODE  SEGMENT

ASSUME CS:CODE,DS:DATA

CT8255 EQU 0FFDBH ;8255 的控制寄存器地址

B8255 EQU 0FFD9H ;8255 的B口地址

DA0832 EQU 0FFE0H 

START:

    MOV AX,DATA

    MOV DS,AX

    MOV AL,82H ;初始化8255,B 口输入,工作在方式0

    MOV DX,CT8255

    OUT DX,AL

BG: MOV DX,B8255

   IN AL,DX

    AND AL,07H

    CMP AL,01H ;显示锯齿波

    JZ JCBB

    CMP AL,02H ;显示三角波

    JZ SJBB

    CMP AL,03H ;显示方波

    JZ FBB

    CMP AL,04H ;显示正弦波

    JZ ZXBB

    CMP AL,05H ;显示梯形波

    JZ TXB

    JMP BG

TXB:JMP TXBB

JCBB:PUSH AL

     MOV AL,06H

     OUT 60H,AL

     POP AL

     MOV AL,00H ;锯齿波

AGAIN1: INC AL

    MOV DX,DA0832

    OUT DX,AL

    CALL DELAY

    PUSH AX

    MOV DX,B8255

    IN AL,DX ;再次读入开关信号,进行比较

    CMP AL,01H

    JNZ BG

    POP AX

    JMP AGAIN1

SJBB: PUSH AL

     MOV AL,5BH

     OUT 60H,AL

     POP AL

     MOV AL,00H ;三角波

UP: MOV DX,DA0832 ;启动D/A 转换上升

    OUT DX,AL

    CALL DELAY

    INC AL       

    CMP AL,0FFH

     JNZ UP

     DEC AL

DOWN: MOV DX,DA0832 ;启动D/A 转换下降

    OUT DX,AL

    CALL DELAY

    DEC AL

    CMP AL,00H

    JNZ DOWN

    MOV DX,B8255 ;再次读入开关信号,进行比较

    IN AL,DX

    CMP AL,02H

    JNZ BG

    JMP SJBB

FBB:   PUSH AL

     MOV AL,4FH

     OUT 60H,AL

     POP AL

    MOV AL,00H ;方波

FB1:   MOV DX,DA0832 ;写00H,输出低电平

    OUT DX,AL

    PUSH CX

    MOV CX,00FFH ;低电平延迟

L: CALL DELAY

    LOOP L

    POP CX

    PUSH CX

    MOV CX,00FFH

    MOV AL,0FFH

    MOV DX,DA0832

    OUT DX,AL

L1: CALL DELAY ;高电平延迟

    LOOP L1

    POP CX

    MOV DX,B8255 ;再次读入开关信号,进行比较

    IN AL,DX

    CMP AL,03H

    JNZ BG1

    JMP FBB

BG1:   JMP BG

ZXBB:   PUSH AL

     MOV AL,66H

     OUT 60H,AL

        POP AL

       LEA BX,TAB

    MOV CX,0001H

ZX2:   MOV AL,[BX] ;将TAB 中的数字一次赋给AL,再输出正弦波

    INC BX

    INC CX

    MOV DX,DA0832

    OUT DX,AL

    CALL DELAY1               

   PUSH AX

MOV DX,B8255 ;再次读入开关信号,进行比较

    IN AL,DX

    CMP AL,04H

    JNZ BG2

    POP AX

    CMP CX,256

    JNE ZX2

    JMP ZXBB

BG2: JMP BG

TXBB: PUSH AL

      MOV AL,6DH

      OUT 60H,AL

      POP AL

      MOV CX,0100H ;梯形波

      MOV AL,00H

 LL0: MOV DX,DA0832 ;低电平段

      OUT DX,AL

      CALL DELAY1

      DEC  CX

      JNZ  LL0

 LL1: INC AL          ;上升段

      MOV DX,DA0832

      OUT DX,AL

      CALL DELAY1

         CMP  AL,0FFH

    JNE  LL1

      MOV  CX,0100H

 LL2: MOV DX,DA0832

      OUT  DX,AL      ;高电平段

      CALL DELAY1

      DEC  CX

      JNZ  LL2

 LL3: DEC  AL          ;下降段

      MOV  DX,DA0832

      OUT  DX,AL

      CALL DELAY1

      CMP  AL,00H

      JNZ  LL3

      MOV  DX,B8255       ;再次读入开关信号,进行比较

      IN   AL,DX

      CMP  AL,05H

      JNZ  BG3

      JMP  TXBB

BG3: JMP BG 

DELAY:  CMP AL,0D0H

        JNB W_END      

        CMP AL,7AH

        JB W_END

        MOV CX,180

        LOOP $

W_END:  RET

DELAY1:PUSH CX

      MOV CX,0090H

DEL1: PUSH AX

      POP AX

      LOOP DEL1

      POP CX

      RET

      CODE ENDS

END START 

三、系统实施

一、实验箱上连线 1.CPU与8255A的连接实验箱已经连接好,8255A的A口、B口、C口、控制口的地址为60H、61H、62H、63H。2.CPU与DAC0832的连接XD0~XD7对连。把D/A区0832片选CS信号线接至8088总线IOY0。将D/A区WR插孔连到总线IOWR插孔。3.8255A的B口的PB0、PB1、PB2口分别与开关K1、K2、K3相连。4、8255A的A口PA0、PA1、PA2连接LED数码管。连接图如下:

 

 二、调试修正程序

1.调试程序,改正程序语法错误

2.观察波形,修正程序,使波形更完美。

 三、产生的波形

   程序运行后,波形会闪现比较快,多添加几个延时程序解决。

四、总结与体会

第一周我们先查资料,了解DAC0832和8255A的原理。第二周到实验室结合自己查的资料开始分析任务、设计方案,画出线路图。在实验箱连接出线路图,进行调试。

此次课程设计,巩固了以前所学过的知识,加深了对《微机原理》和《汇编语言》的理解,我进一步了解了波形发生器的原理,在实际动手操作过程中,使我接触了许多我以前没接触过的元件,使我学得了许多知识,使我获益匪浅。

在这次的软件设计中,程序设计采用的是汇编语言。汇编语言具有速度快,可以直接对硬件进行操作的优点,它可以极好的发挥硬件的功能。但是汇编语言也存在编写的代码非常难懂,不好维护,很容易产生 bug,难于调试的缺点。因此,在大型程序的设计中,多采用C语言进行程序编译。C语言简洁高效,是最贴近硬件的高级编程语言,经过多年的发展,现在已成熟为专业水平的高级语言。

这次课程设计,使我的动手能力得到了很大的提高,更使我们懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是我们得到的理论知识得到验证,更能增加对理论知识的理解。而且在做课程设计的过程中,锻炼自己分析问题的能力、解决实际问题的能力还有团队合作的意识。课程设计时间虽然很短,但我学习了很多东西。

五、参考书目

(按“作者,书名,出版社,出版时间”格式逐一列出)

[1] 周明德.微型计算机系统原理及应用北京:清华大学出版社,2007.1

[2]李志民.计算机原理与汇编语言程序设计.长沙:中南大学出版社,2001.8

[3] 潘名莲.微计算机原理.北京:电子工业出版社,2004.7

[4]宫云战.微型计算机原理与应用基础教程.北京:机械工业出版社,1999.5

[5]李恩林.微机接口技术300例.浙江.机械工业出版社.2003.5

[6]周荷琴.微型计算机原理与接口技术.合肥.中国科学技术大学出版社.2008.1

[7]Stephen E.Derenzo.微机接口技术实验教程.北京.机械工业出版社.2006.1

[8]荀殿栋.微处理器应用技术与实例.北京:电子工业出版社,1997.11


课程设计成绩评定表

 

第二篇:微机原理与接口技术课程设计之三角波发生器

课程设计任务书

学生姓名: 专业班级: 机自 指导教师: 工作单位: 机电工程学院 题 目: 设计一简单信号发生器

初始条件:

1.选用8088 CPU最小工作模式;

2.选择DAC0832芯片完成模拟信号输出,确定芯片地址范围;

3.输出三角波的电压范围为0~+2.5V,能够实现频率调节功能。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.查阅参考资料,自学相关可编程接口芯片的内部结构、工作方式和初始化编程过程;

2.根据设计系统的具体功能和性能参数,明确设计目标;

3.微机基本系统及其扩展接口电路设计,绘制微机系统硬件原理图;

4.编制扩展接口电路工作的汇编源程序,绘制汇编源程序流程图,包括初始化和监控工作程序;

5.撰写设计说明书(包括参考资料目录,字数不少于5000字) 时间安排:

微机原理与接口技术课程设计之三角波发生器

指导教师签名: 20xx年 12月 12日

系主任(或责任教师)签名: 年 月 日

(一) 概述

设计内容及要求

本设计综合应用8088CPU、D/A转换器、定时器/计数器电路,中断技术:通过PC机定时,产生三角波模拟信号输出,信号频率可通过PC机键盘调节。输出电压范围在0~2.5V之间。

课程设计要求

设计要求画出电路原理图,说明工作原理,编写程序及程序流程图。

设计目的

通过该课程的学习使学生对微机系统有一个全面的了解、掌握常规芯片的使用方法、掌握简单微型计算机应用系统软硬的设计方法,进一步锻炼同学们在微型计算机应用方面的实际工作能力。

本设计主要能够完成对制定波形的形成,可以通过输入来改变频率。此信号发生器可以很好的运用于有需要的场合。

(二) 系统总体设计

1、 设计思想及方案论证

由于要求达到模拟信号波形发生,因此要由D/A转换芯片0832来来完成此项任务,由0832形成波形的主要做法是:先输出一个下限电平,将其保持t然后输出一个稍高的电平,再保持t,然后重复此过程,因此需要改变0832输入数据的时间间隔t来改变频率。如图3-1信号发生波形图所示。0832输入的数据的延时可以通过软件完成,也可以通过硬件完成。由于实验要求输出的波的频率可以改变,且精确,所以选用硬件延时。

+5v

微机原理与接口技术课程设计之三角波发生器

图3-1 信号发生波形图

硬件延时主要由计时器8253

微机原理与接口技术课程设计之三角波发生器

和中断控制器8259来实现。由8253输出的方波的高低电平,来触发8259的IR0端,8259给CPU中断信号,CPU中断来执行相应的中断子程序,中断子程序为向0832输出数据的程序,通过此程序可以产生三角波。由于8253产生的方波的频率可以控制,所以每次中断执行波形发生程序的时间间隔可以精确控制。以此来控制0832输出的波形频率。

功能框图,1页

2、硬件系统总体布局(画一简图)1页

3、线路图(大图)

微机原理与接口技术课程设计之三角波发生器

4、芯片选择

根据需要,选择了8088CPU,时钟发生器8284*1,总线控制器8286*1,总线地址锁存器8282*3,RAM6264*1,ROM2764*1,计时器8253*1,中断控制器8259*1,D/A转换器0832*1,地址译码器74L138*2

4.1.1可编程中断控制器8259a

8259a是8086/8088系列的可编程中断控制器,8259a为28个引脚的双列直插芯片。它的主要功能是:

(1)据8级优先级控制,通过联级可以扩展到64级优先控制。 (2)每一级中断可由程序单独屏蔽或允许。 (3)可提供中断类型号传送给CPU。

(4)可以通过编程选择多种不同工作方式。 引脚功能:

D7-D0:双向数据线,三态,与数据总线相连。

IR7-IR0:外设的中断请求信号输入端,输入,中断请求:可以是电平触发,或者边缘触发。

RD:读命令信号,输入,低电平有效,用来控制数据由8259A读 WR:写命令信号,输入,地点平有效,用来控制写到8259 CS:片选信号,输入,通过译码器与地址总线相连

INT:向CPU发出中断请求信号,输出,与CPU的INTR相连 INTA:CPU给8259的中断响应信号,输入。 4.1.2DAC0832:

NSC公司生产的DAC0832 ,是一种内部带有数据输入寄存器的8位D/A转化器,采用CMOS工艺制成,芯片内部R-2R梯形电阻网络,用于对参考电压产生的电压进行分流,完成模数转换,转换结果以一组差动电流 IOUT1IOUT2 输出。

0832具有8位分辨率,如果输出电压范围在0~5V间的话,当输入数字量为0时,输出电压为0V;输入数字量为255(0FFH)时,输出电压为5V。 各引脚的功能分述如下:

VREF : 参考电压输入端。根据需要一定大小的电压,由于它是转换的基准,要求数值正确,稳定性好。

VCC:工作电压输入端。

AGAN为模拟地,DGAN为数字地。在模拟电路中,所有的模拟地要连在一起然后将模拟地,数字地连接到一个公共接地点。

DI7-DI0:数据输入。可直接连接到数据总线。

IOUT1IOUT2:互补的电流输出端。为了输出模拟电压,需加转换电路。

4.1.3 8253

inter8253是一种能够完成定时和计数的芯片,8253内部有3个16位计数器通道,通过对他们编程,每个计数器可以按照6种工作方式工作,并且都可以按2或10进制格式进行计数。,最高频率为2MHZ。8253还可以用于许多其他场合,比如可作编程方波发生器,分频器等。

引脚:

1数据缓冲总线

数据总线缓冲器是8253与系统总线相连时使用的接口电路,它由8位双相三态缓冲器构成,CPU用输入输出指令对8253进行读写操作的信息都由8位数据总线传输:(1)CPU在对8253进行初始化编程时,向他写入控制字。(2)CPU向某一计时器写入计数初值。(3)从计数器读出计数值。

2读写控制逻辑

读写控制逻辑接受系统控制总线送来的输入信号,经由组合后形成控制信号,对各部分操作进行控制。可接受的信号有:

(1) CS片选,低电平有效,由数据总线经由IO端口译码电路产生。只有CS低电平时,CPU才能对8253进行读写操作。

(2) RD读信号,低电平有效,当RD位地电平时,表示CPU正在读取所选定的计数器的通道的内容。

(3) WR写信号,低电平有效。当WR为低电平时,表示CPU正在将计数器初值写入所选中的通道口中,或者将控制字写入内部寄存器中。

(4) A1A2 端口选择信号,改变它的值,来选择8253内三个计数器通道。 如果8253和与8位数据总线的微机相连,只要将A1A0分别与地址总

相联。如果系统采用的是8086CPU,则数据总线为16位,传输数据时,总是将低8位数据送往偶地址,将高8位送往奇地址。

3计数器

8253内部包含三个完全相同俄计数器定时器通道,对3个通道的操作,

完全独立的。每个通道都包含1个8位的控制字寄存器,1个16位的减寄存器,和一个锁存器,执行部件是一个16位的减法计数器。每个通道工作时,对输入到CLK引脚上的脉冲按2进制或10 进制格式进行计数。每当输入一个时钟脉冲,计数器减1,当计数器的值减为0时从,从OUT引脚输出一个脉冲信号。GATE引脚上的门控制信号,决定他是否允许计数。

4.1.4 8284

时钟发生器8284的引出线如图6—8所示。其引线功能叙述如下:

CLK:为CPU提供时钟信号,频率为4.77MHz

READY:接CPU的READY引脚

RESET:接CPU的RESET引脚,为CPU提供复位信号

PCLK:为外设提供时钟信号,频率为2.38MHz

VCC:工作电压输入端。

有一些引线在使用中没有用到,如OSC,EFI等可空着不接。外设或其他电路

板上的速度慢的器件在工作过程中需要CPU等待时,是通过向8284的RDY1端提供控制信号来实现的。

4.1.5 8282

4.1.6 8286

4.1.6 6264

4.1.7 2764

5、译码方式及地址范围计算

包括存储器地址(RAM和ROM的地址)和端口地址。

微机原理与接口技术课程设计之三角波发生器

端口地址有8259(两个地址),8253(四个地址),0832(一个地址?)均需译码器译码分配CS。

(三) 接口扩展电路设计

接口电路的设计、原理和工作方式

使用8253产生定时中断,故8253使用方式3以产生方波信号,以方波信号的上升沿触发中断达到定时目的。8253的计数初值根据所需输出地三角波频率计算得到。8253的输入时钟频率来自8284芯片的PCLK引脚,频率为2.38MHz。

8259芯片在此次应用中只负责产生定时中,没有设置从片及,所以使用一般嵌套,根据8253的输入波形,选择上升沿触发方式。

列写端口地址表

8259的工作方式及初始化程序

MOV DX,8259AD0 ;初始化8259,设置为单片,上升沿触发,完全 MOV AL,00010011B ;非自动EOI方式,03H

OUT DX,AL

MOV DX,8259AD1

MOV AL,10000000B…………..ICW2,10H,中断向量码IR0——10H

OUT DX,AL

MOV AL,00000001B…………..ICW4,01H,

OUT DX,AL

8253的工作方式及初始化程序

OUT DX,AL MOV DX,316H……………初始化8253,计数器地址,写计数器1 MOV AL,01110110B ;通道1方式字,方式3,二进制记数

OUT DX,AL 方波发生器,用以产生中断

MOV DX,312H……………………写计数值

POP CX……………………………..计数值弹到CX

MOV AL,CL ………………………..写低八位

OUT DX,AL

MOV AL,CH…………………………写高八位

OUT DX,AL

0832的工作方式及初始化程序

工作方式单缓冲模式,没有初始化程序

(四) 系统程序设计

1 流程图主要进行系统初始化和外围接口芯片初始化,及开中断,等待中断产生,其流程图所示。

微机原理与接口技术课程设计之三角波发生器

三角波频率控制的实现

计时器初始输入频率来自8284芯片PCLK引脚,频率为2.385MHz。本程序要实现三角波控制,每周期取步进值为511次,每步进值增1或减1。前半周期为增1,后半周期减1,输出量分别由0到255和255到0。

设分频后频率为F,输入频率为f,步进值为N,三角波周期为T,中断间隔t,计数初值CX

有: CX*1/F=t

Nt=T

T=N*CX/F

CX=F*T/N=F/(N*f)

故 在本程序中,CX=2.385MHz/(511*f)=4667/f

由于CX取值在1~25536之间,所以f可取0.18HZ~4667.3HZ,本程序供用户可选频率为100Hz~4KHz

2、中断向量表

微机原理与接口技术课程设计之三角波发生器

3、程序清单

DATA SEGMENT 定义数据段

MESS DB'输入发生频率(100Hz~4000Hz)',0DH,0AH,'$' …………………….提示信息 CUNCHU DB ? …………………………………………………暂存量存储位置 JISHU DW 0

PINLV DW ?

DATA ENDS

STACK SEGMENT STACK……………………………………………堆栈段定义

ST DW 20 DUP(?)…………………………………………………..堆栈空间大小为20字节 TOP LABEL WORD………………………………………………...定义栈顶指针为TOP STACK ENDS……………………………………………………………堆栈段结束

CODE SEGMENT………………………………………………………..定义指令段

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA……………初始化段基地址

MAIN PROC FAR…………………………………………………………定义远调用MAIN函数 MOV AX,DATA……………………………………………………..初始化段基地址 MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV AX,CODE

MOV CS,AX

MOV DX,8259AD0 ;初始化8259,设置为单片,上升沿触发,完全 MOV AL,00010011B ;非自动EOI方式,03H

OUT DX,AL

MOV DX,8259AD1

MOV AL,10000000B…………..ICW2,10H,中断向量码IR0——10H

OUT DX,AL

MOV AL,00000001B…………..ICW4,01H,

OUT DX,AL

LEA DX,MESS ;输入频率

MOV AH,09H

INT 21H

LEA DX,PINLV…………………将输入频率存到PINLV中

MOV AH,01H

INT 21H

XOR CX,CX…………………….CX清零

XOR AX,AX

MOV BX,10

KEY: MUL BX…………………………乘法。AX=BX*AX

MOV CX,AX

MOV AL,[DX]

CMP AL,0DH…………………..输入字符等于回车?

JE ENTER………………………相等则跳到ENTER

SUB AL,30H................................ACSII变成数字

ADD CX,AL

MOV AX,CX

MOV PINLV,CX…………………将算得的频率值存在PINLV中

INC DX

JMP KEY

ENTER: MOV AX,4667…………………….将输入的频率计算,得出写入8253的时间数

MOV CX,PINLV

MOV BX,CX

DIV BX

MOV CX,AX

PUSH CX…………………压栈

MOV DX,316H……………………初始化8253,计数器地址,写计数器1 MOV AL,01110110B ;通道1方式字,方式3,二进制记数 OUT DX,AL 方波发生器,用以产生中断

MOV DX,312H……………………写计数值

POP CX……………………………..计数值弹到CX

MOV AL,CL ………………………..写低八位

OUT DX,AL

MOV AL,CH…………………………写高八位

OUT DX,AL

MOV CUNCHU,0H ;将存储单元清零

MOV JISHU,0H

MOV DX,OFFSET SANJIAOBO………取偏移地址赋DX

MOV AX,SEG SANJIAOBO ………….取段地址

MOV DS,AX………………………..段地址赋DS

MOV AL,08H......................................中断向量08H

MOV AH,25H......................................DOS的功能调用,设置中断程序入口地址 INT 21H

CIR: JMP CIR………………………………...无限循环程序,等待中断

RET

MAIN ENDP

三角波子程序

SANJIAOBO PROC NEAR

PUSH AX……………………..保护现场

PUSH BX

PUSH CX

PUSH DX

STI……………………………..开中断

MOV DX,228H………………..0832地址

MOV AL,CUNCHU

OUT DX,CUNCHU

CMP JISHU,511

JAE CN………………………..步进值达到最大值时,跳转CN

JMP CM……………………….没到最大值,跳转CM

CN: MOV JISHU,0

CM: CMP JISHU,0FFH…………….步进值与255比较

JAE JINAG……………………步进值大于255时,跳转到下降沿程序

JMP SHENG…………………..否则跳到上升沿程序

JIANG: DEC AL……………………….下降沿程序

MOV CUNCHU,AL

JMP INTRETURN……………..去往结束中断

SHENG: INC AL………………………....上升沿程序

MOV CUNCHU,AL

JMP INTRETURN……………去往结束中断

INTRETURN:CLI

POP DX……………………….恢复现场

POP CX

POP BX

POP AX

MOV AL,20H………………..EOI 命令

OUT 20H,AL

IRET…………………………..结束中断

SANJIAOWO ENDP

CODE ENDS

(五) 参考资料

[1] 周荷琴.微型计算机原理与接口技术.合肥:中国科学技术大学出版社,2004.12

[2] 刘全忠.汇编语言实用程序.天津:天津大学出版社,1991.6

3 高福祥,张君.接口技术.沈阳:东北大学出版社,1999.12

4 葛玻.微机接口及实际应用.武汉:武汉理工大学出版社,2000.9

5 冯博琴,吴宁.微型计算机原理及接口技术.北京:清华大学出版社,2007.8

(六) 总结

在这两周的实习中,我再次的巩固了微机课中所学的知识,了解了各种芯片的的用法,各个接口的名称,作用。明白了微机系统在生产生活中最基本的用处.

在两周的实习中,我也感到所学的知识不是很深,动手的能力不是很强,面对问题解决问题的能力还有待加强。总的来说,《微型计算机原理与接口技术》对于我以后学习,工作的影响是很大的。

相关推荐