正文内容
单片机串行口实验
来源:漫步者
作者:开心麻花
2025-10-11
1

单片机串行口实验(精选10篇)

单片机串行口实验 第1篇

仲恺农业工程学院实验报告纸

信息学院(院、系)专业班组单片机原理及接口技术课实验三单片机串行口编程

一、实验目的1、掌握单片机串行口的工作方式;

2、掌握单片机串行口的编程方法。

二、实验内容

1、学习单片机串行口的工作方式、初始化以及应用等;

2、利用单片机串行口编写程序在超级终端输出输入相应信息并根据输入的信息驱动开发板上的蜂鸣器按一定规律工作。

三、实验设备

1、STC单片机开发板;

2、PC机以及串口线。

四、实验步骤

参考实验指导书。

五、实验总结

单片机串行口实验 第2篇

课程名称:

微型计算机控制技术

时间:

2020.10.29

地点:

D203

班级:

2017级机制3班

姓名:

杨帆

学号:

***4

实验项目名称:

串行通讯接口实验

实验指导教师:

赵保华

实验成绩评定:

一、实验目的ü通过实验掌握

USART的功能。

掌握

STM32的USART的设置与运用。

二、实验设备

ü硬件:信盈达STM32

实验平台,STlink

仿真器套件,PC

机,串口连接线;

软件:KEIL

for

ARM(MDK)集成开发环境,串口调试助手,Windows

7/8/10/XP。

三、实验内容

利用

PC

机的串口与信盈达Cotex-M3

实验平台的USART1进行输入输出通信。

1)把自己的个人信息(姓名、学号),通过USART1发送到PC,PC通过串口助手显示出来。

2)通过

PC

机键盘往实验平台的USART1发送字符,实验平台上的USART1

将收到的字符再传回给

PC,在PC串口助手上显示其串口接收到的字符。

四、实验原理

XYD-STM32F103

开发板

UART1

使用的是

CH340G

这个

USB

转换串口芯片,只需要使用

USB

线连接上电脑,并且电脑上安装了

CH340

芯片的硬件驱动程序,电脑就会生成一个

COM

口,通过使用串口调试软件打开这个

COM

口,就能实现开发板和

PC

机之间的通信了。

五、软件程序设计

1、程序完成以下工作:

初始化串口;

重定义fputc函数,实现可以通过printf函数给电脑发送数据。

注意:重定义fputc之间需要打开微库。

检测串口接收器,如果有数据则从USART_DR寄存器中读取数据;

监测串口发送器,如果上一次数据已发送完成,将读取到的字符发送给PC,然后回到(3)。

main.c参考程序:

#include

“stm32f10x.h“

#include

“stdio.h“

#include

“uart.h“

int

main(void)

{

UART1_Init();//串口初始化

Show_Logo();//通过串口发送数据给PC

while(1)

{

USART1_Echo();//串口实现回显

}

}

uart.c参考程序:

#include

“stm32f10x.h“

#include

“uart.h“

#include

“stdio.h“

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

函数名:UART1_Init

形参:无

返回值:无

函数功能:串口1的初始化

PA9

--

TX

PA8

--

RX

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

void

UART1_Init(void)

{

GPIO_InitTypeDef

GPIO_Initstructure;

USART_InitTypeDef

USART_Initstructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA

|RCC_APB2Periph_USART1,ENABLE);//时钟的初始化

GPIO_Initstructure.GPIO_Pin

=

GPIO_Pin_9;

GPIO_Initstructure.GPIO_Mode

=

GPIO_Mode_AF_PP;

GPIO_Initstructure.GPIO_Speed

=

GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_Initstructure);//管脚9初始化为复用输出管脚

GPIO_Initstructure.GPIO_Pin

=

GPIO_Pin_10;

GPIO_Initstructure.GPIO_Mode

=

GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_Initstructure);//管脚10初始化为输入管脚

USART_Initstructure.USART_BaudRate

=

115200;//配置rs232协议的波特率

USART_Initstructure.USART_WordLength

=

USART_WordLength_8b;//配置rs232协议数据位的的位宽

USART_Initstructure.USART_StopBits

=

USART_StopBits_1;//配置rs232协议的停止位的位宽

USART_Initstructure.USART_Parity

=

USART_Parity_No;//配置rs232协议奇偶校验位

USART_Initstructure.USART_HardwareFlowControl

=

USART_HardwareFlowControl_None;//配置rs232协议的硬件流控制

USART_Initstructure.USART_Mode

=

USART_Mode_Rx

|

USART_Mode_Tx;//使能接收和发送

USART_Init(USART1,&USART_Initstructure);//串口初始化

USART_Cmd(USART1,ENABLE);//使能串口1

}

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

函数名:fputc

形参:ch代表要得到的参数

*f代表数据保存的地方

返回值:返回得到的参数

函数功能:用户printf函数的调用

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

int

fputc

(int

ch,FILE

*f)

{

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)

==

RESET);//判断串口是否发送完数据

USART_SendData(USART1,ch);//从寄存器中得到数据

return

ch;

}

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

函数名:USART1_Echo

形参:无

返回值:无

函数功能:串口1的回显功能

电脑给开发板发送数据,开发板再把接收到的数据返回给电脑

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

void

USART1_Echo(void)

{

u8

ch;

while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)

==

RESET);//等待接收数据

ch

=

USART_ReceiveData(USART1);//把接收到的数据保存到ch中

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)

==

RESET);//等待上次发送数据发送完成USART_SendData(USART1,ch);//把ch中的数据发送到电脑

}

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

函数名:Show_Logo

形参:无

返回值:无

函数功能:在电脑上显示自己的logo

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

void

Show_Logo(void)

{

printf(“******************************************\n\r“);

printf(“

郑州信盈达电子有限公司\n\r“);

printf(“

Welcome

STM32

\n\r“);

printf(“******************************************\n\r“);

}

uart.h参考程序:

#ifndef

_UART_H_

#define

_UART_H_

void

