接口实验报告

时间:2024.4.30

武汉轻工大学

         

---现代微机原理与接口技术报告

                                  20##  年 5 月  15 日

             实验1  定时与中断接口程序设计

实验项目:定时与中断接口程序设计

实验日期:4月22日

实验场地:东7-409

实验环境:

  硬件环境:PC机一台;

  软件环境:操作系统不限,TURBO C++3.0。

实验目的:

   1.学习定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法;

2.学习使用TURBO C++对8253、8255进行编程操作;

3.熟悉拦截PC机中断向量的TC++ 编程方法。

实验过程

1.建立源文件

启动TURBO C++3.0,建立Timer.CPP。保存到D:/110511313/Timer.CPP;

2.设置TC工作目录

选菜单Options/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放目录。这样,TC生成的可执行文件就会存放到此工作目录下。

3.输入源程序

#include  <stdio.h>     //支持标准输入输出,如printf()。

#include  <dos.h>       //支持接口访问、中断向量操作函数

#include  <STDLIB.H>    //支持exit()函数

#ifdef __cplusplus      //定义C++使用的中断函数标识符。

        #define __CPPARGS ...

#else

        #define __CPPARGS

#endif

int  nTick=0,sec=0,flag=0;

unsigned char  sys_PB,my_PB;

void interrupt far (*sys_int_08)(__CPPARGS);

void interrupt far my_int_08(__CPPARGS)   

{//8号中断,每55ms中断一次,由8253的0号定时器定时,并向8259 IRQ0申请中断

     ++nTick;

        if(nTick ==1) outportb(0x61,my_PB);      //开始鸣叫

        else if(nTick ==3)  outportb(0x61,0x01);  //停止鸣叫,PB1=0, PB0保持为1

        else if(nTick>18)

        {                                        // 1second/55ms 近似等于18

 flag=1;

           nTick=0;

           sec++;

        }

        sys_int_08();                          //调用系统的中断向量

}

void  main()

{  unsigned  int  Time_up;

       printf("Please input Up Time(5--30): ");

       scanf("%d",&Time_up);

       printf("\n");

       if(Time_up<5 || Time_up>30)

       {   printf("Input Error!");

           exit(1);                          //结束程序

       }

        sys_PB=inportb(0x61);                //读取PB口,内容

        my_PB=sys_PB|0x03;                   //将PB口低2位(PB0,PB1)置1

                      //8253通道2,产生1KHz方波,送到扬声器,使扬声器发声

       outportb(0x43,0xb6);

                      //CW=10110110 B,通道2,先低字节,再高字节,方式3,二进制

       outportb(0x42,0xa6); //low byte,

       outportb(0x42,0x04); //high byte,0x04a6=1190,f = 1.19MHz,out=f/1190=1000Hz

       sys_int_08=getvect(0x08);   //保存系统的中断向量

       setvect(0x08,my_int_08);    //设置系统向量

       while(1)

       {   if(flag==1)

           {  flag=0;

              printf("%d  ",sec);

              if(sec==Time_up) break;

            }

       }

printf("Timer Up!\n\n");

outportb(0x61,sys_PB);       //恢复系统的PB口状态

       setvect(0x08,sys_int_08);     //恢复系统的中断向量

}

4.运行程序,并修改一些数据重新运行。

实验结果及分析

     通过本次实验学习使用TURBO C++对8253、8255进行编程操作,我熟悉了8253、8255的接口逻辑和它们的内部结构、工作原理。了解了8253、8255的工作方式,并熟练掌握了8259的工作原理。

               实验2  MFC串行通信程序设计

实验项目:MFC串行通信程序设计

实验时间:4月29日

实验地点:东7-409

实验环境:

    硬件环境:PC机一台

         串行通信终接头一个

         串行通信电缆一根

软件环境:Windows7操作系统VC++6.0

实验目的:

    1.了解MFC编写Windows应用程序的一般方法,熟悉Windows API 接口函数的使用;

