单片机实验(AD转换)

时间:2024.5.4

实验三    A/D、D/A转换实验

一、实验目的

1.       熟悉DAC0832并行接口数模转换器和TLC2543串行接口模数转换器的基本原理和编程方法。

2.       进一步熟悉单片机应用系统开发步骤和方法。

二、实验电路

实验所用元件清单如下表所示:

1. 串行A/D转换器TLC2543

2.       并行D/A转换器DA0832

三、相关知识

(一)串行A/D转换器TLC2543

1. TLC2543的特性与引脚

TLC2543是TI公司的TLC2543 12位串行A/D转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省80C51系列单片机的I/O资源,而且价格适中。

e747

2. TLC2543的工作过程

TLC2543的工作过程分为两个周期:I/O 周期和实际转换周期。

1)I/O周期

I/O周期由外部提供的I/O CLOCK定义,延续8、12或16个时钟周期,决定于选定的输出数据长度。器件进入I/O周期后同时进行两种操作。

(1)在I/O CLOCK的前8个脉冲的上升沿,以MSB前导方式从DATA INPUT端输入8位数据流到输入寄存器。其中前4位为模拟通道地址,控制14通道模拟多路器从11个模拟输入和3个内部自测电压中,选通一路送到采样保持电路,该电路从第4个I/O CLOCK脉冲的下降沿开始,对所选信号进行采样,直到最后一个I/O CLOCK脉冲的下降沿。I/O周期的时钟脉冲个数与输出数据长度(位数)有关,输出数据长度由输入数据的D3、D2选择为8、12或16位。当工作于12或 16位时,在前8个时钟脉冲之后,DATA INPUT无效。

(2)在DATA OUT端串行输出8、12或16位数据。当保持为低时,第一个数据出现在EOC的上升沿;若转换由控制,则第一个输出数据发生在的下降沿。这个数据串是前一次转换的结果,在第一个输出数据位之后的每个后续位均由后续的I/O CLOCK脉冲下降沿输出。

2)转换周期

在I/O周期的最后一个I/O CLOCK脉冲下降沿之后,EOC变低,采样值保持不变,转换周期开始,片内转换器对采样值进行逐次逼近式A/D转换,其工作由与I/O CLOCK同步的内部时钟控制。转换完成后 EOC变高,转换结果锁存在输出数据寄存器中,待下一个I/O周期输出。I/O周期和转换周期交替进行,从而可以减小外部的数字噪声对转换精度的影响。

TLC2543的工作时序如图7.41所示。

e748

3. TLC2543与89C52的接口电路

下图是89C52与TLC2543的接口电路,TLC2543的5条接口线可接到单片机的任何通用双向I/O口上。

(二)并行D/A转换器DAC0832

1.D/A转换是把数字量转换成模拟量的变换,实验台上D/A电路输出的是模拟电压信号。要实现实验要求,比较简单的方法是产生三个波形的表格,然后通过查表来实现波形显示。

2、产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角波要分段来产生。要产生正弦波,较简单的方法是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。D/A转换取值范围为一个周期,采样点越多,精度越高些。本例采用的采样点为256点/周期。

3、8位D/A转换器的输入数据与输出电压的关系为

            U(0∽-5V)=Uref/256×N

U(-5V∽+5V)=2·Uref/256×N-5V     (这里 Uref为+5V)

4、DAC0832与89C52的接口电路

四、 实验内容

1.       按照上图设计仿真电路原理图。

2.       编写程序实现采集AI0~AI11十二个输入通道模拟输入,并转换结果从串口送到模拟终端显示。

3.       编写程序实现产生方波、三角波和梯形波的程序,并在虚拟示波器上显示波形。

五、 参考程序

1、  A/D转换接口实验

COMMON.c程序

#include <REG52.H>      /* special function register declarations */

#include <intrins.h>