UART1_Init(void);//串口1初始化

void

USART1_Echo(void);//串口1回显函数

void

Show_Logo(void);

//在终端上显示LOGO

#endif

六、实验操作步骤

准备实验环境

使用

STlink

仿真器连接

信盈达STM32

实验平台的主板

JTAG

接口;使用

实验平台附带的USB数据线,连接实验平台主板和PC。

新建工程,编写程序,完成软件设计

新建工程保存文件夹,复制相应的库文件;

在开发环境中新建工程,配置工程选项;

新建程序代码文件,添加到工程,完成程序编码,无误后将程序下载到开发板的Flash

中,按

RESET

键复位;

在PC

机上运行串口调试助手(波特率115200、1

位停止位、无校验位、无硬件流控制),发送数据到开发板,观察实验现象。

3.观察实验结果

1)在PC

机上,串口助手接收区显示学生信息;

2)通过串口调试助手发送数据,在接收区接收到同样的数据。

七、实验结果:

八、心得体会

通过本次实验,我学到了很多知识,通过学习实验,通过实验掌握

USART的功能。掌握

单片机串行口通信虚拟测试 第3篇

Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。VSM虚拟系统模型提供14种虚拟仪器。

Keil软件是目前最流行开发MCS-51系列单片机的软件。Keil软件在调试程序时提供了多个窗口, 主要包括输出窗口 (Output Windows) 、观察窗口 (Watch&Call Statck Windows) 、存储器窗口 (Memory Window) 、反汇编窗口 (Dissambly Window) 串行窗口 (Serial Window) 等。进入调试模式后, 可以通过菜单View下的相应命令打开或关闭这些窗口观察调试结果。

下面我们设计一个串口发送和接收的例子来说明使用Keil软件串行窗口和Proteus VSM虚拟终端调试串行通信。

1 串口发送

1.1 利用keilc调试

打开Keil c软件建立新工程, 输入程序如下:

程序的功能是不断发送一个字符。程序编译通过后, 点击工具栏上的“调试”按钮, 进入调试状态。点击调试窗口的串行窗口按钮打开串口1窗口。点击菜单栏上的“外围设备|serial”调出串行口通道, 可以看到串行口寄存器SCON的初值, SBUF的初值以及各标志位的值。初始运行的时候TI和RI都是为0, 当执行到while (!TI) 或while (!RI) 会一直等待。所以要勾选TI或RI位使之为1。我们按F10执行单步运行, 在UART#1串行窗口可以看到发送的字符。在窗口内鼠标右击还可以选择十六进制数还是ASCII码字符显示。

1.2 利用protues虚拟终端测试

在protues中放置单片机和虚拟终端, 设置单片机的时钟频率为11.0592MHZ, 因为程序中串行通信的波特率计算是以11.0592MHZ计算的, 所以必须设单片机的时钟频率为11.0592MHZ, 否则虚拟终端显示出来是乱的。双击虚拟终端, 弹出对话框设置波特率9600、数据位8、奇偶校验位无等

在虚拟终端上鼠标右击选择虚拟终端, 可以看到显示CPU不断发送的字符。

2 串口接收

2.1 利用keilc调试

我们可以直接在串行窗口中键入字符让CPU接收, 该字符虽不会被显示出来, 但却能传递到仿真CPU中, 如果仿真CPU通过串行口再将字符发送出来, 那么这些字符会在串行窗口显示出来, 用该窗口可以在没有硬件的情况下用键盘模拟串口通讯。

在keilc中建立新工程, 编写实验程序如下:

波特率定时器初值

该程序实现通过键盘控制点亮某一个灯的功能, 键入0—7的数字, 会立即回显到窗口中, 并且使P1口的某个位为低电平点亮相应的发光二极管。程序通过检测RI是否等于1来判断串行口是否有字符输入, 如果有字符输入, 则将其送到变量str中, 然后交给函数deel去处理也即根据输入的字符使P1口变化。但是从键盘输入的这个字符如果没有发送就不会在串行窗口中显示出来。所以还必须将字符在送到SBUF中等待发送出去。

程序编译通过后, 点击工具栏上的“调试”按钮, 进入调试状态。打开串口1窗口。我们按F5全速运行程序, 按键盘上的数字或者字符可以看到在UART1中有相应的字符显示。为了看到P1口的变化情况我们选择“外围设备|并行口1”调出P1口的状态寄存器。按数字0—7则相应的P1口的位为低电平, 按其他的字符P1口没有变化。

由于部分CPU具有双串口, 故Keil提供了两个串行窗口, 我们选用的89C51芯片只有一个串行口, 所以Serial 2串行窗口不起作用。

2.2 利用Protues虚拟终端测试

如图1在Protues放置单片机和虚拟终端, 设置单片机的时钟频率为11.0592MHZ, 虚拟终端的接收和发送端参数都和上边相同。

点击仿真中的运行按钮, 鼠标右击打开发送和接收虚拟终端, 在接收虚拟终端中单击一下, 然后利用键盘输入数字或字符就可以在发送终端中看到输入的数字或字符。并且可以看到相应的LED灯被点亮。

3 结语

验证串口程序需要实际硬件连接才能看到程序结果是否正确, 在实际教学或者开发当中由于条件和时间的限制所以使用仿真调试是很好的解决方法。本文讨论了通过Keil软件或者Protues软件来模拟调试串口程序, 学会使用Keilc软件的高级调试功能或者Prorues软件中的虚拟终端查看串行通信结果对单片机开发是非常重要的技巧和能力。

参考文献

[1]张万良.使用keil软件模拟调试单片机串行口[J].数字技术与应用, 2011.

[2]何力民.单片机应用系统设计[M].北京:北京航空航天大学出版社, 1995.

[3]C51教程[J].电子报, 2005.

[4]王静霞.单片机应用技术[M].北京:电子工业出版社, 2010.

单片机与PC机的串行通信 第4篇

【关键词】 单片机;PC机;串行通信;VB6.0;汇编程序