2.熟悉定时器Timer( )函数、RS232 API接口函数的使用,两者之间的协调工作。

实验过程

1.建立基于对话框的MFC工程

工程名为Scom,对话框的类(Class)为CscomDlg,对应的头文件为ScomDlg.h,源程序文件为ScomDlg.cpp。

                        

              

    

2.  建立串行通信接口

(1)在ScomDlg.h文件中定义串行通信接口对象的句柄

class CScomDlg : public CDialog

{

// Construction

public:

        CScomDlg(CWnd* pParent = NULL); // standard constructor

HANDLE   hCom;                         //自己添加的代码

……

(2)在ScomDlg.cpp文件中的OnInitDialog()函数中创建串行通信接口

BOOL CScomDlg::OnInitDialog()

{ ......

// TODO: Add extra initialization here

       hCom=CreateFile( "COM1",GENERIC_READ|GENERIC_WRITE, 0,

          NULL, OPEN_EXISTING, 0, NULL);   //创建接口对象,返回句柄

if(hCom==(HANDLE)-1) {  MessageBox( "创建串口1接口实例失败",

"未找到COM1口",MB_ICONSTOP|MB_OK ); 

return TRUE;

}

DCB  dcb;  //定义DCB(设备控制块)结构,用于设置串口设备的属性和参数

GetCommState(hCom,&dcb);      //先得到系统默认的DCB属性和参数

BuildCommDCB("COM1: 1200, n,8,1", &dcb ); 

         //再修改DCB的几个参数:1200bps,无奇偶校验,8数据位,1停止位

SetCommState(hCom,&dcb);             

COMMTIMEOUTS   ComTimeOut; 

                            //定义超时结构,用于设置串口读写的等待时间

ComTimeOut.ReadIntervalTimeout=MAXWORD;  //读间隔超时

ComTimeOut.ReadTotalTimeoutMultiplier=0;     //读总超时系数

ComTimeOut.ReadTotalTimeoutConstant=0;         /读总超时常数

ComTimeOut.WriteTotalTimeoutMultiplier=0;     /写总超时系数

ComTimeOut.WriteTotalTimeoutConstant=400;     //写总超时常数

SetCommTimeouts(hCom,&ComTimeOut);

                                   //按超时结构设置串口读写的等待时间

SetupComm(hCom,1000,1000);         //设置读写缓冲区

PurgeComm(hCom,PURGE_TXCLEAR);      //清空发送缓冲区

PurgeComm(hCom,PURGE_RXCLEAR);      //清空接收缓冲区

    ……

3. 用可视化工具在对话框窗体上添加按钮、编辑框.

     

 按下表设置各控件的属性。

   为上述控件加入变量。选View/ClassWizard,选Member Variables卡,按下图设置

     Var.bmp

4. 建立各控件的消息响应函数

(1)为“退出”按钮建立消息响应函数,双击“退出”按钮,弹出对话框,点击确定。于是MFC自动在CscomDlg类中建立了“退出”按钮的响应函数OnCancel();请在该函数中添加代码:

void CScomDlg::OnCancel()

{       // TODO: Add extra cleanup here

        CloseHandle(hCom);        //最后释放串口资源

         ……

(2)为“发送” 按钮建立消息响应函数,双击“发送”按钮,弹出对话框,点击确定。于是MFC自动在CscomDlg类中建立了“发送”按钮的响应函数OnSend ();请在该函数中添加代码:

void CScomDlg::OnSend()

{ // TODO: Add your control notification handler code here

COMSTAT   state;          //定义串口状态结构,用于存放串口通信的状态

DWORD     BytesWritten;     //定义存放实际发送了多少字节的变量

int         SendBytes;     //定义应发送的字节数存放变量

LPTSTR     TxdBuff;           //定义将发送的字符串

UpdateData(TRUE);        //将当前编辑框中输入的字符更新到m_SenTxt变量中

SendBytes=m_SenTxt.GetLength();        //得到m_SenTxt变量中存放的字符数

TxdBuff=m_SenTxt.GetBuffer(SendBytes);  //使发送字符串指针指向m_SenTxt

BOOL OK=WriteFile(hCom,TxdBuff,SendBytes,&BytesWritten,NULL); //发送

if(!OK) {                                                     //发送失败

    ClearCommError(hCom,&BytesWritten,&state);              //清除发送错误

}

}

5. 为接收数据创建定时器

每隔500ms自动检测是否有数据发来。如果有数据发来,则读取、显示传来的数据。

(1)先在ScomDlg.cpp文件中的OnInitDialog()函数中创建定时器:

BOOL CScomDlg::OnInitDialog()

{......

// TODO: Add extra initialization here

SetTimer(1,500,NULL);   //创建定时器

hCom=CreateFile( "COM1", GENERIC_READ|GENERIC_WRITE,  

......

当程序退出时,应删除本定时器:

void CScomDlg::OnCancel()

{   // TODO: Add extra cleanup here

KillTimer(1);        //删除定时器

CloseHandle(hCom);  //最后释放串口资源

......

(2) 再创建“定时时间到”消息响应函数。选菜单项View/ClassWizard,选Message Map卡,在Object IDs列表框中选CScomdlg,在Class Name列表框中选CScomdlg,在Messages列表框中选WM_TIMER,点击“Add Function”、“Edit Code”。于是,在CScomDlg类中添加了OnTimer(UINT nIDEvent)函数,请输入代码:

void CScomDlg::OnTimer(UINT nIDEvent)

{       // TODO: Add your message handler code here and/or call default

DWORD   BytesRead, dwErrorFlags;   //定义存放实际接收到多少字节的变量

BYTE    RxdBuff[51];               //定义存放接收到的字符的数组

COMSTAT ComStat;  
  ClearCommError(hCom,&dwErrorFlags,&ComStat);  

               //读取串行设备的当前状态,获取接收缓冲区中已有的字节数
    BytesRead =min(50,ComStat.cbInQue);          //应该读取的数据长度

       If(BytesRead)

       ReadFile(hCom,RxdBuff, BytesRead,&BytesRead,NULL); 

                                   //试图接收BytesRead个字符

    if(BytesRead>0)

    {                              //实际收到了BytesRead个字符

        RxdBuff[BytesRead]=0;      //在收到的字符串后加结尾标志

        m_Receive+=_T(RxdBuff);    //将收到的字符串连接到接收编辑框变量

        UpdateData(FALSE);         //更新接收编辑框的显示

        }

        

实验结果及分析

   实验截图:

    

实验总结:

通过本次实验了解MFC编写Windows应用程序的一般方法,熟悉Windows API 接口函数的使用。

这个实验 也是做通信,我们也做过内斯的实验。同样是先创建连接(接口),通过验证,然后发送、接收信息。我们做的事linux中的tcp/ip通信协议,感觉差不多。


第二篇:微机原理及接口技术 实验报告


微机原理及接口技术

实验报告

学    院:   信息工程学院   

专业班级:   通 信  0801   

姓    名:                  

学    号:                   

 

实验一 多位十进制数相加实验

一.实验目的

1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。

2.掌握数据传送和算术运算指令的用法。

二.实验内容

将两个多位十制数28056,47193相加,并显示加数,被加数,和。要求加数和被加数均以ASCII码形式各自顺序存放在DATAl和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。

三.程序流程图

 


流程图: 决策: CX-1=0 N

 


Y

 

四.参考程序

SHOW MACRO B

        MOV   DL,B

        MOV   AH,02H

        INT   21H

        ENDM

DATA    SEGMENT

DATA1   DB  33H,39H,31H,37H,34H

DATA2   DB  36H,35H,30H,38H,32H

DATA3   DB  '__',   0DH,0AH,'$'

DATA    ENDS

STACK   SEGMENT  STACK

STA     DB 20 DUP (?)

TOP     EQU LENGTH  STA

STACK   ENDS

CODE    SEGMENT

ASSUME  CS:CODE,DS:DATA,SS:STACK,ES:DATA

START:  MOV AX,DATA

        MOV DS,AX

        MOV AX,STACK

        MOV SS,AX

        MOV AX,TOP

        MOV SP,AX

        MOV SI,OFFSET DATA2

        MOV BX,05

        SHOW 20H

        CALL DISPL

        SHOW 0DH

        SHOW 0AH

        MOV SI,OFFSET DATA1

        MOV BX,05

        SHOW 2BH

        CALL DISPL

        SHOW 0DH

        SHOW 0AH

        MOV  CL,7

S1:     SHOW 2DH

        LOOP S1

        SHOW 0DH

        SHOW 0AH

        MOV SI,OFFSET DATA1

        MOV DI,OFFSET DATA2

        CALL ADDA

        MOV SI,OFFSET DATA1

        MOV BX,05

        SHOW 20H

        CALL DISPL

        MOV AX,4C00H

        INT 21H

DISPL   PROC  NEAR

DS1:    SHOW [SI+BX-1]

        DEC BX

        JNZ DS1

        RET

DISPL   ENDP

ADDA    PROC  NEAR

        MOV DX,SI

        MOV BP,DI

        MOV BX,05

AD1:    SUB  BYTE PTR [SI+BX-1],30H

        SUB  BYTE PTR [DI+BX-1],30H

        DEC  BX

        JNZ  AD1

        MOV SI,DX

        MOV  DI,BP

        MOV  CX,05

        CLC

AD2:    MOV AL,[SI]

        MOV BL,[DI]

        ADC AL,BL

        AAA

        MOV [SI],AL

        INC SI

        INC DI

        LOOP AD2

        MOV SI,DX

        MOV DI,BP

        MOV BX,05

AD3:    ADD BYTE PTR [SI+BX-1],30H

        ADD BYTE PTR [DI+BX-1],30H

        DEC BX

        JNZ AD3

        RET

ADDA    ENDP

CODE    ENDS

        END   START

四.实验过程

进入DOS环境,进入E盘MASM子目录,键入:

E: 回车

CD: MASM 回车

EDIT *.ASM 回车(*为程序名)

打开编辑窗口将汇编语言源程序输入

对源程序进行汇编链接,执行并调试可执行文件

六.思考题

    不改变数据段DATA1DATA2的内容,如何将加数与被加数分别由2805647193变成6508239174,并且相加

答:源程序不变将

    DATA1   DB  33H,39H,31H,37H,34H

    DATA2   DB  36H,35H,30H,38H,32H

后加上

    DATA4   DB  37H,34H,31H,39H,33H

DATA5  DB  32H,38H,30H,35H,36H

并将全部DATA1和DATA2全部改成DATA4和DATA5

就可以实现

七、实验感想:

     通过本实验,基本学会了数据传送和算术运算指令的用法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。

实验二 统计数据个数实验

一.实验目的

    掌握将多位十六进制数转换成多位十进制数ASCII码的方法

二.实验内容  

    统计内存数组中大于0和小于0的元素个数,并将统计结果分别存放在LRESULT和HRESULT变量中,并显示个数

三.程序流程图

   流程图: 可选过程: 开始


Y

 

流程图: 决策: CL-1=0?              N

 

                                     Y

 

流程图: 可选过程: 结束 

四.参考程序

DATA  SEGMENT

  ARY   DB  1,3,-1,2,6,-9,-5,7,8,1,3,8,-6,8,-9,-7,2,4,-3,-3

        DB  -4,7,7,8,3,1,3,6,8,5,5,6,4,5,7,-4,2,4,5,-7,5,4

        DB  2,5,7,8,8,8,7,6,-5,4,3,2,1,-1,2,2,3,-4,5,6,7

        N=$-ARY

  LRESULT   DW  0

  HRESULT   DW  0

  TJJG      DB   'STATISTICS RESULT:',0DH,0AH,'$'

  DATA      ENDS

  CODE      SEGMENT

            ASSUME   CS:CODE,DS:DATA

  START:    MOV  AX,DATA

  MOV       DS, AX

  MOV       ES, AX

  SHOW      MACRO  B

            PUSH   DX

            PUSH   AX

            MOV    AH,02H

            INT    21H

            POP    AX

            POP    DX

            ENDM

            XOR    CX,CX

            MOV    CX,N

            LEA    SI,ARY

  LOP:      MOV    AL,[SI]

            CMP    AL,0

            JNS    PLUS

            INC    LRESULT

            JMP    CONT

  PLUS:     INC    HRESULT

  CONT:     INC    SI

            LOOP   LOP

            LEA    DX,TJJG

            MOV    AH,09H

            INT    21H

            SHOW   '+'

            MOV    AX,HRESULT

            CALL   DISPL

            SHOW   0DH

            SHOW   0AH

            SHOW   '-'

            MOV    AX,LRESULT

            CALL   DISPL

            MOV    AX,4C00H

            INT    21H

  DISPL     PROC

            PUSH   DX

            PUSH   AX

            MOV    CX,10

            MOV    DX,00H

            MOV    BX,00H

            DIV    CX

            MOV    BX,DX

            ADD    AL,30H

  DISPL1:   MOV    DL,AL

            MOV    AH,02H

            INT    21H

            MOV    DL,BL

            ADD    DL,30H

            MOV    AH,02H

            INT    21H

            POP    AX

            POP    DX

            RET

  DISPL     ENDP

  CODE      ENDS

            END   START

五.实验过程

     进入E盘的MASM子目录,打开编辑窗口将汇编语言源程序输入,对源程序进行汇编链接,执行并调试可执行文件

六.思考题

   试分析程序中语句“MOV CX,N”执行后,赋给CX寄存器的值是多少?

答:赋给CX的值是63

七、实验感想

通过本实验,基本学会了数据传送和算术运算指令的用法及将多位十六进制数转换为多位十进制数ASCII码得方法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。

实验三 直流电机测速实验

一. 实验目的

1.掌握8254的工作原理和编程方法

2.了解光电开关的使用方法,掌握用光电传感器测量电机转速的方法

. 实验内容

    光电测速的基本电路由光电传感器、计数器和定时器组成。测量时在被测电机主轴上固定一个圆盘,圆盘的边缘上打上小孔。传感器的红外发射端和接收端装在圆盘的两测,电机带动圆盘转到有孔的位置时,红外光通过,红外接收管导通,输出低电平。红外光被挡住时接收管截止,输出高电平。用计数器记录在一定时间内传感器发出的脉冲个数就可以计算出电机转速。

. 线路连接

    接线方法:8254计数器/定时器0和2作为定时器,确定测速时间,定时器0的CLK0接1MHZ脉冲频率,OUT0作为定时器2的输入,与CLK2相连,输出OUT2与8255的PA0端相连。GATE0、GATE2均接+5V,8254计数器/定时器1作为计数器,输入CLK1与直流电机计数端相连,GATE1与8255的PC0相连。电机DJ端与+5V~0V模拟开关SW1相连。

. 编程提示

8254计数器/定时器1作为计数器,记录脉冲个数,计数器/定时器0和2作为定时器,组成10~60秒定时器,测量脉冲个数,算出电机每分钟的转速并显示在屏幕上。

8255的PA0根据OUT2的开始和结束时间,通过PC0向8254计数器/定时器1发出开始和停止计数信号。

五. 流程图

 

. 参考程序

DATA     SEGMENT

IOPORT   EQU 0D880H-0280H

IO8255K  EQU IOPORT+283H

IO8255A  EQU IOPORT+280H

IO8255C  EQU IOPORT+282H

IO8254K  EQU IOPORT+28BH

IO82542  EQU IOPORT+28AH

IO82541  EQU IOPORT+289H

IO82540  EQU IOPORT+288H

MESS     DB  'STRIKEANY KEY,RETURN TO DOS!',0AH,0DH,'$'

COU      DB  0

COU1     DB  0

COUNT1   DB  0

COUNT2   DB  0

COUNT3   DB  0

COUNT4   DB  0

DATA     ENDS

CODE     SEGMENT

ASSUME   CS:CODE, DS:DATA

START:   MOV AX,DATA

         MOV DS,AX

         MOV DX,OFFSET MESS

         MOV AH,09H

         INT 21H

         MOV DX,IO8254K

         MOV AL,36H

         OUT DX,AL

         MOV DX,IO82540

         MOV AX,50000

         OUT DX,AL

         NOP

         NOP

         MOV AL,AH

         OUT DX,AL

         MOV DX,IO8255K

         MOV AL,90H

         OUT DX,AL

         MOV DX,IO8255C

         MOV AL,00

         OUT DX,AL

LL:      MOV AH,01H

         INT 16H

         JNZ QUIT1

         MOV DX,IO8254K

         MOV AL,70H

         OUT DX,AL

         MOV DX,IO82541

         MOV AL,0FFH

         OUT DX,AL

         NOP

         NOP

         OUT DX,AL

         MOV DX,IO8254K

         MOV AL,90H

         OUT DX,AL

         MOV DX,IO82542

         MOV AL,100

         OUT DX,AL

         MOV DX,IO8255C

         MOV AL,01H

         OUT DX,AL

         JMP A0

QUIT1:   JMP QUIT

A0:      MOV DX,IO8255A

A1:      IN  AL,DX

         AND AL,01H

         JZ  A1

         MOV DX,IO8255C

         MOV AL,00H

         OUT DX,AL

         MOV DX,IO8254K

         MOV AL,70H

         OUT DX,AL

         MOV DX,IO82541

         IN  AL,DX

         MOV BL,AL

         IN  AL,DX

         MOV BH,AL

         MOV AX,0FFFFH

         SUB AX,BX

         CALL DISP

         MOV DL,0DH

         MOV AH,02

         INT 21H

         MOV DL,0AH

         MOV AH,02

         INT 21H

         JMP LL

DISP     PROC NEAR

         MOV DX,0000H

         MOV CX,03E8H

         DIV CX

         MOV COUNT1,AL

         MOV AX,DX

         MOV CL,64H

         DIV CL

         MOV COUNT2,AL

         MOV AL,AH

         MOV AH,00H

         MOV CL,10

         DIV CL

         MOV COUNT3,AL

         MOV COUNT4,AH

         MOV AL,COUNT1

         CALL DISP1

         MOV AL,COUNT2

         CALL DISP1

         MOV AL,COUNT3

         CALL DISP1

         MOV AL,COUNT4

         CALL DISP1

         RET

DISP     ENDP

DISP1    PROC NEAR

         AND  AL,0FH

         CMP  AL,09H

         JLE  NUM

         ADD  AL,07H

NUM:     ADD  AL,30H

         MOV  DL,AL

         MOV  AH,02

         INT  21H

         RET

DISP1    ENDP

QUIT:    MOV  AH,4CH

         INT  21H

CODE     ENDS

         END  START

七. 实验结果

八. 思考题

   关闭电机后,为什么8254计数不为0

答:关闭电机后,但主机未断电,计数值锁存在锁存器中,所以读数会一直为锁存器的值,8254计数不会显示0

九.实验感想

通过本实验,基本掌握了8254的工作原理和编程方法,了解了光电开关,掌握了用光电传感器测量电机转速的方法。同时,也进一步提高了自己实践动手的能力,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。

实验四 十字路口红绿灯闪烁实验

一.实验目的

     通过对红、绿、黄灯的控制,熟练掌握8255A接口芯片的编程方法。

二.实验内容

 对8255A接口芯片进行编程,使红,黄,绿发光二极管按照十字路口交通灯的形式点亮或熄灭。

.线路连接

    

                

 

     发光二极管共8个,其中两组绿,黄,红灯用6个,L2、L3、L4为一组,L5、L6、L7为一组;实验台连接如图4.3所示。高电平“1”时,点亮。

四.流程图

五.参考程序

DATA     SEGMENT

IOPORT   EQU 0D880H-280H

IO8255C  EQU IOPORT+282H

IO8255T  EQU IOPORT+283H

PB       DB  ?

MESS     DB 'ENTER ANY KEY CAN EXIT TO DOS!',0DH,0AH,'$'

DATA     ENDS

STACK    SEGMENT STACK

STA      DW  50 DUP(?)

TOP      EQU LENGTHSTA

STACK    ENDS

CODE     SEGMENT

         ASSUME CS:CODE,DS:DATA,SS:STACK

START:   MOV AX,DATA

         MOV DS,AX

         MOV ES,AX

         MOV AH,09H

         MOV DX,OFFSET MESS

         INT 21H

         MOV DX,IO8255T

         MOV AL,81H

         OUT DX,AL

         MOV DX,IO8255C

         IN  AL,DX

         MOV PB,AL

         MOV DX,IO8255T

         MOV AL,80H

         OUT DX,AL

         MOV DX,IO8255C

         MOV AL,PB

         OR  AL,0CH

         OUT DX,AL

         MOV AL,30H

         OUT DX,AL

         CALL  DELAY10

   LLL:  MOV DX,IO8255C

         MOV AL,12H

         OUT DX,AL

         CALL DELAY10

         CALL DELAY10

         CALL DELAY10

         CALL DELAY10

         MOV AL,10H

         OUT DX,AL

         MOV CX,0040H

  TTT:   MOV AL,0CH

         OUT DX,AL

         PUSH CX

         MOV CX,80H

  LOP1:  CALL DELAY1

         LOOP LOP1

         MOV AL,00H

         OUT DX,AL

         MOV CX,80H

  LOP2:  CALL DELAY1

         LOOP LOP2

         POP CX

         LOOP TTT

         MOV AL,30H

         OUT DX,AL

         CALL DELAY10

         MOV AL,21H

         OUT DX,AL

         CALL DELAY10

         CALL DELAY10

         CALL DELAY10

         CALL DELAY10

         MOV AL,20H

         OUT DX,AL

         MOV CX,0040H

   GGG:  MOV AL,0CH

         OUT DX,AL

         PUSH CX

         MOV CX,80H

   LOP3: CALL DELAY1

         LOOP LOP3

         MOV AL,00H

         OUT DX,AL

         MOV CX,80H

   LOP4: CALL DELAY1

         LOOP LOP4

         POP CX

         LOOP GGG

         MOV AL,30H

         OUT DX,AL

         CALL DELAY10

         MOV AH,06H

         MOV DL,0FFH

         INT 21H

         JNZ PPP

         JMP LLL

   PPP:  MOV AX,4C00H

         INT 21H

  DELAY1 PROC NEAR

         PUSH CX

         MOV CX,0FFFFH

   CCC:  LOOP CCC

         POP CX

         RET

  DELAY1 ENDP

 DELAY10 PROC NEAR

         PUSH AX

         PUSH CX

         MOV CX,0F00H

   UUU:  CALL DELAY1

         LOOP UUU

         POP CX

         POP AX+*+*

         RET

 DELAY10 ENDP

   CODE  ENDS

         END START

六.实验结果

1、汇编成功

2、 经测试灯是按照指定规律变化

七.实验现象

      红黄绿变化的规律为:两个路口红灯全亮;南北路口绿灯亮,东西路口红灯亮;南北路口绿灯灭,东西路口红灯亮;两个路口黄灯闪烁;两个路口红灯全亮;东西路口绿灯亮,南北路口红灯亮;东西路口绿灯灭,南北路口红灯亮;两个路口黄灯闪烁;依次从头到尾循环出现

八.思考题:程序中红,绿,黄灯点亮和熄灭的延时时间是如何设定的?

     答:通过用延时子程序CALL  DELAY  10的次数来设定

九.实验感想

 通过本实验,基本掌握了8255A接口芯片的编程方法,熟悉了DOS环境,同时,也进一步提高了自己的实践动手能力,并且对微机原理及接口技术这门课程有了更深的了解和认识。

更多相关推荐:
接口实验报告

一实验目的1掌握8255A编程原理2掌握键盘的输入和数码管的显示3提高理论与实践相结合的能力强化所学内容二实验要求用8255A实现模拟电梯用键盘输入要求电梯所到达的楼层数码管显示电梯当前所在楼层电梯在初始楼层当...

接口技术实验4报告

上海大学计算机学院计算机接口技术实验4专业计算机科学与技术班级周一13节姓名学号计算机工程与科学学院报告日期20xx年10月29日实验名称AD转换实验和电机驱动实验一实验目的1掌握ADC0809芯片的硬件电路知...

微机接口实验报告

实验一:显示程序实验(20##年4月22日)1、实验目的及实验内容实验目的:1.掌握在PC机上以十六进制数形式显示数据的方法2.掌握部分DOS功能调用的使用方法3.熟悉Tddebug调试环境和TurboDebu…

接口实验报告

现代微机原理与接口技术接口部分实验报告学号09008112姓名马京亚成绩学号东南大学计算机科学与工程学院二一年十二月微机原理与接口技术接口部分实验报告目录实验二可编程定时器计数器82533实验三Windows中...

接口实验报告

一实验目的及要求目的通过本次综合实验使学生综合运用计算机接口与通信技术汇编语言以及电子技术等课程的内容为以后从事计算机检测与控制工作奠定一定的基础要求1主要掌握并行IO接口芯片82538255A中断控制芯片82...

接口实验报告

接口实验报告,内容附图。

接口实验报告模板

实验一8255A并行口实验一系别机械工程系专业机械电子工程班级学号1220xx330姓名田勇鹏一实验目的1掌握8255A和微机接口方法2掌握8255A的工作方式和编程原理二实验设备DICE8086K超强型实验系...

接口实验报告

接口实验报告,内容附图。

接口与实现 实验报告

XXXXXXXX实验报告XXXXXXXXXX系部计算机系班级姓名XXXX班课程Java语言程序设计XXXX学号2XXXXX日期XXXXXXXXXXX项目接口与实现评价成绩1相关知识点接口体中只有常量的声明没有变...

接口与通信实验报告

华北电力大学实验报告实验名称课程名称专业班级学号指导教师8255并行接口实验中断特性及8259应用编程实验8253定时计数应用实验模数AD转换实验接口与通信实验设计学生姓名成绩实验日期实验报告如打印纸张用A4左...

微机原理与接口技术实验指导书12级用

微机原理及接口技术实验指导书贵阳学院电子与通信工程学院20xx实验一清零程序一实验目的掌握8088汇编语言程序设计和调试方法熟悉键盘操作二实验内容把RAM区数据段内4000H40FFH单元的内容清零三实验步骤1...

微机原理与接口技术软件实验指导书

微机原理及接口技术实验指导书20xx年9月信息学院实验中心微机实验室第一章80X86微机原理及其程序设计实验一熟悉PC机的使用和调试汇编程序的方法一实验目的1掌握汇编程序由编辑编译链接到调试的全过程2通过汇编调...

接口实验报告(32篇)