/*********************************************************

*  函数说明:延时5us,晶振改变时只用改变这一个函数!

            1、对于11.0592M晶振而言,需要2个_nop_();

            2、对于22.1184M晶振而言,需要4个_nop_();

*  入口参数:无

*  返回:    无

*********************************************************/

void delay_5us(void)//延时5us,晶振改变时只用改变这一个函数!

{

            _nop_();

            _nop_();

            //_nop_();

            //_nop_();

}

/************ delay_50us ***************/

void delay_50us(void)//延时50us

{

            unsigned char i;

            for(i=0;i<4;i++)

            {

                        delay_5us();

            }

}

/******** 延时100us ******************/

void delay_100us(void)//延时100us

{

            delay_50us();

            delay_50us();

}

/*********** 延时单位:ms *******************/

void time(unsigned int ucMs)//延时单位:ms

{

            unsigned char j; 

            while(ucMs>0){

                        for(j=0;j<10;j++) delay_100us();

                        ucMs--;

            }

}

/********** 初始化串口波特率 ************/

void initUart(void)/*初始化串口波特率,使用定时器2*/

{

/* Setup the serial port for 9600 baud at 11.0592MHz */

            SCON = 0x50;  //串口工作在方式1

            RCAP2H=(65536-(3456/96))>>8;

            RCAP2L=(65536-(3456/96))%256;

            T2CON=0x34;

    TI  = 1;     /* 置位TI*/

}

common.h程序

#include <REG52.H>    /* special function register declarations */

#include <stdio.h>    /* prototype declarations for I/O functions */

#include <intrins.h>

#include <Absacc.h>

#include <string.h>

#include <ctype.h>

#define byte unsigned char

#define uchar unsigned char

#define word unsigned int

#define uint unsigned int

#define ulong unsigned long

#define BYTE    unsigned char

#define WORD unsigned int

#define TRUE  1

#define FALSE 0

extern void initUart(void);/*初始化串口*/

extern void time(unsigned int ucMs);//延时单位:ms

Main.c程序

#include "common.h"

extern void CollectADmodule(uint *ad_result);

/******** main 函数 *********/

void main (void) {        

uint idata TLC2543[11];

uchar i;

            initUart(); /* 初始化串口 */

            do{

                        CollectADmodule(TLC2543);//调用11通道AD转换

                        for(i=0;i<11;i++){

                                    printf("TLC2543[%bd]=%u\n",i,TLC2543[i]);//打印输出结果

                        }

                        printf("\n\n");//回车2次

                        time(1000);

            }while(TRUE);

}

Tlc2543.c程序

#include <reg52.h>

#include <intrins.h>

#include <Absacc.h>

#include <string.h>

#include <ctype.h>

#define byte unsigned char

#define uchar unsigned char

#define word unsigned int

#define uint unsigned int

#define ulong unsigned long

#define BYTE    unsigned char

#define WORD unsigned int

uint read2543(uchar port);

void CollectADmodule(uint *ad_result);

extern void time(unsigned int ucMs);//延时单位:ms

/**************************************

        2543控制引脚宏定义

*************************************/

sbit  AD_EOC = P1^0; /* TLC2543转换完成指示引脚EOC */

sbit  CLOCK =  P1^2; /*2543时钟*/

sbit  AD_CS =  P1^3; /*2543片选*/

sbit  D_IN  =  P1^4; /*2543输入*/

sbit  D_OUT =  P1^5; /*2543输出*/

/**************************************

             TLC2543驱动程序

*************************************/

/**************************************

  名称:read2543

  功能:TLC2543驱动模块

  输入参数:port通道号

  输出参数:ad转换值

*************************************/

uint read2543(uchar port)

