nbhkdz.com冰点文库

学习小结--串口通信原理

时间:2011-10-19


串口通信原理 一 波特率设置

例程如下 Fdiv = (Fpclk / 16) / UART_BPS;//设置波特率 U0DLM = Fdiv / 256; 高八位 U0DLL = Fdiv % 256; 低八位

. 二. 几个寄存器 U0RBR 1,U0RBR 接收寄存器
如:RECEIVE_BUFFER[i++] = U0RBR;//把接收到的数据放到接收缓冲区

U0THR 2,U0THR 发送寄存器
如: U0THR = data; //把要发送的数据直接放在寄存器即可

3

U0LCR 线控制寄存器

特别注意的是:我们在设置波特率之前必须使能访问除数锁存 即要使 U0LCR = 0x83 0x83(除数锁存位为 1 bit 7】=1 bit【7 =1 =1)

1

4

U0LSR 线状态寄存器

2

串口中断的寄存器放到中断里面总结



lpc2136 发送数据(lpc2136 发给电脑)

1,怎么发送,发送到哪里?

U0LCR 注意:如果要访问 U0THR 线控制寄存器(U0LCR U0LCR)的第七位(除数锁存访问 位 DLAB 即 bit[7] bit[7]位)必须为 0 U0THR 为只写寄存器

2,怎么判断发送完成?

3

Hello World!” 例程 通过代码实现发送“Hello World!
/**************************************************************************** * 文件名:main.c * 功 能:向串口发送数据,在PC上用超级终端或串口助手就可以收到“Hello World!”字符串 * 说 明:使用外部.0592MHz晶振,根据CONFIG.H文件配置,Fpclk=11.0592MHz; * 通讯波特率,位数据位,位停止位,无奇偶校验。 ****************************************************************************/ #include "config.h" #define UART_BPS 115200 // 定义通讯波特率 uint8 const SEND_STRING[] = "Hello World!\r\n"; /**************************************************************************** * 名 称:DelayNS() * 功 能:长软件延时 * 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void DelayNS(uint32 dly) { uint32 i; for(; dly>0; dly--) { for(i=0; i<5000; i++); } } /**************************************************************************** * 名 称:UART0_Ini() * 功 能:初始化串口。设置为位数据位,位停止位,无奇偶校验,波特率为 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void UART0_Init(void) { uint16 Fdiv; U0LCR = 0x83; // DLAB = 1,可设置波特率 Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率 U0DLM = Fdiv / 256;

4