随着科学技术的发展,在单片机应用系统的设计中常常遇到计算机与外界的信息交换,即通信。鉴于PC机具有强大的监控和管理功能,单片机具有快速以及容易控制的特点,在实际应用中,一般都利用PC机所配置的RS-232C标准串行接口来实现应用系统与PC机之间的数据交换。Visual Basic 6.0(简称VB6.0)在通信方面提供了专门的Communications控件,即控件Mscomm,可以完成简单的串行端口通讯功能,也可以用来创建功能完备、事件驱动的高级通讯工具。可以利用VB6.0的Mscomm控件来实现PC机与多台MCS-51单片机之间的串行通信。该控件提供了一系列标准通讯命令的使用接口,利用它可以建立与串行端口的连接,并通过串行端口连接到其它仪器设备,从而发出命令、交换数据、以及监视和响应连接中发生的事件与错误。

一、系统结构设计

本系统是由一台上位PC机和若个台以M CS-51单片机为核心的下位机构成。大多数PC机都配备有串行通讯端口RS-232C,用于两台计算机间进行串行通讯,但单片机的输入、输出电平为TTL电平,与PC机的RS-232C标准串行接口的电气规范不一致,要实现单片机与PC机之间的数据通信,还必须进行电平转换,在上位PC机与下位机的连接中采用RS-232C/RS-485转换器,将PC机串口的标准由RS-232C电平信号转换成RS-485的差分信号。RS-485具用“平衡差动式”的数据传输特性,工作于半双工方式,RS-485的串行通信线路可采用最普遍的双绞线,且在抗干扰能力和带负载能力方面较其它的串行接口标准有非常明显的优势,适用于高速率和远距离的串性通信场合。PC机与多个单片机通信的电路结构图(如图1所示)。

图中的下位机是以MCS-51为核心的单片机系统,该系统由一片MCS-51外加一片256K的Eprom组成,并由外围芯片构成系统数据输入功能块、电机驱动功能块、数据输出功能块和通信功能块,其中通信功能块可选择下列三种通信方式之一,即由74LS245芯片构成的并行通信方式、由MAX232芯片构成的RS-232C串行通信方式以及由75176芯片构成的RS-485串行通信方式。

图1PC机与多个单片机通信的电路结构图

二、PC机的程序设计

VB6.0提供了串行端口控件Mscomm来为应用程序提供串行通讯。该控件屏蔽了通信过程中的底层操作,程序员可以通过设置、监视控件的属性和事件,结合Tiner控件即可完成对串行口的初始化和数据的输入输出工作。

(1)建立串行端口连接

Mscomm1.commport=1;设置通讯端口号为com1

Mscomm1.setting=’1200,N,8,1’;设置为字符串形式,波特率为1200,无校验位,8位数据位,1位停止位

Mscomm1.portopen=tu re;打开通讯端口

(2)连接和发送缓冲区的属性设置

Inbuffersize=256;接收缓冲区为256个字符

Outbuffersize=2;发送缓冲区为2个字符

Rthreshold =6;每当缓冲区收到6个字符就产生oncomm事件

Sthreshold=1;发送缓冲区为空触发事件

Inputlern=0;读取接收缓冲区所有字符

(3)主程序清单

Private sub commandl_click()

Textl.text=’检查下位机的连线’

Endsub

Private sub command2_click()

Comml.Output =chr(49)

Textl.text=’1#’;1号下位机

Endsub

Private sub command3_click()

Comml.Output =chr(50)

Textl.text=’2#’;2号下位机

Endsub

Private sub command4_click()

Comml.Output =chr(51)

Textl.text=’3#’;3号下位机

Endsub

Private sub command5_click()

End

Endsub

Private sub comm1.oncomm()

Select case comml.commevent

Case comEvReceive

Dim data(100)as string

Data num>=comml. input

k=data(num)

Textl.text=k

Endselect

Endsub

三、单片机的程序设计

下位机中关于RS-485的串行通信部分采用MCS-51系列单片机的汇编语言编写。MCS-51系列单片机有一个标准的全双工串行接口,其串行控制寄存器SCON包含串行工作方式选择位、接收发送控制位以及串行口状态标志位。SCON在单片机中的地址为98H。假设MCS-51单片机从外部采集到的一组30个的数据,并存在片内RAM 20H~3DH区域中,现要求将这个数据块传送给PC机。为了保证传送的正确,在传送前应由单片机先向PC机发送联络信号#55H,PC机准确接收到后,向单片机发送回应信号#0AAH,在检验无误后,单片机才开始向PC机传送数据。对串行口的操作可分为以下四步进行:(1)串行口初始化;(2)发送联络信号;(3)接收回应信号;(4)发送数据。

汇编程序代码如下所示:

ORG0030H

START: MOVSP, #60H

MOVTMOD, #20H;Tl工作在模式2下

MOVTH 1, #F3H

MOVTL1, #F3H;波特率设置为1200

SETB TRl

MOVPCON, #00H;SMOD=0

MOVSCON, #50H;选择串行方式1

MOVR0, #20H

MOVR2, #30;数据个数

XX1: MOVA, #55H

MOVSBUF,A;发送联络信号

WAITl: JBCT 1, W AIT2;等待发送完毕

AJMPWAIT1

WAIT2: JBC R1, READ ;等待接收完毕

AJMPWAIT2

READ:MOVA, SBUF ;接收联络信号

CJNEA,#0AAH, XX 1 ;接收数据不正确,重新开始

LOOP:MOVA,@R0

MOVSBUF,A

WAIT:JBC T1, LOOP1 ;等待发送完毕

AJMPWAIT

LOOPl:JNCR0

DJNZR2, LOOP

END

在VB6.0下实现串行通信有多种方法,除利用Windows API函数和利用Mscomm ActiveX控件外,还可通过VB调用动态链接库dll来实现,本文只介绍了如何利用Mscomm控件来实现串行通信。当前,基于VB6.0的PC机与单片机的串行通信技术在我国发展已比较成熟,应用也比较广泛。