{

uint ad=0;

uchar i;

            P1=0xeb;

            CLOCK = 0;

            AD_CS = 0;

            port<<=4;

            for(i=0;i<8;i++) //读高8位

            {

                        if(D_OUT) ad|=0x01;

                        D_IN=(bit)(port&0x80);

                        CLOCK=1;                   

                        CLOCK=0;                   

                        port<<=1;

                        ad<<=1;

            }

            for(i=8;i<12;i++)           //读低4位

            {

                        if(D_OUT) ad|=0x01;

                        CLOCK=1;                   

                        CLOCK=0;                   

                        ad<<=1;

            }                     

            AD_CS=1;

            ad>>=1;

            return(ad);

}

/**************************************************

* 函数说明:采集实际端口的数据

* 入口参数:

  *ad_result  存各模拟通道的结果

**************************************************/

void CollectADmodule(uint *ad_result)

{

uchar i;

            AD_EOC=1;     

            read2543(0);  //启动0通道转换,第一次转换结果不准确,丢弃

            while(!AD_EOC){}       //等待转换完成

            time(3);

            read2543(0);

            while(!AD_EOC){}       //等待转换完成

            for(i=0;i<11;i++){

                        ad_result[i]= read2543(i+1); //读转换结果,并启动下次转换

                        while(!AD_EOC){}       //等待转换完成            

                        time(3);

                        read2543(i+1); //读转换结果,并启动下次转换

                        while(!AD_EOC){}       //等待转换完成

            }

}

2.D/A转换接口实验

锯齿波程序:

            ORG 0000H

            LJMP START

            ORG 0100H

START: MOV R0,#0FEH

            MOVX @R0,A

            INC A

            LCALL DELAY

            SJMP START

DELAY:  MOV R1,#2H

LP:       MOV R2,#20H

            DJNZ R2,$

            DJNZ R1,LP

            RET

            END

六、 实验要求

写出实验报告,内容包括:

(1)    实验目的。

(2)    实验电路组成及各单元描述

(3)    软件组成及主要模块流程图

(4)    写出详细的调试步骤,记录实验现象。可通过μVision3 IDE提供的单步、断点、连续等调试功能查看实验电路和内部寄存器、存储器的变化情况。

七、 思考与讨论

串行接口A/D转换器与并行接口A/D转换器比较有什么优点?


第二篇:实验五 DAAD转换实验 完整版


实验五   D/A、A/D转换实验

一、实验目的

了解数/模、模/数转换基本原理,

掌握DAC0832、ADC0809的使用方法;
    掌握定时数据采集程序的编制方法。

二、实验内容

1、D/A转换实验

通过0832D/A转换输出一个从0V开始逐渐升至5V,再从5V降至0V的可变电压输出驱动直流电机。

(1)实验接线图

                   D/A转换实验接线图

(2)实验程序框图

(3)实验程序清单

CODE        SEGMENT     ;H0832-2.ASM 0-->5v

ASSUME CS:CODE

DAPORT  EQU 0FF80h

PA      EQU 0FF20H      ;字位口

PB      EQU 0FF21H      ;字形口

PC      EQU 0FF22H      ;键入口

    ORG 1110H

START:      JMP START0

BUF         DB ?,?,?,?,?,?

data1:  db 0c0h,0f9h,0a4h,0b0h,99h,92h

db 82h,0f8h,80h,90h,88h,83h,0c6h,0a1h

        db 86h,8eh,0ffh,0ch,89h,0deh,0c7h

db 8ch,0f3h,0bfh,8FH

START0:     call buf1

DACON0:     MOV AL,00H

DACON1:     MOV DX,DAPORT

        OUT DX,AL

        push ax

        call conv

        MOV CX,0040H

DISCON:  PUSH CX

        call disp

        POP CX

        LOOP DISCON

        pop ax

        INC AL

        CMP AL,00H

        JNZ DACON1

        MOV AL,0FFH

DACON2:     MOV DX,DAPORT

         OUT DX,AL

         push ax

         call conv

         MOV CX,0040H

DISCON2:    PUSH CX

         call disp

         POP CX

         LOOP DISCON2

         pop ax

         DEC AL

         CMP AL,0FFH

         JNZ DACON2

         JMP DACON0