U0DLL = Fdiv % 256; U0LCR = 0x03; } /**************************************************************************** * 名 称:UART0_SendByte() * 功 能:向串口发送字节数据,并等待发送完毕。 * 入口参数:data 要发送的数据 * 出口参数:无 ****************************************************************************/ void UART0_SendByte(uint8 data) { U0THR = data; // 发送数据 while( (U0LSR&0x40)==0 ); // 等待数据发送完毕 } /**************************************************************************** * 名 称:UART0_SendStr() * 功 能:向串口发送一字符串 * 入口参数:srt 要发送的字符串的指针 * 出口参数:无 ****************************************************************************/ void UART0_SendStr(uint8 const *str) { while(1) { if( *str == '\0' ) break; UART0_SendByte(*str++); // 发送数据 } } /**************************************************************************** * 名 称:main() * 功 能:向串口UART0发送字符串"Hello World!" ****************************************************************************/ int main(void) { PINSEL0 = 0x00000005; // 设置I/O连接到UART0 UART0_Init(); while(1) { UART0_SendStr(SEND_STRING); DelayNS(10); } return(0); } //bit[7]=0

四 接收数据(lpc2136 从电脑接收数据)
5

4.1,数据放哪里?
接收到的数据放在U0RBR 寄存器, U0RBR 是UART0 Rx FIFO 的最高字节。它包含了最早 接收到的字节,可通过总线接口读出。LSB (bit0)代表最早接收到的数据位。如果接收 到的字符小于8 位,未使用的MSB 填充为0。 如果要访问U0RBR,U0LCR 的除数锁存访问位(DLAB)必须为0。U0RBR 为只读寄存 器。

4.2 怎么知道接收到了数据?
LPC2114 是通过U0LSR(线状态寄存器)的bit[0]来指示U0RBR 接收到了数据的。 所以,我们程序就可以根据读取该位来判断是否有新的数据。 如果U0LSR[0]=1,U0RBR 包含有效数据。 U0RBR 中的数据读出后,U0LSR[0]位被清零。 例程:

#include "config.h" #include "delay.h" #define UART_BPS 115200//定义通讯波特率 #define BEEP 1<<5; #define LED1 1<<16 #define LED2 1<<17 #define LED3 1<<18 #define LED4 1<<19 int8 RECEIVE_BUFFER[4]; int8 L11[]="L11"; int8 L10[]="L10"; int8 L21[]="L21"; int8 L20[]="L20"; int8 L31[]="L31";

6

int8 L30[]="L30"; int8 L41[]="L41"; int8 L40[]="L40"; int8 B1[]="B1"; int8 B0[]="B0";

void initSystem() { IO1SET = LED1 | LED2 | LED3 | LED4; IO1DIR = LED1 | LED2 | LED3 | LED4; IO0CLR = BEEP; IO0DIR = BEEP; }

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

*名称:UART0_Ini() *功能:初始化串口。设置为位数据位,位停止位,无奇偶校验,波特率为 *入口参数:无 *出口参数:无 ****************************************************************************/ void UART0_Init(void) { uint16 Fdiv;

U0LCR = 0x83;// DLAB = 1,可设置波特率 Fdiv = (Fpclk / 16) / UART_BPS;//设置波特率 U0DLM = Fdiv / 256; U0DLL = Fdiv % 256; U0LCR = 0x03;

} uint8 matchled(int8 { unsigned int i, a; for(i=0;i<3;i++) { *str1 , int8 *str2)

7

if(str1[i] == str2[i]) { a=1; } else { a=0; break; } } return a; } uint8 matchbeep(int8 { unsigned int i, a; *str1 , int8 *str2)

for(i=0;i<2;i++) { if(str1[i] == str2[i]) { a=1; } else { a=0; break; } } return a; }

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

*名称:main() *功能:从串口接收数据 并实现功能 ****************************************************************************/ int main(void) { unsigned int i=0,j;

8

PINSEL0 = 0x00000005;//设置 I/O 连接到 UART0 UART0_Init(); initSystem(); while(1) { while( (U0LSR&0x01)==0 );//判断接收寄存器是否有新的数据 RECEIVE_BUFFER[i++] = U0RBR;//把接收到的数据放到接收缓冲区 if(i==2) { if((matchbeep(RECEIVE_BUFFER,B1)) == 1) { IO0SET = BEEP; i=0; for(j=0;j<2;j++) { RECEIVE_BUFFER[j]= 0; } } if((matchbeep(RECEIVE_BUFFER,B0)) == 1) { IO0CLR = BEEP; i=0; for(j=0;j<2;j++) { RECEIVE_BUFFER[j]= 0; } } } if(i==3) { if((matchled(RECEIVE_BUFFER,L11)) == 1) { IO1CLR = LED1; }

9

if((matchled(RECEIVE_BUFFER,L10)) == 1) { IO1SET = LED1; } if((matchled(RECEIVE_BUFFER,L21)) == 1) { IO1CLR = LED2; } if((matchled(RECEIVE_BUFFER,L20)) == 1) { IO1SET = LED2; } if((matchled(RECEIVE_BUFFER,L31)) == 1) { IO1CLR = LED3; } if((matchled(RECEIVE_BUFFER,L30)) == 1) { IO1SET = LED3; } if((matchled(RECEIVE_BUFFER,L41)) == 1) { IO1CLR = LED4; } if((matchled(RECEIVE_BUFFER,L40)) == 1) { IO1SET = LED4; } i=0; for(j=0;j<3;j++) { RECEIVE_BUFFER[j]= 0; } } }

10

return(0); }

11


学习小结--串口通信原理.pdf

学习小结--串口通信原理_信息与通信_工程科技_专业资料。学习小结--ARM7串口通信原理 串口通信原理 一 波特率设置 例程如下 Fdiv = (Fpclk / 16) / UART_BPS...

