实验七 中断方式的串口通信实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七中断方式的串口通信实验

一实验目的:

进一步掌握8051单片机串行口工作原理和方式,以及单片机中断原理和方法。将单片机串口通信与中断综合运用。

二实验原理:

8051单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出。这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。如果在串行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。

在上一个实验中,在单片机与微机进行数据传输时,我们使用查询方式,等待发送/接收中断信号,使CPU工作效率较低。因此,我们可以用中断的方式进行单片机与微机的串口通信,当发送/接收完毕后产生中断。这样,在数据传输过程中,CPU可以用于其他任务,大大提高了CPU的工作效率。

在外中断实验中已经提及串行口的中断向量为0023H,中断号为4,另外中断允许位为ES。

三实验内容:

单片机与微机相连,使用中断方法实现8051单片机与微机的串口通信。微机键入一个字符后发送至单片机,单片机收到后又将此字符发送回微机,在微机屏幕上回显。要求在11.0592MHZ下,串行口的波特率为9600,方式1。

四实验电路图:

与实验六的实验图一致。

五实验方法:

1. 根据电路图连接好实验电路。

1.按照实验要求编写实验程序,建立新工程,保存为INTCOM。

2.软件调试程序,并在串口观察窗中调试,方法同上一个实验。

3.将Keil C51产生的intcom.hex文件通过在线下载ISP或商用编程器。

六参考程序:

1.汇编源程序

ORG 0000H

LJMP MAIN

ORG 0023H ;中断服务入口地址

LJMP COM_INT_SRV

MAIN: LCALL INIT_TMR1

LCALL INIT_SCI

AGAIN: SJMP AGAIN

COM_INT_SRV: JBC RI,HERE_SRV ;中断服务子程序

SJMP TEST_AGAIN

HERE_SRV: MOV R7,SBUF

MOV SBUF,R7

TEST_AGAIN: RETI

INIT_SCI: MOV SCON,#0x50

SETB ES

SETB EA ;开中断

RET

INIT_TMR1: MOV TMOD,#0x20 ;初始化定时器

MOV TH1,#0xFD

MOV TL1,#0xFD

SETB TR1

RET

END

2.C语言源程序

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

* 文件名: intcom.c

*描述:使用中断方法,微机发送数据到单片机,单片机接收后又

发还至微机,并在微机屏幕上显示。

**************************************************/ #include

#include

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

* 函数名: INIT_SCI

* 描述:对串口进行初始化,并打开中断

* 输入:无

* 返回:无

**************************************************/ void INIT_SCI()

{

SCON=0X50; //串口初始化

ES=1; //允许串口中断

EA=1; //开中断

}

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

* 函数名: INIT_TMR

* 描述:对定时器进行初始化

* 输入:无

* 返回:无

**************************************************/ void INIT_TMR()

{

TMOD=0X20; //定时器初始化

TH1=0xfd;

TL1=0xfd;

TR1=1;

}

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

* 函数名:serial-int

* 描述:中断服务,接收和发送数据

* 输入:无

* 返回:无

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

void serial_int(void) interrupt 4

{

unsigned char data c;

if (_testbit_(RI)) //接收中断服务

{ c=SBUF;

SBUF=c;

}

}

void main(void)

{

INIT_TMR();

INIT_SCI();

while(1);

}

思考题:

1.用串口连接单片机和PC,用单片机发出一串字符,让PC显示

2.用串口连接单片机和PC,PC上输入字母L时,让单片机点亮一个LED,PC上输入字

母B时,让单片机熄灭这个LED。

3.尝试在此软件的基础上,加入实验二发光二极管闪烁的内容。和实验六比较一下,是否

很容易实现。

4.尝试在此软件的基础上,加入流水灯的内容。

相关文档
最新文档