CONV:       MOV AH,AL

         AND AL,0FH

         MOV BX,OFFSET BUF

         MOV [BX+5],AL

         MOV AL,AH

         AND AL,0F0H

         MOV CL,04H

         SHR AL,CL

         MOV [BX+4],AL

         RET

DISP:    MOV AL,0FFH     ;00H

         MOV DX,PA

         OUT DX,AL

         MOV CL,0DFH   ;20H; 5ms显示子程序

         MOV BX,OFFSET BUF

DIS1:    MOV AL,[BX]

         MOV AH,00H

          PUSH BX

          MOV BX,OFFSET DATA1

          ADD BX,AX

         MOV AL,[BX]

          POP BX

          MOV DX,PB

          OUT DX,AL

          MOV AL,CL

          MOV DX,PA

          OUT DX,AL

          PUSH CX

DIS2:      MOV CX,00A0H

DELAY:      LOOP DELAY

            POP CX

            CMP CL,0FEH                  ;01H

            JZ LX1

            INC BX

            ROR CL,1                     ;SHR CL,1

            JMP DIS1

LX1:        MOV AL,0FFH

            MOV DX,PB

            OUT DX,AL

            RET

BUF1:       MOV BUF,00H

           MOV BUF+1,08H

           MOV BUF+2,03H

           MOV BUF+3,02H

           MOV BUF+4,00H

           MOV BUF+5,00H

           RET

DELY:       PUSH CX

DEL2:       PUSH CX

DEL3:       PUSH CX

            LOOP $

            POP CX

            LOOP DEL3

            POP CX

            LOOP DEL2

            POP CX

            LOOP DELY

            RET

CODE        ENDS   

END START

2、A/D转换实验

利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。

(1)实验接线图

D/A转换实验接线图

(2)编程指南

ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号,实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,其输入控制信号为CS和WR,故启动A/D转换只须如下两条指令:

MOV DX,ADPORT   ;ADC0809端口地址      

OUT DX,AL  ;发CS和WR信号并送通道地址

用延时方式等待A/D转换结果,使用下述指令读取A/D转换结果。    

MOV DX,ADPORT      ;ADC0809端口地址          IN AL,DX 

循环不断采样A/D转换的结果,边采样边显示A/D转换后的数字量。

(3)实验程序框图

(4)实验步骤

①将0809 CS4插孔连到译码输出FF80H插孔、连JX6→JX17。

②将通道0模拟量输入端IN0连电位器W1的中心插头AOUT1(0-5V)插孔,8MHZ→T。

③运行实验程序

如在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM文件夹,点击H0809.ASM文件,单击“确定”即可装入A/D转换实验源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“R运行”或工具图标运行,即开始运行程序。如果在没有PC机的情况下,则在8086K系统显示监控提示符“P.”时,用户段地址固定为0000(省略输入),按SCAL键,输入起始偏移地址1000,按EXEC键,在系统上显示“0809 XX”。“XX”表示输入模拟量转换后的数字量。

④调节电位器Wl, 显示器上会不断显示新的转换结果。

模拟量和数字量对应关系的典型值为:

0V→00H    +2.5V→80H      +5V→FFH

⑤按RST键退出。

以上两种方式运行结果完全一致,因此,在下面的实验中,不管按何种方式均能运行实验程序。

(5)实验程序清单

CODE        SEGMENT            ;H0809.ASM

ASSUME CS:CODE

ADPORT  EQU 0FF80h

PA      EQU 0FF20H      ;字位口

PB      EQU 0FF21H      ;字形口

PC      EQU 0FF22H      ;键入口

       ORG 1000H

START:      JMP START0

BUF         DB ?,?,?,?,?,?

data1: 

db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h

db 0f8h,80h,90h,88h,83h,0c6h,0a1h

        db 86h,8eh,0ffh,0ch,89h,0deh,0c7h

db 8ch,0f3h,0bfh,8FH

