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


赞助商链接

串口通信实验

(2) 学习单片机串口通信的开发过程; 串口通信实验 ...三、实验原理: 串行通信是将数据字节分成一位一位...图 3-4 串口功能调试 五、实验总结 在本次实验中...

串口通信原理汇总

串口通信原理汇总 - rs232 串口通信原理 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 Universal Serial Bus 或者 USB 混淆)。大多 数计算机包含...

串口通信实验报告

避免多次执行 正确串口输出 8 常熟理工学院课程设计报告 错误串口输出 七、实验小结 通过此次实验,我们了解到单片机的工作原理,以及串口通信的工作方式,加深 了对...

串行通讯原理说明--RS232_UART

串行通讯原理说明--RS232_UART_计算机软件及应用_IT/计算机_专业资料。串行通讯原理说明--RS232,UART 电平等介绍串行通讯:一条信息的各位数据被逐位按顺序传送的通...

与PC机串口通信案例原理与测试说明

“与 PC 机串口通信”案例原理与测试说明 1 程序设计目标及程序运行效果说明 程序设计目标: 本实验实现的是红外单工方简单上下位机串口数据的发送与 接收。单片机...

串口接口原理学习

用于同步通信的数据格式有许多种: ①单同步字符帧结构: +---+---+---+-...学习小结--串口通信原理 11页 免费 微机原理与接口技术第8章... 65页 2...

串口通讯方法的三种实现

计算机和单片机(如 MSC—51)都具有串行通信口,可以设计相 应的串El通信程序,完成二者之间的数据通信任务。 1串口通讯原理 串口通信的原理非常简单,串口按位(bit)...

单片机原理及应用A实验报告-UART串口通信

单片机原理及应用A实验报告-UART串口通信 - UART 串口通信 一、实验目的 1、学习实验系统的基本操作,了解在实验系统中进行程序设计、仿真和调试的操作方法 和步骤;...

PC机串口通信的工作原理_图文

PC机串口通信的工作原理 - PC 机串口通信的工作原理 MCU 资料 2008-08-27 09:03:59 阅读 22 评论 0 字号:大中小 订阅 串口是计算机上一种非常通用设备通信...

RS485串口通信原理

RS485串口通信原理 - RS485 串口通信原理 一、RS485 串口通信电路图 二.VxWorks 中基于 RS485 总线的串口通信协议及实现 摘要:本文介绍了在嵌入式实时操作系统 ...