参考文献

[1]陈立元.Visual Basic与RS232串行通信控制.北京:清华大学出版社,2002:48~51

[2]李朝青.PC机及单片机数据通信技术.北京:北京航空航天大学出版社,2000:177

[3]胡汉才.单片机原理及系统设计.清华大学出版社,2003

[4]李湘江.基于VB串行通信技术的应用开发.北京:机械与电子出版社,2002:61~64

单片机io口控制实验报告 第5篇

实验名称:

I/O 口控制

名:

张昊 学

号:

110404247 班

级:

通信 2 班 时

间:

2013.11.19

南京理工大学紫金学院电光系

一、实验目的1、学习I/O 口的使用。

2、学习延时子程序的编写和使用。

3、掌握单片机编程器的使用和芯片烧写方法。

二、

实验原理

1、广告流水灯实验 (1)

做单一灯的左移右移,八个发光二极管 L1~L8 分别接在单片机的P1.0~P1.7 接口上,输出“0”的时候,发光二极管亮,开始时P1.0->P1.1->P1.2->P1.3->...->P1.7->P1.6->...P1.0 亮,重复循环。

(2)

系统板上硬件连线:把“单片机系统”A2 区的 J61 接口的 P1.0~P1.6端口与 D1 区的 J52 接口相连。要求:P1.0 对应着 L1,P1.1 对应L2,……,P1.7 对应着 L8。

P1 口广告流水灯实验原理图如下

程序设计流程:流程图如下

2、模拟开关实验 (1)

监视开关 K1(接在 P3.0 端口上),用发光二极管 L1(接在单片机P1.0 端口上)显示开关状态,如果开关合上,L1 亮,开关打开,L1 熄火。

(2)

系统板上硬件连线:把“单片机系统”A2 区的 P1.0 端口用导线连接到 D1 区的 LED1 端口上;把“单片机系统”A2 区的 P3.0 端口用导线连接到 D1 区的 KEY1 端口上; 实验原理图如下图

程序设计流程

二、实验内容

1、流水灯

#include sbit p10=P1^0;sbit p11=P1^1;sbit p12=P1^2;sbit p13=P1^3;sbit p14=P1^4;sbit p15=P1^5;sbit p16=P1^6;sbit p17=P1^7;

unsigned char count=0;bit flag;void main(){ 开始 开关闭合否 L1 灭 L1 亮

P1=0xff;TMOD=0x01;TH0=55536/256;TL0=55536%256;EA=1;ET0=1;TR0=1;while(1){ p10=0;while(flag==0);flag=0;p10=1;p11=0;while(flag==0);flag=0;p11=1;p12=0;while(flag==0);flag=0;p12=1;p13=0;while(flag==0);flag=0;p13=1;p14=0;while(flag==0);flag=0;p14=1;p15=0;while(flag==0);flag=0;p15=1;p16=0;while(flag==0);flag=0;p16=1;p17=0;while(flag==0);flag=0;p17=1;} } void t0_srv()interrupt 1 { TH0=55536/256;TL0=55536%256;count++;if(count==10){ flag=1;

count=0;} } 2、模拟开关

#include sbit p30=P3^0;sbit p10=P1^0;void main(){

while(1){ if(p30==0)

p10=0;else

p10=1;} }

三、小结与体会

单片机串行通讯设计心得体会梁璐 第6篇

为期两周的单片机课程设计结束了,看着我们小组成员共同培育出来的设计成果,回想大家埋头设计的场景,我心里有种说不出的激动和高兴。

还记得单片机课程设计开始的那一天,李老师把大家召集到了单片机实验室,给我们介绍了此次课程设计的主要内容和注意事项。全班同学分成10个小组,每个小组都领到了不同的课程设计任务书。我与另外三个同学组成了一个小组,开始研究起此次设计的课题——串行通讯设计。

由于单片机原理及应用这门课程为我们上学期所学的内容,且串口通讯这部分知识点属于略讲内容,所以我们要做好本课题的设计,就必须要先把单片机串口通讯的知识点弄懂。于是大家开始分工合作,收集资料,明确设计步骤。

接下来的时间里,在老师的指导下和小组组长的带领下,我们小组成员共同整理了与课程设计有关的资料,确定了设计中需要使用的硬件和软件设备等,并绘制出了整个设计的流程图。通过上网、去图书馆查找相关资料,我们弄明白了本设计中使用的单片机AT89C52芯片、LED显示器等硬件的特点、工作方式和原理,也弄懂了PC机与单片机实现串行、并行传输数据的基本原理、PC机与单片机之间信号的电平转换方式。

整个课程设计中最有难度的部分是软件程序的编写。我们采用C语言和汇编语言分别编写了两套程序,其中我与组长采用C语言进行程序编写。程序经过不断地修改才能实现编译无误。最后还要进行优化,才能编出一套完整优质的程序。

接下来的时间里,我们带着编写好的程序输入KEIL,把程序烧录到单片机实验模块中,使用PC机串口调试助手进行调试。调试结果成功,老师对我们的设计给出了良好的评价,但同时也指出了其中的一些不足,如:C语言编写的程序在调试过程中显示结果准确但每一次只能传输一个数据;而汇编语言编写的程序在调试过程中虽可以一次性传送多个数据,却不能将结果通过LED显示器展现出来,于是我们又在原来的基础上做了一些改进。最后,我们要做的就是完成本次单片机课程设计的报告。

从这一次课程设计中,我学到了很多,不但巩固了计算机C语言和单片机原理及应用的知识,还学到了团队之间应该如何分工合作、团结互助。单片机课程设计实践性强,需要综合运用所学的知识,耐心、细心地去完成每一个细节,才能巩固和加深扩大所学的理论知识,将微型计算机应用系统的硬件、软件及其接口的设计和调试方法弄明白。这份课程设计成果,凝聚着我们小组4个成员的心血,以及指导老师的悉心帮助。我们收获的,也不仅