START0:     CALL BUF1

ADCON:      MOV AL,00

                MOV DX,ADPORT

                OUT DX,AL

                MOV CX,0500H

DELAY:      LOOP DELAY

          MOV DX,ADPORT

          IN AL,DX

          CALL CONVERS

          CALL DISP

          JMP ADCON

CONVERS:    MOV AH,AL

              AND AL,0FH

              MOV BX,OFFSET BUF

          MOV [BX+5],AL

          MOV AL,AH

          AND AL,0F0H

          MOV CL,04H

          SHR AL,CL

          MOV [BX+4],AL

          RET

DISP:       MOV AL,0FFH    ;00H

        MOV DX,PA

        OUT DX,AL

        MOV CL,0DFH ;20H 初始数位

        MOV BX,OFFSET BUF

DIS1:     MOV AL,[BX]

        MOV AH,00H

    PUSH BX

    MOV BX,OFFSET DATA1

          ADD BX,AX

          MOV AL,[BX]

POP BX

    MOV DX,PB

    OUT DX,AL

    MOV AL,CL

    MOV DX,PA

    OUT DX,AL

    PUSH CX

DIS2:      MOV CX,00A0H

              LOOP $

              POP CX

        CMP CL,0FEH                      ;01H

        JZ LX1

        INC BX

        ROR CL,1                         ;SHR CL,1

        JMP DIS1

LX1:        MOV AL,0FFH

        MOV DX,PB

        OUT DX,AL

        RET

BUF1:       MOV BUF,00H

          MOV BUF+1,08H

          MOV BUF+2,00H

          MOV BUF+3,09H

          MOV BUF+4,00H

          MOV BUF+5,00H

          RET

CODE ENDS

END  START

3、数据采集实验

要求:用8253定时器1通道定时,每隔半秒使从ADC0809的0通道IN0采集一个数据,若模拟电压在0-2V范围内(0-102),则使LED显示器L7-L4亮;若模拟电压大于2V,小于3V,则使L5-L2亮;若模拟电压大于等于3V,则使LED显示器L3-L0亮。

(主程序重复所采集的数据)

(1)  实验接线图

(2)  实验程序框图

主程序流程图

中断程序流程

(3)实验程序清单

CODE            SEGMENT         ;H0809.ASM

ASSUME CS:CODE

INTPORT1  EQU       0FF80H

INTPORT2  EQU       0FF81H

INTQ3        EQU        INTREEUP3

TCONTR0     EQU     0043H

TCON1       EQU     0041H ;定时器的口地址

IOCONPT     EQU     0FF2BH

IOBPT       EQU     0FF29H

IOAPT       EQU    0FF28H

PA        EQU     0FF20H    ;字位口

PB        EQU     0FF21H    ;字形口

PC        EQU     0FF22H    ;键入口

ADPORT    EQU     0FE00H

ORG 12D0H

START:    JMP START0

BUF       DB ?,?,?,?,?,?

intcnt    db ?

RES       DB  ?

data1   db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h

db 0f8h,80h,90h,88h,83h,0c6h     

        db 0a1h,86h,8eh,0ffh,0ch,89h,0deh

db 0c7h,8ch,0f3h,0bfh,8FH

START0: CLD

           CALL     BUF1

                CALL    WRINTVER   ;WRITE INTRRUPT ;装填中断向量

                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

                 MOV    intcnt,25      ;软件计数25(0.5秒=20ms*25)

                MOV     DX,TCONTR0

                MOV     AL,74H      ;8253初始化011110100方式二,频率发生器,自动

                OUT     DX,AL

                MOV     DX,TCON1     ;计数器1定时20ms

                MOV     AX,40000

                OUT     DX,AL

                MOV     AL,AH

                OUT     DX,AL

MOV     DX,0FF2BH

                MOV     AL,80H   ;8255初始化10000000

                OUT     DX,AL

                STI

