实验七 中断方式的串口通信实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.尝试在此软件的基础上,加入流水灯的内容。