仅是这一份设计成果,更多的是知识的积累巩固、成员间的团结互助精神。

由于时间和知识水平有限,我们最后完成的设计成果中还存在着一些不足,恳请老师指正。在此,感谢老师的指导和帮助!

单片机串行口实验 第7篇

摘要:介绍了一种计算机串行口经二次开发,用作步进电机控制器的新方法。计算机通过向串行口发送数据产生控制脉冲,实现对步进电机的控制。

关键词:串行口 二次开发 控制脉冲 步进电机控制器

步进电机在数控机床、医疗器械、仪器仪表等自动或半自动设备中得到了广泛应用。用计算机控制步进电机的通常作法是采用步进控制卡,系统构成如图1所示[1][2]。其中Pulse、Dir分别为控制电机的转换步数和旋转方向的信号;CWL(Clock Wise Limit)、CCWL(Counter Clock Wise Limit)分别为电机顺、逆时针旋转的限位信号;ORG为定位信号。

这种方法不仅成本较高,而且不便于操作。在计算机扩展槽上安装控制卡,必需打开机箱才能操作,而且在小型平板电脑和嵌入式电脑中根本没有安装控制卡的`空间和扩展槽。将计算机串行口二次开发,用于控制步进电机,代替控制卡的作用,具有成本低、操作简单、兼容性好等优点。

1 RS232串行口及编程

计算机串行接口采用RS232标准:规定逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,常用的信号有8个(接口为DB9M插座时,引脚号如表1所示),其中RXD、TXD为收、发数据,可与RS232串行口设备直接进行通讯,RTS、DTR、CD、DSR、CTS、BELL为控制与检测MODEM的信号,在通讯过程中起联络与控制作用。数据格式有5、6、7、8位几种,1位起始位(逻辑0),1、1.5或2位停止位(逻辑1),可以选择奇校验、偶校验和无校验,常用波特率为2400、4800、7200、9600bps等。串行口编程方法主要有三种:硬件编程法、文件操作法、串口控件法。

表1 RS232接口各引脚定义

引脚号

作 用

方 向1

2

3

4

5

6

7

8

9CD 数据载波检测

RXD 接收数据

TXD 发送数据

DTR 数据终端准备就绪

GND 信号地

DSR 数据设备准备就绪

RTS 请求发送

CTS 清除发送

RI 振铃指示输入

输入

输出

输出

输入

输出

输入

输入

1.1 硬件编程法

串行口通信技术应用探究 第8篇

计算机与外部设备的连接,不是通过并行口就是通过串行口。并行口编程很简单,相对而言,串行口的编程就要复杂得多了。为了进行可靠的串行通信,标准串行口必须具有握手信号和状态信息。但由于串行口通信是为相距一定距离的两台或两台以上设备提供彼此连接的最方便的办法,尽管编程较复杂,但应用得还是相当广泛。下面针对串口通信进行探究。

1 数据异步串行的发送和接收

数据异步串行的发送和接收具有异步和串行两个特点。所谓“串行”是指一次一个数据位,而并行是一次一个字节。所谓“异步”,是指相邻两个字节之间的停顿时间是长短不一的,尽管同一个字节内各位的定时和顺序是非常严格的。很容易想到有异步串行就会有同步串行,但是为了简单起见,这里把异步串行口就简称为“串行口”。在串行口中收发的每一个字节数据是由以下4个部分按顺序组成的:1个起始位,8个数据位(在某些情况下是7个),奇偶校验位(可有可无,可奇可偶),1个或2个停止位。在每两个字节之间,可以停顿任意长时间。

数据收发线的空状态是高电平。起始位标志着一个新字节传送的开始,与一个数据位占用同样的时间宽度,低电平。起始位之后是奇偶校验位,在奇偶校验位之后就是停止位,它可以占一位或两位数据位的时间宽度。停止位是低电平,它表示一个字节传送的结束。在停止位之后,可以接着又是下一个字节的起始位,也可以在停顿任意长时间之后,才是下一个字节的起始位。

2 RS-232标准

2.1 RS-232标准信号

大部分串行口的结构都是在发送和接收双方都装有一个25针插座,都不很严格地遵循RS-232标准。制造厂家最经常提供的RS-232信号是:针号为3的TXD(发送数据);针号为2的RXD(接收数据);针号为5的GRD(地)。这些信号中许多是为支持Modem而定义,在计算机和Modem之间建立硬件规约,以便在Modem可以接收数据之前计算机不会向它发送数据,在Modem准备好数据之前计算机不会从它那儿接收数据。

如果控制通信双方串行口的内部时钟彼此不一样,则可能引起所谓的“帧错”(framing error)。容易想到,接收方的串行口一旦检测一个起始位,它就会周期性地去对传输线进行取样,得到每一位的信号。这个周期的长短是由波特率计算出来的。然而,每次取样的实际时刻却是由系统内部的主时钟决定的,在传输线上并没有这样一个取样时钟信号。因此,如果双方的波特率不一致,或者系统内部的主时钟发生了偏差,都可能造成发送和接收双方不协调一致,从而发生“帧错”。

2.2 硬件握手

通过串行口发送数据的正确做法是不断地监视接收口上的CTS信号。只有当CTS信号表明可以安全发送数据时才去发送数据。因此,当使用了硬件握手信号时,伪C码描述的发送程序如下所示:

如果通信双方都支持RS-232标准,并且彼此之间的电缆连接也是正确的,那么显然应该使用握手信号。但是,实际情况两者大都不能同时满足。

3 通信问题

如果通信是在计算机之间进行,则也可以只使用GND,TXD和RXD三个信号线就能解决问题。如果两台同样类型的计算机彼此进行通信,当一台准备好发送数据时,在理论上另一台一定准备好接收这个数据,这样可以省略掉RTS、CTS这些信号了。但是省略掉这些信号之后,却可能招来很多其他麻烦,其中最糟糕的就是“过冲”(Overrun)错。

当连接两个串行口的电缆线只有三根(GND,RXD,TXD)时,发送方根本无法知道接收方什么时候可以接收数据,所以只好造一个假信号去愚弄发送对方,使它误以为接收方任何时候都准备好了接收数据。具体做法是把25针插座中的针6(DSR),针8(CD)和针20(DTR)直接连接在一起。但这样一来却很容易引起“过冲”错。例如,假设计算机A比计算机B速度快,由于没有任何硬件握手信号,计算机A误以为计算机总是可以接收数据的,结果在计算机B可以来得及读取计算机A发送来的第一个字节之前,计算机A又发送来了第二个字节,这就引起了“过冲”错。即使计算机B的速度比计算机A快,但计算机B的软件速度太慢也可能引起这类“过冲”错。

4 通过BIOS调用存取PC的串口

4.1 串行口的初始化

在使用串行口之前,需要首先对它进行初始化,以便设置与缺省设置不一样的串行口参数。第一个串行口的缺省设置是1200波特率,偶校验,7个数据位,1个停止位。中断14H的子功能号0就是用来初始化串行口的,其入口参数是:寄存器AH等于0,AL为初始化参数,DX为串行口号。一个字节的初始化参数分为4个部分:位7至位5说明波特率的大小,位4和位3说明有无校验位和什么样的校验,位2说明停止位的位数,位1和位0说明数据位的位数,其格式如图1所示。

比如某个串行口的波特率为9600,偶校验,1个停止位,8个数据位,则AL寄存器中的值是11111011,即十进制251。

在一台标准的PC机上,最多可以有7个串行口。在一些较新的计算机上,串行口的数目还要多。在使用BIOS调用时,需要在DX寄存器内说明初始化哪一个串行口。串行口的编号是从0开始。下面的int_port函数就是对串行口进行初始化的。

4.2 发送一个字节

中断14H中的子功能号1是用来通过串行口发送一个字节的,其入口参数是:AH寄存器含有状态信息。如果返回时AH寄存器的位7是1,则表明发送有错。错误的具体原因和性质还必须通过读串行口的状态才能断定。下面就是通过指定串行口发送一个字节的函数sport。

4.3 检查串行口的状态

中断14H中的子功能号3是用来检查串行口的状态的,其入口参数是:寄存器AH等于3,DX是串行口号。返回时,AH和AL寄存器含有串行口的状态信息,当某一位置1时,其相应的含义如下:

从上面的表可以看出,这些状态大部分是针对Modem的。如果使用串行口的目的是为了把计算机和非调制解调器设备相连接,则可以忽略其中大部分状态信息。然而有一个状态信息在此种情况下却是至关重要的,这就是AH寄存器位0的“数据准备好”信息。借助于这个信息就可以知道串行口是否接到一个字节可以被CPU读取。下面就是通过串行口读取一个字节的函数rport。

应该注意,如果串行口当前无数据可读,中断14H的子功能号2是一直等待的,直到接收到一个字节才返回。但采用这个办法后,当遇到某些串行口错误时,例如,忘记插电缆,就可能使计算机“死机”。为了避免这个问题的发生,函数rport首先读取指定串行口的状态,检查“数据准备好”这一位。如果没有准备好,则还调用kbhit函数去检查用户是否打入了一个键。如果没有击键,则继续循环检查“数据准备好”位。如果击了一键,则去读取这个键值并退出。

5 在计算机之间传送文件

当多个型号不同计算机要共享数据或程序,若硬件上已经提供了硬件握手信号,则应尽量利用。但实际环境常常不提供这些信号或提供的不准确,这时为避免文件传送过程中发生“过冲”错的唯一办法就是实现软件握手,即发送方发送一个字节后,就一直等待着从接收方收到一个“认可”字节,只有在收到这个“认可”字节以后,发送方才发送第二个字节,并接着等待接收方收到第二个“认可”字节,这个过程一直持续到整个文件发送完毕。如果使用伪C码来表示,可以把发送和接收程序过程描述如下:

尽管软件握手的办法会降低文件传送速度,但却提供了传输的可靠性办法。

6 结束语

采用软件握手以后,不管两台计算机的速度相差多远,发送方永远也不会超前于接收方。传送文件的每一个字节,在传送线上要来回传送两次,因此降低了速度,却实现了可靠性。

参考文献

[1]李牧,何明星,汤波,胡训强.微机系统与接口[M].北京:冶金工业出版社,2007.

[2]王效华,张咏梅.单片机原理与应用[M].北京:北京交通大学出版社,2007.

[3]串口通信协议[EB/OL].http://baike.baidu.com/view/2459734.htm

单片机串行口实验 第9篇

DataFlash系列存储器几乎可以和任何类型的单片机接口,无论单片机是否有SPI接口。当然,如果单片机有SPI接口,那么存储器读/写程序就相对简单些;如果单片机没有SPI接口,则可以用软件仿真SPI接口与存储器通信。

图5为微型压力测量系统的一部分。存储器采用AT45DB161B-TC,TSOD封装;单片机为美国Microchip公司的PIC16LC73B-04/SS,SSOP封装。单片机采用软件仿真SPI接口的方式与存储器通信,存储器工作于SPI模式0。

4.2AT45DB161B存储器读/写子程序

DataFlash系列存储器可以按地址从低到高顺序读写,也可以随机读写任一字节的数据。对于顺序读数据,可以使用连续读主存页阵列命令(操作码68H或E8H)从给定的起始地址开始连续读出,中间不需用户干预,也可使用读单页主存命令(操作码52H或D2H),自行提供页地址读取数据。对于顺序写数据,可以使用通过缓存写主存页命令(操作码82H或85H),直接将数据写入主存;也可以先使用写缓存命令(操作码84H或87H),将数据写入缓存,在适当的时刻再使用缓存写主存页命令(操作码83H或86H),将缓存中的数据写入主存,如图6所示。使用何种方式读写取决于特定的应用场合与要求。

下面的子程序为顺序读/写存储器的例子。子程序spiwt采用了通过缓存写主存页的方法,向存储器写入1字节数据。顺序读存储器子程序spicrd采用了边疆读主存页阵列命令。从给定地址处连续读出数据,用图5所示的PIC16LC73B单片机汇编语言编写,使用MPLAB5.4.00编译器编译通过并烧写入单片机,按图5所示系统实测通过。

;顺序写子程序,用spiwt名称调用

spiwtbcfSTATUS,RP0

bcfPORTB,SCK;模式0

bcfPORTB,cs;片选

movlw82H;加载操作码

movwfspi_out;置入寄存器

callspiout;调用子程序输出操作码

movfPA1,w;加载第一字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA1,w

xorwfPA2,w;获得第二字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA2,w;加载第三字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfspi_wt,w;加载待写数据

movwfspi_out;置入寄存器

callspiout;调用子程序输出

bsfPORTB,cs;触发写入操作

nop;延时

retlw0;从子程序返回

;输出子程序,用spiout名称调用

spioutmovlw0x08;加载输出位数

movwfspi_cnt;置入寄存器

nspioutrlfspi_out;先输出最高位

btfscSTATUS,C;是否为1

bsfPORTB,SDO;输出1

btfssSTATUS,C;是否为0

bcfPORTB,SDO;输出0

nop;延时

bsfPORTB,SCK;时钟信号上升沿

nop;延时

bcfPORTB,SCK;时钟信号下降沿

decfszspi_cnt;检查输出位数

gotonspiout;输出下一位

retlw0;从子程序返回

;顺序读子程序,用名称spicrd调用

spicrdbcfSTATUS,RP0

bcfPORTB,cs;片选

bcfPORTB,SCK;模式0

movlwE8H;加载操作码

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfPA1,w;加载第一字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA1,w

xorwfPA2,w;获得第二字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA2,w;加载第三字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfDCRE,w;加载任意位字节

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfDCRE,w;共需4个任意位字节

movwfspi_out

callspiout

movfDCRE,w

a

movwfspi_out

callspiout

movfDCRE,w

movwfspi_out

callspiout

单片机串行口实验 第10篇

摘要:SK5278是一种可管理16个按键的键盘控制器,该器件内部具有去抖动处理电路,可直接输出按键的键值编码,并采用串行方式与单片机或微处理器进行接口,使用该器件可简化单片机系统软硬件的键盘接口。文中给出了该器件的特点、管脚说明和使用方法,并以AT89C2051单片机为例给出了相应的接口电路及相应程序。

关键词:键盘控制 串行接口 单片机 SK5278

对于以单片机为核心构成的智能仪器、仪表、工控设备及家用电器而言,构成人机交互的键盘接口电路是必不可少的,而相应的键盘管理软硬件设计却比较麻烦。简单的矩阵键盘存在着占用CPU软硬件资源多、响应速度慢、监控软件编制复杂等问题,专用的键盘接口器件如INTE8279、HD7219又往往具有LED数码管显示电路,如果仅使用其键盘管理功能,则存在硬件资源浪费,接口电路复杂,造价较高等问题,SK5278即是为解决上述键盘管理问题而推出的一款键盘控制芯片。

1 特点及引脚功能

SK5278是福州贝能科技有限公司推出的采用PIC内核的键盘控制器。该芯片采用4线串行接口,可与任何种类的单片机接口;它具有按键有效指示输出,可用中断方式管理键盘;其行线X0~X3与列线Y0~Y3可构成44键盘矩阵;SK5278的16键键盘控制器内含去抖动处理电路,因而可直接输出键值;此外,该器件的工作电源电压范围宽达4~6V;SK5278采用18脚双列直插DIP封装形式。其管脚排列如图1所示,管脚说明如表1所列。

表1 SK5278管脚说明

管脚号管脚名称管脚类型

功 能

1DIOO数据输出端,读取键盘数据时,此脚在CLK上升沿输出数据2KEYO按键有效输出端,平时为低电平,当检测到有效按键时,此引脚变为高电平。读取键盘后,此引脚重新变为低电平3,14VDD 正电源4RST 复位端5VSS 电源地6~9X0~X3I矩阵键盘行线输入端10~13Y0~Y3O矩阵键盘列线输出端15OSCOO振荡输出脚,输出频率为RC振荡频率四分之一16RC 外接振荡器连接端,R=3.3kΩ,C=20pF时,振荡频率为4MHz17CSI片选端,该脚为低时,可芯片读取键盘数据18CLKI时钟输入端,读取键盘数据时,此脚电平的上升沿表示数据有效

2 工作原理

SK5278可用行线X0~X3和列线Y0~Y3构成44矩阵键盘。同时在芯片内部可自动完成扫描、译码、去抖动处理等任务。当SK5278检测到有效的按键时,按键有效指示“KEY”引脚将从低电平变为高电平,并一直保持到按键代码被读取为止。在“KEY”为高电平期间,如果SK5278接收到“读键盘数据”命令,(即“CS”管脚变低),则输出当前按键的键盘代码,SK5278键盘代码的范围为00H-0FH。如果在接收到“读键盘数据”时没有按键按下,SK5278将输出FFH。在一次读键盘过程完成后,按键有效指示“KEY”将变为低电平。利用按键有效指示“KEY”与单片机的外部中断端相连,可完成具有中断的键盘监控功能,从而提高CPU的工作效率,(本网网收集整理)减少按键响应时间。

SK5278工作时需要外接RC振荡电路以供系统工作,RC元件的典型值为R=3.3kΩ,C=20pF,此时的.振荡频率约为4MHz,由于此振荡频率较高,故在印制电路板布线时,所有元件尤其是振荡电路的元件应尽量靠近芯片,并尽量使电路连线最短。

SK5278的RESET复位端在一般应用情况下,可以直接与正电源连接,在需要较高可靠性的情况下,可以连接外部RC复位电路,在上电或接收到RESET端的复位信号后,SK5278大约需要经过25ms的复位时间才会进入到正常工作状态。程序中应尽可能地减少CPU对SK5278的访问次数,以提高程序的效率。

值得注意的是,如果有2个键同时被按下,则SK5278只能给出其中一个按键的代码,因此SK5278不适合应用于需要2个或2个以上按键同时被按下的应用场合。如确实需要双键组合使用或组合增加键盘数量,可在单片机的某I/O脚接入一键与SK5278共同组双键键盘监控电路。

3 串行接口及时序

SK5278采用串行方式与单片机或微处理器接口,串行数据从“DIO”引脚输出,并由“CLK”端发出同步时钟脉冲。当SK5278检测到有键按下时,按键有效指示“KEY”变高,单片机检测到“KEY”信号变高后,便将片选端“CS”拉低,从而使得SK5278将取得的键盘数据在“CLK”引脚的上升沿从“DIO”脚依次送出。在单片机发出8个时钟脉冲后,即可从“DIO”端读取8位键值编码,该编码值的D7为最高位,D0为最低位,然后单片机再使片选“CS”变高,并使“KEY”端重新输出低电平,至此,读键值过程结束。SK5278的串行接口时序如图2所示。图中,T1表示从“CS”下降沿至第一个CLK上升沿的延时,典型值为15μs;T2为CLK脉冲宽度,典型值为10μs;T3为CLK脉冲时间间隔,典型值为10μs。

4 应用电路

利用SK5278串行接口占用单片机口线少及无键按下时无须CPU干预的特点,可以很容易地构成单片机的键盘接口电路,图3所示是AT89C2051单片机与SK5278构成的键盘及接口电路。图中,AT89C2051的P1.2、P1.3、P1.4口线分别与SK5278的“CS”、“CLK”、“DIO”端相连。为了提高按键的响应速度并减少单片机的干预。本方案将SK5278的按键有效指示端“KEY”与AT89C2051的外中断端INT0相连,由于INT0为低电平中断,故而加入了一级非门以使“KEY”反相后与其相连。与图3电路对应的键盘处理程序如下:

;位定义

COUNT DATA 70H

RXBUF DATA 20H

;I/O定义

DIO BIT P1.4

CS BIT P1.2

CLK BIT P1.3

;主程序

MAIN:MOV SP,#50H

MOV P1,#0FFH ;将P1口置为输入

SETB IT0 ;INT0为边沿触发

SETB PX0 ;INT0为高优先级中断

SETB EX0 ;开INT0中断

SETB EA ;CPU开中断

LCALL DL25ms ;延时25ms等待SK5278复位

;INT0键盘中断程序

INT0:LCALL RECEIVE ;读键值

MOV A,RXBUF ;键值送A

CJNE A,#00H,KEY-1 ;K0键未按下转下键

LJMP KEY0 ;K0键按下,转入相应键值处理子程序

KEY1:CJNE A,#01H,KEY-2;

LJMP KEY1 ;K1键按下,转入相应键值处理子程序

KEY2:

KEY15:CJNE A,#0FH,KEYFH ;K15键未按下,中断返回

LJMP KEY15 ;KEY15键按下,转入相应键值处理程序

KEYFH:RET; 无键按下时中断返回读键盘值程序

RECEIVE:CLR CS ;读键盘数据有效

SETB DIO ;将DIO置为高电平输入状态

ACALL DL 15μs ;T1延时

MOV COUNT,#08H ;共八位数据

LOOP:SETB CLK

ACALL DL 15μs ;T2延时

MOV A,RXBUF

RL A ;数据左移一位

MOV RXBUF,A

MOV C,DIO ;读取一位数据

MOV RXBUF.0,C

CLR CLK

ACALL DL 15μs ;T3延时

DJNZ COUNT,LOOP

SETB DIO ;将DIO重置为高电平输入

ACALL DL 15μs

SETB CS ;读键盘数据无效

RET

5 结束语

相关文章
创新公共服务范文

创新公共服务范文

创新公共服务范文(精选12篇)创新公共服务 第1篇科学技术是第一生产力,科技公共服务平台对国家或区域的技术创新具有巨大的推动作用。科技...

3
2025-10-24
匆匆中学生读后有感

匆匆中学生读后有感

匆匆中学生读后有感(精选9篇)匆匆中学生读后有感 第1篇匆匆读后感500字_读《匆匆》有感当细细地品读完一本名著后,大家心中一定有不少感...

1
2025-10-24
草莓教学范文

草莓教学范文

草莓教学范文(精选17篇)草莓教学 第1篇“风儿轻轻吹,彩蝶翩翩飞,有位小姑娘上山摘草莓,一串串哟红草莓,好像……”优美的歌词,动听...

3
2025-10-24
仓储类课程范文

仓储类课程范文

仓储类课程范文(精选7篇)仓储类课程 第1篇物流产业是复合型产业,发达的物流能加速传统运输、仓储和零售等行业向现代物流服务领域延伸。...

1
2025-10-24
创造性批评:解说与解读

创造性批评:解说与解读

创造性批评:解说与解读(精选8篇)创造性批评:解说与解读 第1篇创造性批评:解说与解读作为诗性文化重要组成部分的审美批评,同文学艺术实践...

2
2025-10-24
初二地理试卷分析

初二地理试卷分析

初二地理试卷分析(精选6篇)初二地理试卷分析 第1篇莲山 课件 w ww.5 YK J.COM 4 初二地理试卷分析二、试题所体现的新课程理念和...

4
2025-10-24
常州市河海中学文明班小结

常州市河海中学文明班小结

常州市河海中学文明班小结(精选2篇)常州市河海中学文明班小结 第1篇常州市河海中学2008~2009学年第一学期 八(1)班创 文 明 班 ...

4
2025-10-24
财务负责人身份证明

财务负责人身份证明

财务负责人身份证明(精选14篇)财务负责人身份证明 第1篇财务负责人身份证明及签字样本兹证明为我公司财务负责人。特此证明。身份证复印...

3
2025-10-24
付费阅读
确认删除?
回到顶部