WATING:         CALL    DISP             ;DISP 0809XX

                JMP     WATING

WRINTVER:       MOV     AX,0H

                MOV     ES,AX

                MOV     DI,002CH

                LEA     AX,INTQ3

                STOSW

                MOV     AX,0000h

                STOSW

                RET

INTREEUP3:      DEC     INTCNT ;重装计数值

                JNZ   INTRE2   

                MOV   INTCNT, 25 ;重装计数值

ADCON:         MOV     AX,00   ;选通道

                MOV     DX,ADPORT ;启动A\D

                OUT     DX,AL

                MOV     CX,0500H

DELAY:          LOOP    DELAY

                MOV     DX,ADPORT

                IN      AL,DX

                MOV    RES,AL

                CALL    CONVERS

MOV      AL,RES

                CMP     AL, 66H ;是否为2V

                 JA      NEXT1

                 MOV     AL, 0F0H ;小于2V时,左边四个灯亮

                 MOV     DX, IOAPT

                 OUT     DX,AL

                 JMP     INTRE2

NEXT1:      CMP     AL, 99H ;是否为3V

                JA      NEXT2

                MOV     AL, 0C3H  ;中间四个灯亮

                 MOV     DX, IOAPT

                 OUT     DX,AL

                 JMP     INTRE2

NEXT2:      MOV     AL, 0FH  ; 大于3V时,右边四个灯亮

                 MOV     DX, IOAPT

                 OUT     DX,AL

    INTRE2:     MOV     AL,20H

                MOV     DX,INTPORT1

                OUT     DX,AL

                IRET

CONVERS:    MOV     AH,AL

                AND     AL,0FH

                MOV     BX,OFFSET BUF

            MOV     [BX+5],AL

            MOV     AL,AH

            AND     AL,0F0H

            MOV     CL,04H

            SHR     AL,CL

            MOV     [BX+4],AL

            RET

DISP:       MOV     AL,0FFH         ;00H

                MOV     DX,PA

                OUT     DX,AL

                MOV     CL,0DFH     ;20H        

                MOV     BX,OFFSET BUF

DIS1:       MOV     DX,PC

                OUT     DX,AL

               MOV     AL,[BX]

                MOV     AH,00H

                PUSH    BX

                MOV     BX,OFFSET DATA1

               ADD     BX,AX

               MOV     AL,[BX]

                POP     BX

                MOV     DX,PB

                OUT     DX,AL

                MOV     AL,CL

                MOV     DX,PA

                OUT     DX,AL

                PUSH    CX

DIS2:       MOV     CX,00A0H

                LOOP    $

                POP     CX

                CMP CL,0FEH  ;01H

                JZ LX1

                INC BX

                ROR CL,1    

                JMP DIS1

LX1:        MOV AL,0FFH

                MOV DX,PB

                OUT DX,AL

                RET

BUF1:       MOV BUF,00H

                MOV BUF+1,08H

                MOV BUF+2,00H

                MOV BUF+3,09H

                MOV BUF+4,00H

                MOV BUF+5,00H

                RET

CODE        ENDS

                END    START

思考题:

用IN4采集数据,当电压大于4.5V,使PA口的LED全亮

实验报告:

    要求:用8253定时器1通道定时,每隔半秒从ADC0809的2通道IN2采集一个数据存于RES单元。当开关K2(PC2)闭合时进行如下检测:若模拟电压在0-2V范围内(0-102),则使LED显示器L7-L4亮;若模拟电压大于2V,小于3V,则使L5-L2亮;若模拟电压大于等于3.V,则使LED显示器L3-L0亮,当电压大于3.8V,使PA口的LED全亮。

画出系统连接图,编写控制程序(对程序加以注释)

(主程序重复显示0809XX)

CODE            SEGMENT         ;H0809.ASM

ASSUME CS:CODE

INTPORT1  EQU       0FF80H

INTPORT2  EQU       0FF81H

