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

合集下载

实验4-7(外部中断,串口通信)

实验4-7(外部中断,串口通信)
五、实验原理及软件框图
主程序框图外部中断子程序框图
六,参考程序
#include <reg51.h>
sbit LED = P1^0;
bit LEDBuf;
void ExtInt0() interrupt 0
{
LEDBuf = !LEDBuf;
LED = LEDBuf;
}
void main()
{
LEDBuf = 0;
七段数码管的字型代码表如下表:
a
f b
g
e c
d
。dp
显示字形
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1

串行口通信实验 单片机实验报告

串行口通信实验 单片机实验报告

实验六串行口通信实验一、实验内容实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。

本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。

二、实验目的掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。

三、实验原理51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。

进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。

为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。

单片机串行接口有两个控制寄存器:SCON和PCON。

串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。

在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。

由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。

待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。

单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。

在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。

WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。

如果用户要进行串行通信,可以调用WINDOWS的API 应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。

stm32串口通信实验原理

stm32串口通信实验原理

stm32串口通信实验原理STM32是一款由STMicroelectronics公司推出的基于ARM Cortex-M 内核的32位微控制器。

在STM32系列中,串口通信是一种常见的外设模块,可以实现与其他设备之间的数据传输。

本文将介绍STM32串口通信的原理及实验方法。

一、串口通信的原理串口通信是一种通过串行方式传输数据的通信方式。

在串口通信中,数据是一位一位地依次发送或接收的。

与并行通信相比,串口通信只需要两根信号线即可实现数据的传输,因此在资源有限的嵌入式系统中被广泛应用。

STM32的串口通信模块包括多个寄存器,其中包括控制寄存器、状态寄存器、数据寄存器等。

通过配置这些寄存器,可以实现串口通信的参数设置和数据的发送接收。

二、STM32串口通信的实验步骤以下是一种基本的STM32串口通信实验步骤:1. 硬件连接:将STM32开发板的串口引脚与其他设备的串口引脚通过串口线连接起来。

一般来说,串口通信需要连接的引脚包括TX (发送引脚)、RX(接收引脚)、GND(地线)。

2. 引脚配置:通过STM32的引脚复用功能,将相应的GPIO引脚配置为串口功能。

具体的引脚配置方法可以参考STM32的开发板手册或者相关的资料。

3. 时钟配置:配置STM32的时钟源,使得串口通信模块能够正常工作。

一般来说,串口通信模块使用的时钟源可以选择系统时钟或者外部时钟。

4. 串口配置:配置串口通信模块的参数,包括波特率、数据位、停止位、校验位等。

这些参数的配置需要根据实际的通信需求来确定。

5. 数据发送:通过向数据寄存器写入数据,向其他设备发送数据。

在发送数据之前,需要通过状态寄存器的标志位判断串口是否空闲,以确保数据能够正常发送。

6. 数据接收:通过读取数据寄存器的数据,从其他设备接收数据。

在接收数据之前,需要通过状态寄存器的标志位判断是否有数据到达,以确保数据能够正确接收。

7. 中断处理:在串口通信过程中,可以使用中断来实现数据的异步传输。

串口通信实验指导书

串口通信实验指导书

串口通信实验一、实验目的1、掌握8051单片机串行口工作原理;2、掌握串口编程与调试方法;3、掌握串口通信中标志位的查询法与中断法二、实验任务1、设置仿真器模块和Keil软件2、接收PC机发送的控制命令,并返回字符;3、根据控制命令,控制LED的亮灭;三、实验设备1、ID101 89S5x单片机模块2、ID216 流水灯与交通灯模块3、ID204 RS232模块(或者ID205 USB转串口模块)4、STC单片机仿真模块(IAP15W4K58S4)5、ID205 USB转串口模块6、USB线(方口/打印机数据线)7、RS232线(235连线,23交叉,选用)8、便携电源箱(220V电源线、4芯端子直流电源线)四、实验内容和步骤(一)串口通信介绍串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。

尽管比按字节(byte)的并行通信慢,但是串最基本的串口通信只需要使用3根线即可完成全双工通信,分别是地线、发送、接收。

串口通信也可以有其他辅助通信线用于握手,但不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通信的端口,这些参数必须匹配。

波特率:这是一个衡量符号传输速率的参数。

指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。

起始位:起始位必须是持续一个比特时间的逻辑0电平,标志传输一个字符的开始,接收方可用起始位使自己的接收时钟与发送方的数据同步。

数据位:这是衡量通信中实际数据位的参数,是通信中的真正有效信息。

数据位的位数可以由通信双方共同约定,一般可以是5位、7位或8位,标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。

单片机串行通信实验报告(实验要求、原理、仿真图及例程)

单片机串行通信实验报告(实验要求、原理、仿真图及例程)

《嵌入式系统原理与实验》实验指导实验三调度器设计基础一、实验目的和要求1.熟练使用Keil C51 IDE集成开发环境,熟练使用Proteus软件。

2.掌握Keil与Proteus的联调技巧。

3.掌握串行通信在单片机系统中的使用。

4.掌握调度器设计的基础知识:函数指针。

二、实验设备1.PC机一套2.Keil C51开发系统一套3.Proteus 仿真系统一套三、实验容1.甲机通过串口控制乙机LED闪烁(1)要求a.甲单片机的K1按键可通过串口分别控制乙单片机的LED1闪烁,LED2闪烁,LED1和LED2同时闪烁,关闭所有的LED。

b.两片8051的串口都工作在模式1,甲机对乙机完成以下4项控制。

i.甲机发送“A”,控制乙机LED1闪烁。

ii.甲机发送“B”,控制乙机LED2闪烁。

iii.甲机发送“C”,控制乙机LED1,LED2闪烁。

iv.甲机发送“C”,控制乙机LED1,LED2停止闪烁。

c.甲机负责发送和停止控制命令,乙机负责接收控制命令并完成控制LED的动作。

两机的程序要分别编写。

d.两个单片机都工作在串口模式1下,程序要先进行初始化,具体步骤如下:i.设置串口模式(SCON)ii.设置定时器1的工作模式(TMOD)iii.计算定时器1的初值iv.启动定时器v.如果串口工作在中断方式,还必须设置IE和ES,并编写中断服务程序。

(2)电路原理图Figure 1 甲机通过串口控制乙机LED闪烁的原理图(3)程序设计提示a.模式1下波特率由定时器控制,波特率计算公式参考:b.可以不用使用中断方式,使用查询方式实现发送与接收,通过查询TI和RI标志位完成。

2.单片机与PC串口通讯及函数指针的使用(1)要求:a.编写用单片机求取整数平方的函数。

b.单片机把计算结果向PC机发送字符串。

c.PC机接收计算结果并显示出来。

d.可以调用Keil C51 stdio.h 中的printf来实现字符串的发送。

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

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

实验七中断方式的串口通信实验一实验目的:进一步掌握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 0000HLJMP MAINORG 0023H ;中断服务入口地址LJMP COM_INT_SRVMAIN: LCALL INIT_TMR1LCALL INIT_SCIAGAIN: SJMP AGAINCOM_INT_SRV: JBC RI,HERE_SRV ;中断服务子程序SJMP TEST_AGAINHERE_SRV: MOV R7,SBUFMOV SBUF,R7TEST_AGAIN: RETIINIT_SCI: MOV SCON,#0x50SETB ESSETB EA ;开中断RETINIT_TMR1: MOV TMOD,#0x20 ;初始化定时器MOV TH1,#0xFDMOV TL1,#0xFDSETB TR1RETEND2.C语言源程序/*************************************************** 文件名: intcom.c*描述:使用中断方法,微机发送数据到单片机,单片机接收后又发还至微机,并在微机屏幕上显示。

单片机串口通信实验报告

单片机串口通信实验报告

单片机串口通信实验报告
实验目的:
1.掌握单片机串口通信的基本原理和实现方法;
2.学会使用串口模块与上位机进行数据交互;
3.进一步巩固单片机的编程与调试能力。

实验原理:
实验器材:
1.STC89C52单片机开发板1块
2.PC机一台
3.串口线1根
4. 上位机调试软件(如Tera Term) 1个
实验步骤:
1.将STC89C52单片机开发板与PC机通过串口线连接起来;
2. 使用Keil等编程软件编写单片机程序,实现串口通信功能;
4.在PC机上打开上位机调试软件,设置波特率和数据位;
5.测试通信功能,查看上位机接收到的数据是否正确。

实验结果:
经过调试和测试,实验结果如下:
1.单片机程序正常运行,可以通过串口与PC机进行数据交互;
2.上位机调试软件能够正确接收到单片机发来的数据,并显示在界面上;
实验总结:
通过本次实验,我掌握了单片机串口通信的基本原理和实现方法。


实验中,我学会了使用串口模块与上位机进行数据交互,并进一步提高了
单片机的编程与调试能力。

这对于今后的电子设计与开发工作将具有很大
的帮助。

同时,在实验过程中,我也遇到了一些问题和困难,如串口连接错误、波特率设置错误等,但通过仔细检查和调试,最终我成功解决了这些问题。

在以后的学习和工作中,我将进一步熟悉串口通信的相关知识,并通
过实际项目的实践,提升自己的实际操作能力和解决问题的能力。

我相信,通过不断的学习和实践,我会越来越熟练地掌握串口通信技术,为以后的
工作打下坚实的基础。

单片机的中断实验报告

单片机的中断实验报告

单片机的中断实验报告单片机的中断实验报告引言:单片机是现代电子技术中的一种重要组成部分,广泛应用于各种电子设备中。

中断是单片机中的一种重要功能,能够提高系统的响应速度和实时性。

本实验旨在通过对单片机的中断功能进行实验,深入了解中断的原理和应用。

一、实验目的本实验旨在通过对单片机的中断功能进行实验,掌握中断的原理和应用,提高对单片机的理解和应用能力。

二、实验器材和材料1. 单片机开发板2. 电脑3. USB数据线4. LED灯5. 电阻、电容等元件三、实验原理中断是单片机中的一种重要功能,当某个事件发生时,单片机可以立即中断当前程序的执行,转而执行中断服务程序,处理该事件。

中断可以分为外部中断和内部中断两种类型。

外部中断由外部设备触发,如按键、传感器等;内部中断由单片机内部的某个模块触发,如定时器溢出、串口接收等。

四、实验步骤1. 连接单片机开发板和电脑,并通过USB数据线进行通信。

2. 在开发环境中编写中断服务程序,实现对外部中断的响应。

3. 将LED灯连接到开发板的某个IO口,并设置为输入模式。

4. 在主程序中配置外部中断的触发条件和中断服务程序。

5. 运行程序,触发外部中断,观察LED灯的亮灭情况。

五、实验结果与分析经过实验,我们成功实现了对外部中断的响应,并观察到LED灯在中断触发时的亮灭情况。

通过实验结果的分析,我们可以得出以下结论:1. 外部中断可以有效地提高系统的响应速度和实时性,特别适用于需要及时处理外部事件的应用场景。

2. 中断服务程序的编写和配置是实现中断功能的关键,需要充分理解中断的原理和编程方法。

3. 在实际应用中,需要根据具体的需求和硬件条件来选择合适的中断触发条件和中断服务程序。

六、实验总结通过本次实验,我们深入了解了单片机的中断功能,并通过实际操作掌握了中断的原理和应用方法。

中断作为一种重要的系统功能,可以提高系统的响应速度和实时性,广泛应用于各种电子设备中。

在今后的学习和工作中,我们将进一步探索中断的应用领域,并不断提高自己的单片机编程能力。

单片机实验报告-串口通信

单片机实验报告-串口通信

单片机实验报告姓名___ _ 学号___一、实验项目单片机串行口通讯实验二、实验要求利用单片机串行口,实现两个实验台之间的串行通讯。

其中一个实验台作为发送方,另一侧为接收方。

发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。

三、实验目的1.掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。

2.了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。

3.学习串口通讯的中断方式的程序编写方法。

四、实验说明1、8051、80C196 的RXD、TXD接线柱在POD51/96 仿真板上,8088/86的TXD、RXD在POD8086仿真板上的8251芯片旁边。

2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。

也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。

3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。

可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。

可以用实验仪上的逻辑分析仪采样串口通信的波形五、程序框图六、源程序发射程序:org 0000hljmp mainorg 0023hljmp com_in ;串行口中断服务子程序入口org 1000hmain: mov sp,#50h ;设置堆栈指针mov dptr,#7f00h ;81c55初始化mov a,#03hmovx @dptr,amov tmod,#20h ;设置定时器T1工作方式为方式2mov th1,#0f4h ;设置定时器T1计数初值mov tl1,#0f4hmov pcon,#80h ;波特率加倍setb tr1 ;打开定时器mov scon,#40h ;设置串行口工作方式为方式1,8位异步收发,波特率可变mov ie,#90h ;打开中断允许寄存器,采用中断方式发送数据clr ti ;关闭发送中断标志位T1loop: acall key1 ;调用读取键值子程序mov r0,a ;键值存入R0setb ti ;开发送中断标志位T1ljmp loopcom_in: clr ti ;关闭发送中断标志位T1mov sbuf,r0 ;发送数据retikey1: acall ks1 ;调用判定有无键闭合子程序jnz lk1 ;有键闭合,跳转lk1acall dir ;无键闭合,调用显示子程序ajmp key1lk1: acall dir ;可能有键闭合,延时24msacall diracall ks1 ;调用判定有无键闭合jnz lk2 ;经去抖动,判断有键闭合跳转lk2acall dir ;无键闭合,调用延时子程序ajmp key1lk2: mov r2,#0feh ;列选码送到R2mov r4,#00h ;r4为列号计数器lk4: mov dptr,#7f01h ;列选码送到PA口mov a,r2movx @dptr,amov dptr,#7f03Hmovx a,@dptr ;读PC口jb acc.0,lone ;0行线为高电平,无键闭合,跳转lone,转判1行mov a,#00h ;0行有键闭合,首键号0→Aajmp lkp ;跳转lkp,计算键号lone: jb acc.1,ltw0 ;1行线为高电平,无键闭合,跳转ltwo,转判2行mov a,#06h ;1行有键闭合,首键号8→Aajmp lkp ;跳转lkp,计算键号ltw0: jb acc.2,lthr ;2行线为高电平,无键闭合,跳转lthr,转判3行mov a,#12h ;2行有键闭合,首键号10H→Aajmp lkp ;跳转lkp,计算键号lthr: jb acc.3,next ;3行线为高电平,无键闭合,跳转next,准备下一列扫描mov a,#18h ;3行有键闭合,首键号18H→Alkp: add a,r4 ;计算键号,即行首键号+列号=键号push a ;键号进栈保护lk3: acall dir ;调用显示子程序,延时6msacall ks1 ;调用判定有无键闭合子程序,延时6msjnz lk3 ;判定键释放否,未释放,则循环pop a ;键已释放,键号出栈→Aretnext: inc r4 ;列计数器加1,为下一列扫描做准备mov a,r2 ;判定是否已扫到最后一列jnb acc.5,knd ;键扫描已到最后一列,跳转knd,重新扫描rl a ;键未扫到最后一列,位选码左移一位mov r2,a ;位选码→R2ajmp lk4knd: ajmp key1ks1: mov dptr,#7f01h ;判定有无键闭合子程序,全0→扫描口(PA口)mov a,#00h ;即列线全为低电平movx @dptr,amov dptr,#7f03h ;PC口地址movx a,@dptr ;从PC口读行线状态cpl a ;行线状态取反,如无键按下,则A中内容为0anl a,#0fh ;屏蔽无用的高四位ret接受程序:org 0000hljmp mainorg 0023hljmp com_inorg 1000hmain: mov sp,#50h ;设置堆栈指针mov 60h,#0 ;显示缓冲区初始化mov 61h,#0mov 62h,#0mov 63h,#0mov 64h,#0mov 65h,#0mov dptr,#7f00h ;81c55初始化mov a,#03hmovx @dptr,aacall dir ;调用显示子程序mov tmod,#20h ;设置定时器T1工作方式为方式2mov th1,#0f4h ;设置定时器T1计数初值mov tl1,#0f4hmov pcon,#80h ;波特率加倍setb tr1 ;打开定时器mov scon,#50h ;设置串行口工作方式为方式1,允许串行接受位REN置1 mov ie,#90h ;打开中断允许寄存器,采用中断方式发送数据com_in: clr ri ;接收中断标志位清0mov a,sbuf ;接收数据retiloop: mov r1,a ;键值转换为显示数据mov r0,#0f0hmov a,r1anl a,r0mov 61h,a ;61h对应的数码管显示大于16的数mov r2,#0fhmov a,r1anl a,r2mov 60h,a ;60h对应的数码管显示小于16的数acall dirhere: sjmp $dir: mov r0,#60h ;置缓冲器指针初值mov r3,#01h ;位选码的初值送R3mov a,r3ld0: mov dptr,#7f01h ;位选码→PA口movx @dptr,ainc dptr ;指向PB口mov a,@r0 ;显示数据送到Aadd a,#0dh ;加偏移量movc a,@a+pc ;根据显示数据来查表取段码movx @dptr,a ;段码→PB口acall delay ;延时1ms,即该位显示1msinc r0 ;显示数据缓冲区指针指向下一个数据单元mov a,r3 ;位选码送入A中jb acc.5,ld1 ;判断是否扫描到最右边的LED,如到,则返回rl a ;位选码向左移一位,准备让显示位右边的下一位LED亮mov r3,a ;位选码送r3中保存ajmp ld0ld1: rettab: db 3fh,06h,5bh,4fh,66h,6dh ;共阴极LED段码表db 7dh,07h,7fh,6fh,77h,7chdb 39h,5eh,79h,71h,73h,3ehdb 31h,6eh,1ch,23h,40h,03hdb 18h,00hdelay: mov r7,#02h ;延时1ms子程序D1: mov r6,#0FFHD2: djnz r6,D2djnz r7,D1ret七、实验小结单片机实验报告姓名:毛幸林班级:2010138学号:201013803专业:电子信息工程。

串口中断接收通信实验

串口中断接收通信实验

实验报告实验名称:串口中断接收通信实验一、实验目的1、熟悉MCU的异步串行通信(SCI)的工作原理。

2、掌握SCI的通信编程方法。

二、实验内容一、将PC机的“C#2010串口测试程序20131120”文件夹中测试程序与实验箱间来回发送的数据改为,不利用中断接收方式完成将PC机所发送数据用于控制实验箱中的一个小灯,如:发送“0”,小灯亮,发送“1”,小灯暗。

(或者利用串口调试程序发送发送“0”,小灯亮,发送“1”,小灯暗)二、在演示实验的基础上,将PC机的“C#2010串口测试程序20131120”文件夹中测试程序与实验箱间来回发送的数据改为将PC机所发送数据用于控制实验箱中的一个小灯,如:发送“OPEN”,小灯亮,发送“CLOS”,小灯暗。

(或者利用串口调试程序发送“OPEN”,小灯亮,发送“CLOS”,小灯暗)三、实验过程1、资源使用SCI连接图雷同演示实验。

小灯的连接是用 B 口的9 号引脚和一个小灯接口连接。

2、硬件设计(连线和标示引脚名)3、编程实验一:不使用中断接收方式#include "includes.h" //包含总头文件int main (void ){//1.声明主函数使用的局部变量uint_32 run_counter; //主循环次数计数器//2.关总中断enter_critical(); // 进入临界区//3.初始化模块light_init(LIGHT_PORT, LIGHT_PIN_BLUE, LIGHT_ON); //蓝灯初始化 uart_init(UART_0,MCGIRCLK, 9600); //串口0时钟MCGIRCLK(4000Khz) MCU PTB 9 计算机RTTLuart_init (UART_1,BUSCLK, 9600); //串口1、2使用总线时钟24000Khz 24000Khzuart_init (UART_2,BUSCLK, 9600); //波特率使用9600uart_send_string(UART_0, "Hello Uart_0!\r\n"); //串口发送初始化提示uart_send_string(UART_1, "Hello Uart_1!\r\n");uart_send_string(UART_2, "Hello Uart_2!\r\n");//4.全局变量及主函数局部变量赋初值run_counter = 0; // 运行计数器//5.使能模块中断及总中断// uart_enable_re_int(UART_0); //使能串口0接收中断// uart_enable_re_int(UART_1); //使能串口1接收中断// uart_enable_re_int(UART_2); //使能串口2接收中断init_critical(); //开总中断//进入主循环//主循环开始for(;;){uint_8 fp = 0;uint_8 ch;run_counter++; //主循环次数计数器+1ch = uart_re1(UART_1,&fp);if(0==fp){if(ch =='1')light_control(LIGHT_PORT, LIGHT_PIN_BLUE,LIGHT_ON);elselight_control(LIGHT_PORT, LIGHT_PIN_BLUE,LIGHT_OFF);uart_send1(UART_1,ch);}/* if (run_counter > RUN_COUNTER_MAX){run_counter = 0; //主循环次数计数器清0//light_change(LIGHT_PORT, LIGHT_PIN_BLUE); //蓝灯变化 } // end_if*/} // end_while//主循环结束return 0;}实验二:发送字符串Main函数#include"includes.h"//包含总头文件int main(void){//1.声明主函数使用的局部变量uint_32 run_counter; //主循环次数计数器//2.关总中断enter_critical(); // 进入临界区//3.初始化模块light_init(LIGHT_PORT, LIGHT_PIN_BLUE, LIGHT_ON); //蓝灯初始化uart_init(UART_0,MCGIRCLK, 9600); //串口0时钟MCGIRCLK(4000Khz)uart_init (UART_1,BUSCLK, 9600); //串口1、2使用总线时钟24000Khz uart_init (UART_2,BUSCLK, 9600); //波特率使用9600uart_send_string(UART_0, "Hello Uart_0!\r\n"); //串口发送初始化提示uart_send_string(UART_1, "Hello Uart_1!\r\n");uart_send_string(UART_2, "Hello Uart_2!\r\n");//4.全局变量及主函数局部变量赋初值run_counter = 0; // 运行计数器//5.使能模块中断及总中断uart_enable_re_int(UART_0); //使能串口0接收中断uart_enable_re_int(UART_1); //使能串口1接收中断uart_enable_re_int(UART_2); //使能串口2接收中断init_critical(); //开总中断//进入主循环//主循环开始for(;;){run_counter++; //主循环次数计数器+1if (run_counter > RUN_COUNTER_MAX){run_counter = 0; //主循环次数计数器清0// light_change(LIGHT_PORT, LIGHT_PIN_BLUE); //蓝灯变化 } // end_if} // end_while//主循环结束============================================================= return 0;}Isr.c函数#include"includes.h"//========================中断函数服务例程===============================//串口0接收中断服务例程void isr_uart0_re(void){uint_8 ch;uint_8 flag = 1;///开中断enter_critical();ch = uart_re1(UART_0, &flag);if (0 == flag){uart_send1(UART_0, ch);}exit_critical(); //关中断}/串口1接收中断服务例程void isr_uart1_re(void){uint_8 a[4];uint_8 flag = 1;static uint_8 index=0;enter_critical();if(index>3)index=0;a[index]=uart_re1(UART_1,&flag);if(0==flag){ uart_send1(UART_1, a[index]);index++;}if(a[0]=='o'&&a[1]=='p'&&a[2]=='e'&&a[3]=='n'){light_control(LIGHT_PORT, LIGHT_PIN_BLUE,LIGHT_ON); }else if(a[0]=='c'&&a[1]=='l'&&a[2]=='o'&&a[3]=='s'){light_control(LIGHT_PORT, LIGHT_PIN_BLUE,LIGHT_OFF); }exit_critical();}//串口2接收中断服务例程void isr_uart2_re(void){uint_8 ch;uint_8 flag = 1;enter_critical();ch = uart_re1(UART_2, &flag);if (0 == flag){uart_send1(UART_2, ch);}exit_critical();}四、实验小结这次实验有两方面内容:第一个是不使用中断机制来控制小灯的亮灭,需要在主函数中添加程序来接收字符。

微机原理_中断实验报告(3篇)

微机原理_中断实验报告(3篇)

第1篇一、实验目的1. 理解中断系统的基本概念和工作原理。

2. 掌握中断源、中断向量、中断服务程序等基本概念。

3. 学习使用Keil软件进行中断程序的编写和调试。

4. 熟悉中断在微机系统中的应用。

二、实验原理中断系统是微机系统中重要的组成部分,它允许CPU在执行程序的过程中,响应外部事件或内部事件,从而实现多任务处理。

中断系统主要包括以下几个部分:1. 中断源:产生中断请求的设备或事件,如外部设备、定时器、软件中断等。

2. 中断向量:中断服务程序的入口地址,用于CPU在响应中断时找到相应的服务程序。

3. 中断服务程序:处理中断请求的程序,完成中断处理任务。

4. 中断优先级:不同中断源的优先级不同,用于确定中断响应的顺序。

三、实验设备与软件1. 实验设备:单片机实验板、计算机、Keil软件、Proteus仿真软件。

2. 实验软件:Keil uVision4、Proteus 8.0。

四、实验内容1. 外部中断实验(1)使用外部中断0(INT0)实现按键控制LED灯的亮灭。

(2)使用外部中断1(INT1)实现按键控制LED灯的闪烁。

2. 定时器中断实验(1)使用定时器0产生1秒的定时中断,实现LED灯的闪烁。

(2)使用定时器1产生1秒的定时中断,实现按键输入的计数。

3. 软件中断实验(1)使用软件中断实现按键输入的字符显示。

(2)使用软件中断实现按键输入的字符加密显示。

五、实验步骤1. 在Keil软件中创建一个新项目,选择合适的单片机型号。

2. 根据实验要求,编写中断服务程序,设置中断向量。

3. 在Proteus软件中搭建实验电路,包括单片机、按键、LED灯等。

4. 将Keil软件编译后的程序下载到单片机中。

5. 在Proteus软件中运行仿真,观察实验结果。

六、实验结果与分析1. 外部中断实验(1)按键按下时,LED灯亮;按键松开时,LED灯灭。

(2)按键按下时,LED灯闪烁;按键松开时,LED灯停止闪烁。

中断的应用实验报告

中断的应用实验报告

中断的应用实验报告
《中断的应用实验报告》
近年来,随着科技的发展,中断技术在各个领域得到了广泛的应用。

中断技术可以让一个任务在执行过程中暂停,转而去执行另一个任务,这种技术的应用可以大大提高系统的效率和响应速度。

在我们的实验中,我们针对中断技术进行了一系列的应用实验,以探究其在不同领域的应用效果。

我们首先在嵌入式系统中进行了中断技术的应用实验,通过在嵌入式系统中设置中断,可以让系统在处理外部事件时立即做出响应,从而提高系统的实时性和稳定性。

其次,我们在计算机网络领域进行了中断技术的应用实验。

通过在网络通信过程中引入中断技术,可以让系统在接收到重要数据包时立即中断当前任务,转而处理重要数据包,从而提高网络传输的效率和可靠性。

另外,我们还在自动化控制系统中进行了中断技术的应用实验。

通过在自动化控制系统中设置中断,可以让系统在出现异常情况时立即中断当前任务,转而采取相应的控制措施,从而提高系统的安全性和稳定性。

通过这些实验,我们发现中断技术在不同领域的应用效果都非常显著,可以大大提高系统的效率和可靠性。

我们相信随着中断技术的不断发展和完善,它将在更多的领域得到应用,为人们的生活和工作带来更多的便利和效益。

希望我们的实验报告可以为中断技术的进一步研究和应用提供一定的参考价值。

单片机原理与接口技术实验指导书

单片机原理与接口技术实验指导书

机械电子工程专业《单片机原理与接口技术》课程实验指导书撰写人:审定人:目录第一部分绪论 (1)第二部分基本实验指导 (2)实验一 (2)实验二 (9)实验三 (11)实验四 (14)实验五 (17)实验六 (19)实验七 (21)实验八 (23)第三部分扩展实验实验九 (26)实验十 (30)实验十一 (35)第一部分绪论本指导书是根据《单片机原理与接口技术》课程实验教学大纲编写的,适用于机械电子工程专业。

一、本课程实验的作用与任务本课程的实践性较强,安排适当的上机可以帮助学生理解教学内容,锻炼动手能力和综合设计能力。

二、本课程实验的基础知识熟悉Keil软件的使用,学习过单片机原理与接口技术及有一定的电路常识。

三、本课程实验教学项目及其教学要求序号实验项目名称学时教学目标、要求1单片机程序设计集成开发环境应用22掌握实验环境的应用,熟练掌握软件的各项功能2 定时器/计数器程序设计实验22掌握定时器的几种工作模式,并应用各种模式进行定时3 数码管显示程序设计实验22会对数码管译码,会进行动态显示数据4 独立式键盘程序设计实验22会对独立键盘进行消抖动,会识别按键5 行列矩阵式键盘程序设计实验22会用扫描法识别行矩阵按键6 秒表显示实验22会运用定时、中断知识进行综合设计7 串口通信实验22会编程让单片机和串口进行通信8 步进电机实验22能控制步进电机正传和反转合计1 16第二部分基本实验指导实验一单片机C51程序设计集成开发环境应用一、实验目的1. 了解集成开发环境Keil Vision3文件管理的特点。

2. 学会使用开发环境新建文件、编辑、编译程序。

3. 掌握开发环境程序设计相关设置及其意义。

二、实验要求实现单片机P1连接的LED发光二极管实现流水灯功能。

三、实验原理1. 熟练操作开发环境。

2. 利用C51相关知识,编写简单程序,生成可执行文件。

3. 记录编译错误信息,总结错误原因,写出解决办法。

串口通信之中断法与查询法

串口通信之中断法与查询法

串口通信之中断法与查询法串口通信示例程序:该程序是用查询法控制串口,显示的结果为,通过串口发送一个数据,对应的发光二极管点亮。

如发送数据0xfe,第一个二极管亮。

查询法#includevoid main(){REN=1;//串口允许接收TMOD=0x20;//设置定时器1为工作方式2TH1=0xfd;//给T1 赋初值TL1=0xfd;TR1=1;//TCON中的TR1位置1SM0=0;//设置SCON寄存器,设为方式1SM1=1;while(1){if(RI==1) //查询法,看是否收到数据了{RI=0;//一旦收到数据了,清零RI必须软件清零//P1=0x00;P1=SBUF;//从串口读入数据}}}中断法通过中断方式控制串口#includevoid main(){REN=1;//串口允许接收TMOD=0x20;//设置定时器1为工作方式2TH1=0xfd;//给T1 赋初值TL1=0xfd;TR1=1;//TCON中的TR1位置1SM0=0;//设置SCON寄存器,设为方式1SM1=1;EA=1;//开总中断ES=1;//开串口中断while(1){}}//加上中断函数变为中断方式void ser() interrupt 4{RI=0;//一旦收到数据了,清零RI必须软件清零P1=SBUF;//从串口读入数据}修改程序,让串口发给单片机数据,然后让单片机再发回来:#includeunsigned char a,flag;void main(){REN=1;//串口允许接收TMOD=0x20;//设置定时器1为工作方式2TH1=0xfd;//给T1 赋初值TL1=0xfd;TR1=1;//TCON中的TR1位置1SM0=0;//设置SCON寄存器,设为方式1SM1=1;EA=1;//开总中断ES=1;//开串口中断while(1){if(flag==1){flag=0;SBUF=a;//把a送给SBUF,调用接收缓存器,两个SBUF物理地址//相同,但是意义不同while(!TI); //发送完TI会置1,要手动清零TI=0;//TI发送中断标志位}}}void ser() interrupt 4{RI=0;//一旦收到数据了,清零RI(接收中断标志位),必须软件清零P1=SBUF;//从串口读入数据 SBUF赋给P1口a=SBUF;//使用发送缓存器flag=1;}这种情况的结果是单片机不停的在发数,串口一直收到数据。

串口传输实验报告

串口传输实验报告

串口传输实验报告篇一:RS232串口通信实验报告RS232串口通信实验报告学号:学院:电子信息学院班级:08031102 姓名:张泽宇康启萌余建军时间:XX年11月13日学校:西北工业大学 XX301966 XX301950 XX301961一.实验题目:设计一个简单的基于串口通信的信息发送和接受界面二.实验目的:1.熟悉并掌握RS232串口标准及原理。

2.实现PC机通过RS232串口进行数据的收发。

3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。

三.实验内容程序代码:P// PC1PC2Dlg.cpp : implementation file//#include "stdafx.h"#include "PC1PC2.h"#include "PC1PC2Dlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////// ///////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPC1PC2Dlg dialogCPC1PC2Dlg::CPC1PC2Dlg(CWnd* pParent /*=NULL*/) : CDialog(CPC1PC2Dlg::IDD, pParent){//{{AFX_DATA_INIT(CPC1PC2Dlg)m_send = _T("");m_receive = _T("");m_bt = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CPC1PC2Dlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CPC1PC2Dlg)DDX_Control(pDX, IDC_MSCOMM1, m_Comm);DDX_Text(pDX, IDC_EDIT1, m_send);DDX_Text(pDX, IDC_EDIT2, m_receive);DDX_CBString(pDX, IDC_COMBO1, m_bt);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CPC1PC2Dlg, CDialog) //{{AFX_MSG_MAP(CPC1PC2Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////// //////////////////////////// CPC1PC2Dlg message handlersBOOL CPC1PC2Dlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);// Set big iconSetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_Comm.SetCommPort(1);//选择COM1m_Comm.SetInputMode(1); //输入方式为二进制方式m_Comm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件// CString str;// str="9600,n,8,1";// m_Comm.SetSettings(str);m_Comm.SetPortOpen(TRUE);//打开串口return TRUE; // return TRUE unless you set the focus to a control}void CPC1PC2Dlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize buttonto your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CPC1PC2Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);篇二:串口传输实验报告基于单片机的RS232和RS485总线的数据传输张裕卓 XX班摘要本设计是基于单片机的RS232和RS485总线的数据传输实验设计。

单片机实验 串口中断

单片机实验 串口中断
至此已经生成了单片机芯片可利用的chuankou.hex文件,如下图所示:
2、Proteus仿真
(1)在元件模式时,从元件库里找出本次实验需要用到的元器件,其元件名称和英文简写对应如下:
①51芯片AT89C51
②九针连接器COMPIM
③虚拟终端VIRTUAL TERMINAL
(2)打开Proteus 7 Professional应用程序,在其中找到元器件,按下图所示连接:
注意:
⑴双击设置九针连接器的Physical port为COM2,Virtual Baud Rate为9600如下图所示:
(2)安装虚拟驱动软件和串口调试助手,运行串口调试助手,选择发送的串口为COM1,键入要发送的字符或者数据,选择手动发送,打开串口,如下图所示。
(3)双击仿真电路图中的AT89C51并添加产生的hex文件,点击运行按钮“ ”后会自动弹出虚拟终端,在串口调试助手上手动发送数据Nice to meet you !具体仿真如下图所示:
三、实验操作步骤
1. 工程建立
①先建立一个该工程的文件夹,保存到要存放的路径,如放在D:\keil。
②打开Keil软件,先新建一个工程文件,点击“Project->New Project…”菜单。会弹出工程创建对话框。选择工程文件要存放的路径选择将工程安装在我们创建的D:\keil工程文件夹下面,并给该工程命名输入工程文件名,如chuankou最后单击保存。
③在弹出的对话框中选择CPU厂商及型号,选择好Atmel公司的AT89C51后,单击确定。在接着出现的对话框中选择“OK”。
④新建一个C51文件,单击左上角的New File,保存新建的文件,单击SAVE。
⑤在出现的对话框中输入保存文件名(注意后缀名必须为.C如chuankou.c),再单击“保存”。

实验七、UART串行数据通信实验

实验七、UART串行数据通信实验

实验七、UART串行数据通信实验1(查询与中断方式)一、实验目的通过实验,掌握UART查询与中断方式的程序的设计。

二、实验设备●硬件:PC 机一台●LPC2131教学实验开发平台一套●软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境。

●EasyARM工具软件。

三、实验原理EasyARM2131 开发板上,UART0 的电路图如图8.1 所示,当跳线JP6 分别选择TxD0和RxD0 端时方可进行UART0 通讯实验。

图8.1 UART0 电路原理图四、实验内容实验内容1使用查询方式,通过串口0 接收上位机发送的字符串如“Hello EasyARM2131!”,然后送回上位机显示,主程序以及各子程序流程如图8.2 所示。

(改写发送内容,字符个数不同)。

说明:需要上位机(PC机)串口终端如EasyARM.exe 软件。

使用串口延长线把LPC2131教学实验开发平台的CZ2(UART0)与PC机的COM1 连接。

PC 机运行EasyARM 软件,设置串口为COM1,波特率为115200,然后选择【设置】->【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。

图8.2 串口实验相关程序流程图1.实验预习要求①研读LPC2000 UART工作原理与控制章节,注意FIFO 接收情况的特性。

②了解LPC2131教学实验开发平台的硬件结构,注意串口部分的电路。

2.实验步骤①启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个工程DataRet_C。

②在user 组中的main.c 中编写主程序代码,在项目中的config.h 文件中加入#include <stdio.h>。

③选用DebugInFlash生成目标,然后编译连接工程。

④将EasyARM2131开发板上的JP6跳线分别选择TxD0和RxD0端时,方可进行UART0通信实验。

实验7 串口通信实验

实验7 串口通信实验

3实验内容
学习S3C44B0X的UART相关寄存器的 功能,熟悉S3C44B0X系统硬件的 UART相关接口。编写S3C44B0X处理 器的串口通信程序。 S3CEV40监视串行口,并将接收到的 字符回送。
4实验原理
1. S3C44B0X串行通讯(UART)单元
S3C44B0X UART 单元提供两个独立的异步串行 通信口,皆可工作于中断和DMA模式。最高波 特率达115.2Kbps。每一个UART单元包含一个 16字节的FIFO,用于数据的接收和发送。 S3C44B0X UART包括可编程波特率,红外发送/ 接收,一个或两个停止位,5bit/6bit/ 7bit/ 或8bit数据宽度和奇偶校验。
UART TRANSMIT HOLDING(BUFFER) REGISTER & FIFO REGISTER
UART RECEIVE HOLDING (BUFFER) REGISTER & FIFO REGISTER
UART BAUD RATE DIVISION REGISTER
波特率的产生
实验4 串口通信实验
1实验目的 2实验设备 3实验内容 4实验原理 5实验操作步骤
1实验目的
通过实验了解S3C44B0x处理器串行口 (UART)的结构,串行通讯的原理。 掌握ARM处理器串行通信的编程方法。
2试验设备
硬件:Embest S3CEV40实验平台, Embest ARM标准/增强型仿真器套件, PC机。 软件:Embest IDE 2003集成开发环境, Windows 98/2000/NT/XP。
UBRDIVn = (int)(40000000/(115200 x 16)+0.5 ) -1 = (int)(21.7+0.5) –1 = 22 -1 = 21

单片机串口通信实验报告

单片机串口通信实验报告

信息工程学院实验报告课程名称:单片机原理及接口实验项目名称:串口通信实验实验时间:2017.5一、实验目的:1.了解什么是串口,串口的作用等。

2、了解串口通信的相关概念3、利用keil软件,熟悉并掌握中串口通信的使用4、通过实验,熟悉串口通信程序的格式,串口通信的应用等二、实验原理1、串口通信概念:单片机应用与数据采集或工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。

如下图所示。

2、串口数据通信方式及特点★数据通信方式有两种:并行通信与串行通信★并行通信:所传送数据的各位同时发送或接收,数据有多少位就需要多少根数据线。

特点:速度快,成本高,适合近距离传输如计算机并口,打印机,8255 。

★串行通信:所传送数据的各位按顺序一位一位地发送或接收。

只需一根数据,一根地线,共2 根特点:成本低,硬件方便,适合远距离通信,传输速度低。

串行通信与并行通信示意图如下:成绩:指导老师(签名):3、串行通信基本格式①单工通信:数据只能单向传送。

②半双工通信:通信是双向的,但每一时刻,数据流通的方向是单向的。

③全双工通信:允许数据同时在两个方向流动,即通信双方的数据发送和接收是同时进行的。

4、异步串行通信/同步串行通信①异步串行通信:异步串行通信采用如下的帧结构:起始位+ 8位数据位+ 停止位或起始位+ 9位数据位+ 停止位其中:起始位为低电平,停止位为高电平。

优点:硬件结构简单缺点:传输速度慢②同步串行通信:在同步通信中,发送方在数据或字符开始处就用同步字符(常约定1~2个字节)指示一帧的开始,由时钟来实现发送端和接收端同步,接收方一旦检测到与规定的同步字符符合,下面就连续按顺序传送若干个数据,最后发校验字节。

见下图:5、串行通信过程与UART基本的计算机异步串行通信系统中,两台计算机之间通过三根信号线TxD、RxD和GND连接起来,TxD与GND构成发送线路,RxD与GND构成接收线路。

中断方式下进行串口通讯的正确方法

中断方式下进行串口通讯的正确方法

中断方式下进行串口通讯的正确方法一般普遍的把串口通讯分为查询方式和中断方式。

查询方式比较容易理解,各种书籍上都介绍的比较清楚。

但中断方式,没有几本书讲得好的,甚至有些例程根本无法实际应用。

问题有:1,半中断法。

只使用接收中断,不使用发送中断,发送时还是依靠查询中断标志的办法;如下:ES = 0;//若是接收使用中断方式,某些单片机需要关中断。

但C51不一定需要。

这里只是示例。

SBUF = needsendchar;While (!TI);TI = 0;ES = 1;这里的问题是:发送数据时需要等待数据发完才能继续其他工作,程序效率降低;发送时需要关中断,影响数据接收。

2,接收中断的处理方法错误。

如下:中断程序:void ser() interrupt 4 {RI = 0;temp = SBUF;//读走数据,放入缓存(全局的)变量 rx_flag = 1; //设置接收标志}主程序:void main(){&hellip;;//初始化While (1) {If (rx_flag ==1){//查询接收标志rx_flag = 0; //清楚接收标志x = temp; //从暂存变量读取数据&hellip;;//接收处理}&hellip;; //其它操作}}这里的问题是:如果串口接收数据的间隔时间小于&ldquo;接收处理&rdquo;和&ldquo;其它操作&rdquo;所用的时间时,接收数据会丢失一部分。

正确使用中断方式处理串口收发应达到以下目的:1,完全使用中断控制接收和发送,以达到最快的收发速度。

2,接收和发送互不影响,达到全双工通讯效果。

3,应用程序不发生等待,以达到最高运行效率。

正确的中断发送方法如下:1,建立一个足够大小的环形发送缓冲区,建立一个信号量(用于指示发送的数据量),建立一个发送标志位(用于指示发送状态)。

2,应用程序将数据写入环形发送缓冲区,查询发送接收标志,若不在发送状态,手动触发中断。

  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 <reg51.h>
#include <intrins.h>
/**************************************************
* 函数名: 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.尝试在此软件的基础上,加入流水灯的内容。

相关文档
最新文档