串口通信原理及操作流程_图文.ppt

串口通信原理及操作流程 - 第六讲串口通信原理及操作流程 曾铁军 主要内容 1

串口学习心得.doc

串口学习心得 - 串口通信 无论是串口 1,串口 2,串口 3,其配置完全基本相同,且 stm32 的串口和 51 的串口其发送接收原理基本相同,发送字符和字符串有一定的...

串口通信原理详解_图文.ppt

串口通信原理详解 - 串口通信是相当重要的通信方式,该文档详细讲解了其原理,学习价值很高。。

第六讲 串口通信原理及操作流程_图文.ppt

第六讲 串口通信原理及操作流程 - 第六讲串口通信原理及操作流程 曾铁军 主要内

实验四 串口通讯原理及操作_图文.ppt

实验四 串口通讯原理及操作 - 实验四 串口通讯原理及操作 一、实验目的 ? 进一步熟悉集成开发环境; ? 掌握80C51串行通信的基本工作原理; ? 学习80C51串行通信的...

串口通信实验报告.doc

串口通信实验报告 - 大连理工大学实验报告 成绩: 串口通信实验 一、实验目的和要求 ? ? ? 了解串口通信原理与机制 掌握基于8051的串口通信硬件电路设计方法 掌握...

串口通信原理及操作流程_图文.ppt

串口通信原理及操作流程 - 第六讲串口通信原理及操作流程 曾铁军 主要内容 1

有关USART的技术总结.pdf

STM32(USART)串口通信总结杨龙(10.20) 一、概述 STM32(USART)串口通信是...简单的通信方式之一, 学习 USART 串口通信学习 stm32 系列芯片通信原理的比较...

0--RS232串口通信原理.doc

0--RS232串口通信原理 - rs232 串口通信原理 串口是计算机上一种非

串口通讯实验报告.doc

串口通讯实验报告_学习总结_总结/汇报_实用文档。网络编程与实践实验报告 实验...通过本次实验,我对串口通信原理有了更深的认识与理解,并对 MFC 界面制作...

第六讲_串口通信原理及操作流程_图文.ppt

第六讲_串口通信原理及操作流程 - 第六讲串口通信原理及操作流程 曾铁军 主要内

串口通信_图文.doc

可视化程序设计课程设计说明书 题目: 计算机串口通信...2 台 Pc 机之间的串口通信,都具有 相同的原理。只要...总结通过这么长时间的的课程设计,使我对上学期学习...

实验5-1 串口通信实验_图文.ppt

通过实验了解S3C44B0X/S3C2410X处 理器串行口(UART)的结构,串行 通讯原理。 ...3实验内容学习S3C44B0X/S3C2410X的UART相 关寄存器的功能,熟悉 S3C44B0X/S3C2410...

UART串口学习笔记.doc

UART串口学习笔记_IT/计算机_专业资料。在学习UART串口的过程中,所做的一些笔记...其连 接及通信原理如图所示 RS232 信号定义 RS-232C 标准规定接口有 25 根...

网络传输原理小结.doc

网络传输原理小结_信息与通信_工程科技_专业资料。局域网参考模型中数据链路层的...如果数据不是很多,对传 输的速度要求不高的话,还是用串口比较方便。 基于 ...

单片机串口及串行通信技术_图文.ppt

第9章 串口及串行通信技术● 教学目标 介绍MCS-51串行通信接口技术 介绍MCS-51单片机之间的串行通信接口技术介绍PC机与单片机间的串行通信接口技术 ● 学习要求 掌握...

串口通信实验.doc

串口通信实验 - 串口通信实验 一、实验目的 1.掌握 ARM 的串行口工作原理。 2.学习编程实现 ARM 的 UART 通讯。 3.掌握 CPU 利用串口通讯的方法。 二、实验...

rs232串口通信原理.doc

rs232串口通信原理 - rs232 串口通信原理 串口是计算机上一种非常通用

单片机实验报告串行口.doc

单片机实验报告 实验名称: 串行通信实验 姓学班 名...理解单片机串行口的工作原理; 2、 学习使用单片机的...小结与体会通过上课听老师讲解,和自己的操作,理解了...