INTQ3        EQU        INTREEUP3

TCONTR0     EQU     0043H

TCON1       EQU     0041H ;定时器的口地址

IOCONPT     EQU     0FF2BH

IOBPT       EQU     0FF29H

IOAPT       EQU    0FF28H

IOCPT       EQU    0FF2AH

PA        EQU     0FF20H    ;字位口

PB        EQU     0FF21H    ;字形口

PC        EQU     0FF22H    ;键入口

ADPORT    EQU     0FE00H

ORG 12D0H

START:    JMP START0

BUF       DB ?,?,?,?,?,?

intcnt    db ?

RES       DB  ?

data1   db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h

db 0f8h,80h,90h,88h,83h,0c6h     

        db 0a1h,86h,8eh,0ffh,0ch,89h,0deh

db 0c7h,8ch,0f3h,0bfh,8FH

START0: CLD

           CALL     BUF1

                CALL    WRINTVER   ;WRITE INTRRUPT ;装填中断向量

                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

                 MOV    intcnt,25      ;软件计数25(0.5秒=20ms*25)

                MOV     DX,TCONTR0

                MOV     AL,74H

                OUT     DX,AL

                MOV     DX,TCON1     ;计数器1定时20ms

                MOV     AX,40000

                OUT     DX,AL

                MOV     AL,AH

                OUT     DX,AL

MOV     DX,0FF2BH

                MOV     AL,81H   ;加开关

                OUT     DX,AL

                STI

WATING:         CALL    DISP             ;DISP 0809XX

                JMP     WATING

WRINTVER:       MOV     AX,0H

                MOV     ES,AX

                MOV     DI,002CH

                LEA     AX,INTQ3

                STOSW

                MOV     AX,0000h

                STOSW

                RET

INTREEUP3:      DEC     INTCNT

                JNZ   INTRE2    ;重装计数值

                MOV   INTCNT, 25

ADCON:     MOV     AX,02   ;选通道

                MOV     DX,ADPORT ;启动A\D

           OUT     DX,AL

                MOV     CX,0500H

DELAY:          LOOP    DELAY

            MOV     DX,ADPORT

            IN      AL,DX

            MOV    RES,AL

            CALL    CONVERS

MOV DX,IOCPT ;读C口状态

IN AL,DX

TEST   AL,04 ;测试K2是否闭合

          JZ INTRE2

MOV      AL,RES

                CMP     AL, 66H ;是否为2V

                 JA      NEXT1

             MOV AL,0FH  ;L8-L5亮

                 MOV     DX, IOAPT

                 OUT     DX,AL

                 JMP     INTRE2

NEXT1:      CMP     AL, 99H ;是否为3V

                JAE      NEXT2

                MOV     AL, 0C3H ;中间四个灯亮L6-L4

                 MOV     DX, IOAPT

                 OUT     DX,AL

                 JMP     INTRE2

NEXT2:      CMP     AL, 0C2H ;是否为3.8V

                JA      NEXT3

                MOV     AL, 0F0H ;左边四个灯亮L4-L1

                 MOV     DX, IOAPT

                 OUT     DX,AL

                 JMP     INTRE2

NEXT3:      MOV     AL, 00H ;灯全亮

                 MOV     DX, IOAPT

                 OUT     DX,AL

INTRE2:     MOV     AL,20H

                MOV     DX,INTPORT1

                OUT     DX,AL

                IRET

CONVERS:    MOV     AH,AL

                AND     AL,0FH

                MOV     BX,OFFSET BUF

            MOV     [BX+5],AL

            MOV     AL,AH

            AND     AL,0F0H

            MOV     CL,04H

            SHR     AL,CL

            MOV     [BX+4],AL

            RET

DISP:       MOV     AL,0FFH         ;00H

                MOV     DX,PA

                OUT     DX,AL

                MOV     CL,0DFH     ;20H        

                MOV     BX,OFFSET BUF

DIS1:       MOV     DX,PC

                OUT     DX,AL

               MOV     AL,[BX]

                MOV     AH,00H

                PUSH    BX

                MOV     BX,OFFSET DATA1

               ADD     BX,AX

               MOV     AL,[BX]

                POP     BX

                MOV     DX,PB

                OUT     DX,AL

                MOV     AL,CL

                MOV     DX,PA

                OUT     DX,AL

                PUSH    CX

DIS2:       MOV     CX,00A0H

                LOOP    $

                POP     CX

                CMP CL,0FEH  ;01H

                JZ LX1

                INC BX

                ROR CL,1    

                JMP DIS1

LX1:        MOV AL,0FFH

                MOV DX,PB

                OUT DX,AL

                RET

BUF1:       MOV BUF,00H

                MOV BUF+1,08H

                MOV BUF+2,00H

                MOV BUF+3,09H

                MOV BUF+4,00H

                MOV BUF+5,00H

                RET

CODE        ENDS

                END    START

更多相关推荐:
单片机实验报告

单片机实验报告学生姓名学号专业指导教师学院信息与电气工程学院20xx年11月单片机实验报告实验一MCS51指令系统实验数据排序1实验目的熟悉MCS51指令系统掌握程序设计方法加深对内部存储器读写的认识熟悉仿真开...

单片机实验报告

通信与信息工程学院20xx20xx学年第二学期实验报告课程名称单片机原理及应用专业班级学号学生姓名指导教师日期20xx年4月15日1实验一单片机汇编语言程序设计一实验目的1学习MedWin或Keilc51仿真软...

单片机实验报告

题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握Keil软件的基本使用12掌握单片机汇编语言基本编程二实验内容1学习用Keil软件...

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

单片机实验报告

海南大学届单片机实验报告4份论文题目学生姓名学号所在院系专业班级授课教师完成时间蜂鸣器实验实验目的1熟悉实验板中蜂鸣器工作原理掌握汇编编程控制蜂鸣器播放音乐2掌握单片机编程控制蜂鸣器发出不同频率声音的方法3了解...

单片机实验报告

单片机课程设计报告实验五系别物理与电子工程学院年级专业班级学号学生姓名指导教师设计时间常熟理工学院课程设计报告目录1题目22实验要求221实验目的222实验内容23总体设计231硬件设计232软件设计44运行结...

51单片机实验报告

08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位...

单片机交通灯实验报告

交通灯控制系统设计院系:电子电气工程学院专业:电气自动化班级:P10电气四班成员:*************交通灯控制系统设计实验一.设计目的1.通过本次课程设计进一步熟悉和掌握单片机的结构及工作原理,巩固和加…

单片机实验报告1

实验1开发环境使用及常用指令功能一、实验目的1、掌握集成开发环境的使用;2、初步了解实验装置的使用方法;3、熟悉常用指令的功能;4、熟悉程序调试的方法;5、学习自己编写、调试计算程序。二、实验说明利用单片机及K…

短学期单片机实验报告

宁波大学信息与工程学院课程名称姓名学号专指导老师班级完成时间单片机应用系统设计自动化09120xx7121目录一实验内容及设计要求311实验内容312设计要求3二概述课题意义及背景介绍3三硬件电路图设计及说明4...

单片机学习实验报告

嵌入式系统实验报告实验1KeilC51的使用汇编语言实验目的初步掌握KeilC51汇编语言和ZY15MCU12BD型综合单片机实验箱的操作和使用能够输入和运行简单的程序实验设备ZY15MCU12BD型综合单片机...

单片机秒表实验报告

单片机课程设计说明书题目电子秒表学生姓名任闯徐金超张飞俞军蒲敏谢长安陈琛曾超刘强强专业农业机械化与自动化班级08级1班指导教师吴敏日期20xx年12月12日目录第一章单片机课程设计任务书1一目的意义1二设计时间...

单片机实验报告(42篇)