搜档网
当前位置:搜档网 › ARM9(S3C2440)之三串口UART

ARM9(S3C2440)之三串口UART

ARM9(S3C2440)之三串口UART
ARM9(S3C2440)之三串口UART

三 ARM9(S3C2440)的串口UART——理论知识

转载自:骨Zi里德骄傲

概述

S3C2440A 的通用异步收发器(UART)配有3 个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA 模式的操作。换句话说,UART 可以通过产生中断或DMA 请求来进行CPU 和UART 之间的数据传输。

UART 通过使用系统时钟可以支持最高115.2Kbps 的比特率。如果是外部器件提供UEXTCLK 的UART,则UART可以运行在更高的速度。每个UART 通道包含两个的64 字节的FIFO 给发送和接收。

S3C2440A 的UART 包括了可编程波特率,红外(IR)发送/接收,插入1 个或2 个停止位,5 位、6 位、7 位或8 位的数据宽度以及奇偶校验。

每个UART 包含一个波特率发生器、发送器、接收器和一个控制单元,如图11-1 所示。波特率发生器可以由PCLK、FCLK/n 或UEXTCLK(外部输入时钟)时钟驱动。发送器和接收器包含了64 字节FIFO 和数据移位器。

将数据写入到FIFO 接着在发送前复制到发送移位器中。随后将在发送数据引脚(TxDn)移出数据。与此同时从接收数据引脚(RxDn)移入收到的数据,接着从移位器复制到FIFO。

UART 操作

下述章节描述了UART 的操作,包括了数据发送,数据接收,中断发生,波特率发生,环回(Loopback)模式,红外模式和自动流控制。

数据发送

可编程发送数据帧。由1 个起始位、5 至8 位数据位、1 个可选奇偶校验位以及1 至2 个停止位组成,是由行控制寄存器(ULCONn)指定。发送器也可以产生单帧发送期间强制串行输出为逻辑0 状态的断点状态。此模块在完成发送当前发送字后发送断点信号。在发出断点信号后,其不断发送数据到Tx FIFO(非FIFO 模式情况下Tx保持寄存器)中。

数据接收

与发送类似,接收数据帧也是可编程的。由1 个起始位、5 至8 位数据位、1 个可选奇偶校验位以及1 至2 个停止位组成,是由行控制寄存器(ULCONn)指定。接收器能够检测出溢出(overrun)错误、奇偶校验错误、帧错误和断点状态,每个都可以设置一个错误标志。

–溢出错误表明新数据在读出旧数据前覆盖了旧数据。

–奇偶校验错误表明接收器检测出一个非预期奇偶校验字段。

–帧错误表明接收到的数据没有有效的结束位。

–断点状态表明RxDn 的输入保持为逻辑0 状态的时间长于单帧传输时间。

当其在3 字时间期间(此间隔在字宽位的设置随后)并且在FIFO 模式中Rx FIFO 为非空时不接收任何数据时

发生接收超时状态。

波特率发生

每个UART 的波特率发生器为发送器和接受器提供串行时钟。波特率发生器的源时钟可以选择S3C2440A 的

内部系统时钟或UEXTCLK。换句话说,分频由设置UCONn 的时钟选项选择。波特率时钟是通过16 和由UART

波特率分频寄存器(UBRDIVn)指定的16 位分频系数来分频源时钟(PCLK,FCLK/n 或UEXTCLK)产生的。

UBRDIVn 由下列表达式决定:

UBRDIVn = (int)( UART 时钟 / ( 波特率× 16) ) - 1

(UART 时钟:PCLK,FCLK/n 或UEXTCLK)

当然,UBRDIVn 应该是从1 至(216-1),只有在使用小于PCLK 的UEXTCLK 时设置为0(旁路模式)。

例如,如果波特率为115200 bps 并且UART 时钟为40 MHz,则UBRDIVn 为:UBRDIVn = (int)(40000000 / (115200 x 16) ) - 1

= (int)(21.7) - 1 [取最接近的整数]

= 22 - 1 = 21

UART行控制寄存器:

该寄存器的位6决定是否使用红外模式,位5、位4和位3决定校验方式,位2决定停止位长度,位1和位0决定每帧的数据位数。具体如下:

ULCONn[7] 保留;

ULCONn[6] 红外线模式,0:正常模式;1:红外线模式;

ULCONn[5:3] 校验模式,0xx:无校验;100:奇校验;101:偶校验;ULCONn[2] 停止位,0:一个停止位;1:二个停止位;

ULCONn[1:0] 数据位,00:5位;01:6位;10:7位;11:8位。

UART控制寄存器UCONn

该寄存器决定UART的各种模式。

UCONn[10] 1:ULK做波特率发生器;0:PLK做波特率发生器。

UCONn[9] 1:Tx中断电平触发;0:Tx中断脉冲触发。

CONn[8] 1:Rx中断电平触发;0:Rx中断脉冲触发。

UCONn[7] 1:接收超时中断允许;0:接收超时中断禁止。

UCONn[6} 1:产生接收错误中断;0:不产生接收错误中断。

UCONn[5] l:发送直接传给接收方式(loopback);0:正常模式。

UCONn[4] 1:发送间断信号;0:正常模式发送。

UCONn[3:2] 发送模式选择:

00:禁止发送;

01:中断或查询模式;

10:DMA0请求(UART0 ) , DMA3请求(UART2);

11:DMAl请求(UART1)。

UCONn[1:0] 接收模式选择。

00:禁止接收;

01:中断或查询模式;

10 : DMA0请求UART0,DMA2请求UART2;

11:DMAl请求UART1。

UART FIFO控制寄存器UFCONn

UFCONn[7:6]

00:Tx FIFO寄存器中有0字节就触发中断;

01:Tx FIFO寄存器中有4字节就触发中断;

10:Tx FIFO寄存器中有8字节就触发中断;

11:Tx FIFO寄存器中有12字节就触发中断。

UFCONn[5:4]

00:Rx FIFO寄存器中有4字节就触发中断;

01:Rx FIFO寄存器中有8字节就触发中断;

10:Rx FIFO寄存器中有12字节就触发中断;

11:Rx FIFO寄存器中有16字节就触发中断。

UFCONn[3] 保留。

UFCONn[2] 1: FIFO复位清零Tx FIFO;0 : FIFO复位不清零TxFIFO。UFCONn[1] 1: FIFO复位清零Rx FIFO;0:F1FO复位不清零RxFIFO。UFCONn[0] 1:允许FIFO功能;0:禁止FIFO功能。

UART MODEM控制寄存器UMCONn

UMCONn[7:5] 保留,必须全为0。

UMCONn[4] 1:允许使用AFC模式;0:禁止使用AFC模式。

UMCONn[3] 保留,必须全为0。

UMCONn[0] 1:激活rRTS;0:不激活rRTS。

发送寄存器UTXH和接收寄存器URXH

这两个寄存器存放发送和接收的数据,当然只有1字节(8位数据)。需要注意的是,在发生溢出错误时,接收的数据必须被读出来,否则会引发下次溢出错误。发送和接收状态寄存器UTRSTATn

UTRSTATn发送和接收状态寄存器包括 UTRSTAT0, UTRSTAT1 and UTRSTAT2 UTRSTATn 寄存器各位定义:

UTRSTATn [2]

1=发送器空

UTRSTATn [1] 发送缓冲器空标志

0 =不空;

1 = 空。

UTRSTATn [0] 接收缓冲器有接收数据标志

0 =空;

1 = 接收缓冲器有数据。

原文地址:三 ARM9(S3C2440)的串口UART——程序实例讲解作者:骨Zi里德骄傲

串口通信程序编写步骤

UART通信程序可以采用查询、中断和DMA模式。我们通过使用较多的中断方式来介UART通信程序的编写。简单做法是,UART通信程序的编写参照例子程序。选通道,通过函数Uart_Select();选UART0~UART2;

选波特率和波特率发生器时钟,选波特率通过函数Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)来进行。时钟选UCLK ,rUCON0|=0x400;时钟选PCLK ,rUCON0&=0x3ff。

通信协议(rULCON0)设定,如果正常通信,一位停止位,8位数据位,无奇偶效验: rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);

通信控制字(rUCON0)设定,如时钟选ULK做波特率发生器;Tx中断脉冲触发,Rx中断脉冲触发;接收超时中断允许;产生接收错误中断;正常模式发送:rUCON0|=(TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)| (0<<4)|(1<<2)|(1);

I/O口初始化,因为UART通信使用H口的第二功能,所以H口要上拉

禁止:rGPHUP|=0x1ff。H口控制寄存器nRTS1,nCTS1功能使能,rGPHCON&=0x3c0000,rGPHCON|=0x2faaa;

设中断服务函数入口地址,把中断服务函数入口地址赋函数指针PISR_UARTn, 注意,接收中断服务函数入口地址和发送中断服务函数入口地址是一个,在中断服务函数中根据

UTRSTATn [1]和UTRSTATn [0]状态决定是发送中断还是接收中断。

打开总中断屏蔽和子中断屏蔽等待中断:

rINTMSK=~(BIT_UART0);

rINTSUBMSK=~(BIT_SUB_TXD0);

进入中断后,先屏蔽发送和接收中断,防止新来中断干扰我们的正常发送和接收,正常发送和接收结束后,清中断挂起和中断源挂起寄存器:ClearPending(BIT_UART0),rSUBSRCPND=(BIT_SUB_TXD0(发送),rSUBSRCPND=(BIT_SUB_RXD0|BIT_SUB_ERR0)(接收);

取消中断屏蔽,等下一次中断。

下面是利用查询方式的串口通信程序(FL2440开发板)

#include"2440addr.h"//该程序是PC机通过串口工具向开发板发送1234这四个数字来控制四个LED的亮灭

int TSmain()

{

char buf,i;

rULCON0 &=0XFFFFFF00;

rULCON0 |=0X03; //1位起始位,8位数据位

rUCON0 =0x05;//0X0805; //串口时钟PCLK,查询方式东:PCLK为50M

rUBRDIV0 =325;//0X1A; //波特率115200****325时设置为9600 rGPBCON = 0x1dd7fc;//GPB5,6,8,10设置为输出

rGPBDAT|=0x560;//4个LED全灭

while(1)

{

if(rUTRSTAT0 & 0X01) //接收是否完毕 =1结束

{

buf=rURXH0; //读取数据

while(!(rUTRSTAT0 & 0X04));//是否允许发送 =1允许

rUTXH0=buf;

if(buf=='1')//判断接收到的是哪一个数字

i=1;

else if(buf=='2')

i=2;

else if(buf=='3')

i=3;

else if(buf=='4')

i=4;

switch(i){ //使相应的LED亮灭

case 1:

rGPBDAT^=(1<<5);

i=0;//将i清零防止下次收到其他数据时干扰

break;

case 2:

rGPBDAT^=(1<<6);

i=0;

break;

case 3:

rGPBDAT^=(1<<8);

i=0;

break;

case 4:

rGPBDAT^=(1<<10);

i=0;

break;

default:break;

}

}

}

return 0;

}

下面是利用中断的串口通信程序

#include"2440addr.h"

void __irq UART0RX_isr()

{

char buf,i;

rINTMSK=0xffffffff;

ClearPending(BIT_UART0);

if(rUTRSTAT0 & 0X01) //接收是否完毕 =1结束

{

ClearSubPending(BIT_SUB_RXD0);

buf=rURXH0; //读取数据

while(!(rUTRSTAT0 & 0X04));//是否允许发送 =1允许 rUTXH0=buf;

if(buf=='1')

i=1;

else if(buf=='2')

i=2;

else if(buf=='3')

i=3;

else if(buf=='4')

i=4;

switch(i){

case 1:

rGPBDAT^=(1<<5);

i=0;//将i清零防止下次收到其他数据时干扰

break;

case 2:

rGPBDAT^=(1<<6);

i=0;

break;

case 3:

rGPBDAT^=(1<<8);

i=0;

break;

case 4:

rGPBDAT^=(1<<10);

i=0;

break;

default:break;

}

}

EnableIrq(BIT_UART0);

EnableSubIrq(BIT_SUB_RXD0);

EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7); }

static void __irq Key_ISR()

{

char key;//用来标识是哪一个按键按下

//EnterCritical(&r);

rINTMSK=0xffffffff;

if(rINTPND==BIT_EINT0) {

ClearPending(BIT_EINT0);

key=1;

}

else if(rINTPND==BIT_EINT2) {

ClearPending(BIT_EINT2);

key=2;

}

else if(rINTPND==BIT_EINT3) {

ClearPending(BIT_EINT3);

key=3;

}

else if(rINTPND==BIT_EINT4_7){

rEINTPEND=(1<<4);

ClearPending(BIT_EINT4_7);

key=4;

}

switch(key){

case 1:

rGPBDAT^=(1<<5);

break;

case 2:

rGPBDAT^=(1<<6);

break;

case 3:

rGPBDAT^=(1<<8);

break;

case 4:

rGPBDAT^=(1<<10);

break;

}

//ExitCritical(&r);

EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);

EnableIrq(BIT_UART0);

EnableSubIrq(BIT_SUB_RXD0);

}

int TSmain()

{

rULCON0 &=0XFFFFFF00;

rULCON0 |=0X03; //1位起始位,8位数据位

rUCON0 =0x05;//0X0805; //串口时钟PCLK,查询方式东:PCLK为50M

rUBRDIV0 =325;//0X1A; //波特率115200****325时设置为9600 rGPHUP=0x1ff;//H口上拉禁止

rGPHCON&=0x3c0000;

rGPHCON|=0x2faaa;

rGPBCON = 0x1dd7fc;//GPB5,6,8,10设置为输出

rGPBDAT|=0x560;//4个LED全灭

rGPFCON &=~((3<<0)|(3<<4)|(3<<6)|(3<<8)) ;

rGPFCON |= ((2<<0)|(2<<4)|(2<<6)|(2<<8)) ;//GPF0,GPF2,GPF3,GPF4工作在第二功能状态,即中断

rEINTPEND=(1<<4);

ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);

ClearSubPending(BIT_SUB_RXD0);

ClearPending(BIT_UART0);

pISR_EINT0= pISR_EINT2 =pISR_EINT3 = pISR_EINT4_7=(int)Key_ISR;

EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);

EnableIrq(BIT_UART0);

EnableSubIrq(BIT_SUB_RXD0);

rEINTMASK=~(1<<4);

pISR_UART0=(unsigned) UART0RX_isr;

while(1)

{

}

return 0;

}

cc2530串口UART0通信实验(20200627130016)

/********************* 头文件*************************************************/ #include #include /********************* 宏定义*************************************************/ #define uint unsigned int #define uchar unsigned char // --------------- LED 控制端口------------------------------- // #define GLED P1_0〃绿色LED定义 #define RLED P1_1〃红色LED定义 // --------------- 按键输入端口------------------------------- // #define KEY1 P0_0 /********************* 全局变量**********************************************/ unsigned char Uart0_Rx; unsigned char Text_Data[]=" 海舟物联网教育!\r\n"; /********************* 函数声明***********************************************/ void Delay(uint); void Init_LED(void); void Init_Uart0(void); void Init_Sysclk(void); void Uart0_TX_Data(unsigned char *Data,int len); /****************************************************************************** * 函数名称: void Delay(uint n) * 函数功能: 软件延时函数 * 入口参数: * 出口参数: * 备注: ******************************************************************************/ void Delay(uint n) { uint i; for(i=0;i

UART串口通信设计实例

2.5 UART串口通信设计实例(1) 接下来用刚才采用的方法设计一个典型实例。在一般的嵌入式开发和FPGA设计中,串口UART是使用非常频繁的一种调试手段。下面我们将使用Verilog RTL编程设计一个串口收发模块。这个实例虽然简单,但是在后续的调试开发中,串口使用的次数比较多,这里阐明它的设计方案,不仅仅是为了讲解RTL编程,而且为了后续使用兼容ARM9内核实现嵌入式开发。 串口在一般的台式机上都会有。随着笔记本电脑的使用,一般会采用USB转串口的方案虚拟一个串口供笔记本使用。图2-7为UART串口的结构图。串口具有9个引脚,但是真正连接入FPGA开发板的一般只有两个引脚。这两个引脚是:发送引脚TxD和接收引脚RxD。由于是串行发送数据,因此如果开发板发送数据的话,则要通过TxD线1 bit接着1 bit 发送。在接收时,同样通过RxD引脚1 bit接着1 bit接收。 再看看串口发送/接收的数据格式(见图2-8)。在TxD或RxD这样的单线上,是从一个周期的低电平开始,以一个周期的高电平结束的。它中间包含8个周期的数据位和一个周期针对8位数据的奇偶校验位。每次传送一字节数据,它包含的8位是由低位开始传送,最后一位传送的是第7位。

这个设计有两个目的:一是从串口中接收数据,发送到输出端口。接收的时候是串行的,也就是一个接一个的;但是发送到输出端口时,我们希望是8位放在一起,成为并行状态(见图2-10)。我们知道,串口中出现信号,是没有先兆的。如果出现了串行数据,则如何通知到输出端口呢?我们引入“接收有效”端口。“接收有效”端口在一般情况下都是低电平,一旦有数据到来时,它就变成高电平。下一个模块在得知“接收有效”信号为高电平时,它就明白:新到了一个字节的数据,放在“接收字节”端口里面。

uart串口资料

Application Note Specifications subject to change without notice, contact your sales representatives for the most recent information. UART 功能使用方法 1 適用產品:SM59R16A 2 / SM59R08A2 2 UART 使用概述: 2.1 提供兩組串通訊列埠 (UART0, UART1) 2.2 每一組UART 分別有獨立的緩衝記憶體,且傳送及接收則是共用. UART0 使用S0BUF UART1 使用S1BUF 當執行資料接收時,必須在前一筆資料完成執行工作後,否則會造成資料流失的問題;可由送傳中斷旗標或接收中斷旗標判斷是否完成執行工作的狀態. 2.3 當使用串通訊列埠時,系統時脈來源建議使用外部晶振.由於內部晶振頻率的誤差約為+5%,當 使用串通訊列埠時,系統時脈必須要求晶振頻率的誤差約為+2%. 3 以下說明與UART 相關的特殊控制暫存器及特殊狀態暫存器 Special Function Register (SFR) Mnemonic Description Direct Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 RESE T Serial interface 0 and 1 PCON Power control 87h SMOD MDUF - PMW - - STOP IDLE 00h BRGS Baud rate generator switch D8h BRS - - - - - - - 00h S0CON Serial Port 0 control register 98h SM0 SM1 SM20REN0TB80 RB80 TI0 RI0 00h S0RELL Serial Port 0 reload register low byte AAh S0REL .7 S0REL .6 S0REL .5 S0REL .4 S0REL .3 S0REL .2 S0REL .1 S0REL .0 00h S0RELH Serial Port 0 reload register high byte BAh - - - - - - S0REL .9 S0REL .8 00h S0BUF Serial Port 0 data buffer 99h S0BUF[7:0] 00h S1CON Serial Port 1 control register 9Bh SM - SM21REN1TB81 RB81 TI1 RI1 00h S1RELL Serial Port 1 reload register low byte 9Dh S1REL .7 S1REL .6 S1REL .5 S1REL .4 S1REL .3 S1REL .2 S1REL .1 S1REL .0 00h S1RELH Serial Port 1 reload register high byte BBh - - - - - - S1REL .9 S1REL .8 00h S1BUF Serial Port 1 data buffer 9Ch S1BUF[7:0] 00h

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

实验六串行口通信实验 一、实验内容 实验板上有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的通信控件解决这一问题。 四、实验电路 [参考学习板说明书P27]

实验报告-实验一IAR串口通信

实验报告-实验一IAR串口通信 以下是为大家整理的实验报告-实验一IAR串口通信的相关范文,本文关键词为实验,报告,IAR,串口,通信,实验,平台,使用,串口,通信,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。 实验一平台使用及串口通信 本次实验报告在下课后3天内上交!一、实验目的 (1)了解物联网实验 (2)箱熟悉IAR开发平台

(3)能够读懂原理图中有关传感器的接口电路(4)能够建工程项目并编写程序(5)掌握串口通信 二、实验设备 仿真器1台,gec_cc2530板1块,usb连接线1根。 三、实验内容 使用cc2530通过uART接收控制命令,完成LeD的控制。 四、实验代码 完善红色注释部分代码: #include#include #defineuintunsignedint#defineucharunsignedchar #defineRLeDp1_0#definegLeDp1_1#defineYLeDp1_4 voidinituART0(void); ucharRecdata[3]=%ucharRxTxflag=1; uchartemp; uintdatanumber=0;uintstringlen; /*******************************@brief串口(uART0)初始化******************************/voidinituART0(void){ cLKconcmD//设置系统时钟源为32mhZ晶振while(cLKconsTA//等待晶振稳定 cLKconcmD//设置系统主时钟频率为32mhZpeRcFg=0x00;//位置1p0口p0seL=0x3c;//p0用作串口

串口通信实验报告全版.doc

实验三双机通信实验 一、实验目的 UART 串行通信接口技术应用 二、实验实现的功能 用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。 三、系统硬件设计 (1)单片机的最小系统部分 (2)电源部分 (3)人机界面部分

数码管部分按键部分 (4)串口通信部分 四、系统软件设计 #include #define uchar unsigned char #define uint unsigned int void send(); uchar code0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的数码管显示 sbit H1=P3^6; sbit H2=P3^7;

sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7; uint m=0,i=0,j; uchar temp,prt; /***y延时函数***/ void delay(uint k) { uint i,j; //定义局部变量ij for(i=0;i

{ m=1; //KEY1键按下 return(m); } if(H2==0) { m=4; //KEY4键按下 return(m); } } } if(L2==0) { delay(5); if (L2==0) { L2=0;H1=1;H2=1; if(H1==0) { m=2; //KEY2键按下 return(m); } if(H2==0) { m=5; //KEY5键按下 return(m); } } } if(L3==0) { delay(5); if (L3==0) { L3=0;H1=1;H2=1; if(H1==0) { m=3; //KEY3键按下

dsp实验-UART串口通信实验

实验八、UART串口通信实验 一、实验目的 1. 了解RS232通信接口的基本原理; 2. 熟悉通信接口芯片(TL16C550C)在DSP I/O空间寄存器的地址映射 及工作原理; 3.了解异步通信中串口模式选择、设置数据传输格式、设置波特率、建立连接、传输数据和断开连接等功能。 二、实验设备 1. 集成开发环境CCS 2. 实验开发板TMS320VC5402DSK、RS232接口电缆线及附件 3.程序“串口调试程序v2.2.exe” 三、实验内容及步骤 实验操作流程参照前面实验。 1 在汇编环境调试Uart:(实现字符或文件的发送和回发功能) a. 实验代码main.s54、uartasm.cmd和uart_init.s54、dsp_init.s54 以及uartasm.h54,c5402_dsk.gel(说明同前)。 b. 串口调试程序“串口调试程序v2.2.exe” , 汇编调试中Build option设置情况与CODEC实验中的汇编调试设置及出错情况相同。 c. 程序文件介绍: 1)“uart.h54”定义了一些寄存器的地址以及函数类型。 2)“dsp_init.s54”与dsp工作有关的寄存器ST1、PMST、IMR、IFR和SWWSR,并且清除INTM位以及设定时钟模式。 3)“uart_init.s54”先检测UART模块是否工作正常,然后设定UART模块的寄存器,如CNTL1、CNTL2、LCR、MSB&LSB(设定波特率)、FCR、IER 等。 4)“main.s54”主程序查看标志位,检测是否UART存在有效接收数据。若有,则执行一定的处理,包括亮LED以及将接收的数据从UART回发。 d. 执行程序时,只要发送数据时,可在串口调试程序的接收窗口立即看到回发的数据。 e. 程序中UART工作参数设置如下: 1)波特率9600(或更低)、无数据校验、字符长度8比特、停止位1、

UART串口通信实验报告

实验四 UART 串口通信 学院:研究生院 学号:1400030034 姓名:张秋明 一、 实验目的及要求 设计一个UART 串口通信协议,实现“串 <-->并”转换功能的电路,也就是 “通用异步收发器”。 二、 实验原理 UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实 现全双工传输和接收。在嵌入式设计中,UART 用来主机与辅助设备通信,如汽 车音响与外接AP 之间的通信,与PC 机通信包括与监控调试器和其它器件,如 EEPROM 通信。 UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一 位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑” 0的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是 4、5、6、7、8等,构成 一个字符。通常采用ASCII 码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“ 1的位数应为偶数(偶校验)或奇数 (奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是 1位、1.5位、2位的高电 平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能 在通信中两台设备间出现了小小的不同步。 因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步 的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“ 1状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol )。 一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为 120 字符/秒,传输使用256阶符号,每个符号代表8bit ,则波特率就是120baud,比 特率是120*8=960bit/s 。这两者的概念很容易搞错。 三、 实现程序 library ieee; use ieee.std 」o gic_1164.all; end uart; architecture behav of uart is en tity uart is port(clk : in std_logic; rst_n: in std 」o gic --系统时钟 --复位信号 rs232_rx: in std 」o gic rs232_tx: out std 」o gic --RS232接收数据信号; --RS232发送数据信号;); use ieee.std_logic_ un sig ned.all;

UART串行口简介

UART异步串行口 UART异步串行口简介 数据通信的基本方式可分为并行通信与串行通信两种: 并行通信:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。 串行通信:是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。 UART 异步串行口的传输格式 异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然 而在同一个字符中的两个相邻位代码间的时间间隔是固定的。 通信协议(通信规程):是指通信双方约定的一些规则。在使用异步串口传送一个 字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。通讯时序图如下: 开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为 起始位,然后出现在通信线上的是字符的二进制编码数据。 每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇 数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。 最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位 的时间宽度。 至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。 每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特 率为110,150,300,600,1200,2400,4800,9600 ,19200,38400,115200等。 S3C2410的异步串行口 1

UART串口初始化函数

UART串口初始化函数.txt每个女孩都曾是无泪的天使,当遇到自己喜欢的男孩时,便会流泪一一,于是坠落凡间变为女孩,所以,男孩一定不要辜负女孩,因为女孩为你放弃整个天堂。朋友,别哭,今夜我如昙花绽放在最美的瞬间凋谢,你的泪水也无法挽回我的枯萎~~~/**************************************************************************** ***************** 函数名:UART串口初始化函数 调用:UART_init(); 参数:无 返回值:无 结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用) 备注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ] /******************************************************************************* ***************/ void UART_init (void){ EA = 1; //允许总中断(如不使用中断,可用//屏蔽) ES = 1; //允许UART串口的中断 TMOD = 0x20; //定时器T/C1工作方式2 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)TH1 = 0xF3; //定时器初值高8位设置 TL1 = 0xF3; //定时器初值低8位设置 PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400) TR1 = 1; //定时器启动 } /******************************************************************************* ***************/ /******************************************************************************* ************** 函数名:UART串口初始化函数 调用:UART_init(); 参数:无 返回值:无 结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用) 备注:振荡晶体为11.0592MHz,PC串口端设置 [ 19200,8,无,1,无 ] /******************************************************************************* ***************/ void UART_init (void){ EA = 1; //允许总中断(如不使用中断,可用//屏蔽) ES = 1; //允许UART串口的中断 TMOD = 0x20; //定时器T/C1工作方式2 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)

UART串口通信实验报告

实验四UART串口通信 学院:研究生院学号:1400030034姓名:张秋明 一、实验目的及要求 设计一个UART串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。 二、实验原理 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。 UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。 三、实现程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart is port(clk : in std_logic; --系统时钟 rst_n: in std_logic; --复位信号 rs232_rx: in std_logic; --RS232接收数据信号; rs232_tx: out std_logic --RS232发送数据信号;); end uart; architecture behav of uart is

SPI、I2C、UART三种串行总线的原理、区别及应用

简单描述: SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些很薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C 是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存这两种线属于低速传输; 而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。这样的通信可以做长距离的。UART和,UART就是我们指的串口,速度比上面三者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡; SmBus有点类似于USB设备跟计算机那样的短距离通信。 简单的狭义的说SPI和I2C是做在电路板上的。而UART和SMBUS是在机器外面连接两个机器的。 详细描述: 1、UART(TX,RX)就是两线,一根发送一根接收,可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。在多机通信上面用的最多。 2、SPI(CLK,I/O,O,CS)接口和上面UART相比,多了一条同步时钟线,上面UART 的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。 3、I2C(SCL,SDA)接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。一般单片机系统里主要用来和24C02等小容易存储器连接。 SPI:高速同步串行口。3~4线接口,收发独立、可同步进行 UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢 SPI:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了

ARM串口实验报告.

《 APM串口实验》 实验报告 课程名称:嵌入式微处理器技术 班级:电信 0901 姓名: 地点:嵌入式系统基础实训室 指导教师:王瑾 ARM的串行口实验 一、实验目的 ◆ 1.掌握ARM 的串行口工作原理。 ◆ 2.学习编程实现ARM 的UART 通讯。 ◆ 3.掌握CPU 利用串口通讯的方法。 二、实验内容 学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART 相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。编程实现ARM 和计算机实现串行通讯: ARM 监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的),即按PC 键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PC,在 超级终端上显示。 三、预备知识 1、1.用ARM SDT 2.5或ADS1.2 集成开发环境,编写和调试程序的基本过程。 2、2.ARM 应用程序的框架结构。

3、3.了解串行总线 四、实验设备及工具 硬件:ARM嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC机Pentium100 以上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP 、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 五、实验原理及说明 1.异步串行I/O 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步,字符和字符间还可能有长度不定的空闲时间,因此效率较低。 图2-1 串行通信字符格式 图2-1 给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0” 作为起始位,然后出现在通信线上的是字符的二进 制编码数据。每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1” 信号,这个停止位可以约定持续1 位、1.5位或2 位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。 每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,

实验四 UART串口通信实验报告

实验四UART串口通信 一、实验目的及要求 设计一个UART串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。 二、实验原理 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。 UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是1位、1.5

位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。 三、实现程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart is port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号 rs232_rx: in std_logic; --RS232接收

UART串口编程

UART串口编程 首先明确一点:我们学习的串口是异步串口。在传输时,他们各自有各自的时钟。就是我们说的波特率。 我们学习的RS232与UART的区别是,UART使用标准的TTL/COMS电平进过一个芯片使它的高低电平从TTL中0与3.3V 变成了低电平5v到15v 高电平-3v到-12v。 首先说一下串口的数据帧格式。它由一个开始位,数据位,校验位和停止位组成。 平时数据处于1状态。 当要开始发送时,从UART改变TxD数据变成0状态1个位的时间,在接受端到0之后的1.5位的时间,接收端开始接受数据。 数据位分为5,6,7,8。四种类型的数据位。之后就是校验位站1位,可以设置也可以不设置。最后的是停止位。可以是1位,1.5位,2位。这个是高电平1。 UART可以用中断或DMA来工作。它有3个单独的通道。它由4部分组成,发送器,接收器,波特率发生器,控制逻辑组成。 这些部分的设置都是通过寄存器来实现的。

发送的过程是这样的,UART只能通过shifter一位一位的来发数据。它先把要发的数据放到它的缓存FIFO里,当然缓存也可以取消。然后放入shifter里面来发出去。接受也是一样的。通过缓存来接受,然后再通过接受的shifter来接。 具体继电器的设置主要由以下几个: ULCON 逻辑数据桢格式控制器 UCON 串口的控制继电器 UFCON FIFO控制寄存器 UMCON 串口MODEN控制器(可以控制AFC 自动流控制) 以下是状态寄存器,用来确定状态的,比如说shifter发送器的状态,接收器的状态。 UTRSTAT 接受发送控制器 UERSTAT 错误状态寄存器 UFSTAT FIFO状态寄存器 最后一个单独的设置寄存器,它用来设置波特率 UBRDIV 波特率发生器 以下来写个简单的串口例子。 它不使用FIFO 中断而直接用shifter收发,采用轮询的方式来检测数据是否发送或被接受。然后通过minicom向开发板发送1表示亮灯,发送2表示熄灯。 文件总共是7个一个crt0.smain.caddr.huart.huart.cuart.ldsmakefile crt0.s 是关闭watchdog 并跳转到mian 之后用个deadloop。 .text .globl _start _start: ldr r0, =0x53000000 @ WATCHDOG close mov r1, #0x0 str r1,[r0]

UART实验报告

实验四 uart串口通信学院:研究生院学号:1400030034 姓名:张秋明 一、实验目的及要求 设计一个uart串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用 异步收发器”。 二、实验原理 uart是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输 和接收。在嵌入式设计中,uart用来主机与辅助设备通信,如汽车音响与外接ap之间的通 信,与pc机通信包括与监控调试器和其它器件,如eeprom通信。 uart作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传 输。 其中各位的意义如下: 起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。 通常采用ascii码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验), 以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数 据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现 了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机 会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代 表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256 阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的 概念很容易搞错。 三、实现程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart is port(clk : in std_logic; --系统时钟 rst_n: in std_logic; --复位信号 rs232_rx: in std_logic; --rs232接收数据信号; rs232_tx: out std_logic --rs232发送数据信号;); end uart; architecture behav of uart is rs232_rx: in std_logic; --rs232接收数据信号 clk_bps: in std_logic; --此时clk_bps的高电平为接收数据的采样点 bps_start:out std_logic; --接收到数据后,波特率时钟启动置位 rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个 数据来到 rx_int: out std_logic --接收数据中断信号,接收数据期间 时钟为高电平,传送给串口发送); bps_start:in std_logic --接收数据后,波特率时钟启动信号置位);

RAM实验报告

ARM的串行口实验 姓名: 学号: 班级: 2010年10月13号 目录

一、实验目的 (3) 二、实验内容 (3) 三、预备知识 (3) 四、实验设备及工具 (3) 五、实验原理及说明 (4) 六、实验步骤 (4) 七、思考题 (5) 1.232串行通讯的数据格式是什么? (5) 2.串行通讯最少需要几根线,分别如何连接? (6) 3.ARM的串行口有几个,相应的寄存器是什么? (6)

一、实验目的 1.掌握ARM的串行口工作原理。 2.学习编程实现ARM的UART通讯。 3.掌握CPU利用串口通讯的方法。 二、实验内容 学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯: ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。 三、预备知识 1、用EWARM集成开发环境,编写和调试程序的基本过程。 2、ARM应用程序的框架结构。 3、了解串行总线 四、实验设备及工具 硬件:ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG仿真器、串口线。

软件:PC机操作系统Win2000或WinXP、EWARM集成开发环境、仿真器驱动程序、超级终端通讯程序。 五、实验原理及说明 异步串行I/O 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。 六、实验步骤 1.编写串口驱动函数 2.在主函数中实现将从串口0接收到的数据发送到串口0(Main.c): 3. 启动H-JTAG 仿真器并进行初始化配置。 4. 启动EWARM新建工程,将“Exp1 ARM串口实验”中的文件添加到工程中并调试运行。

单片机实验报告串行口

单片机实验报告 实验名称:串行通信实验 姓名:魏冶 学号:090402105 班级:光电一班 实验时间:2011-11-29 南京理工大学紫金学院电光系

一、实验目的 1、理解单片机串行口的工作原理; 2、学习使用单片机的TXD、RXD口; 3、了解MAX232芯片的使用。 二、实验原理 MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。它有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。 要发送的字节数据直接写入发送缓冲器,SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行接口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号做接收或发送移位寄存器的移位时钟。TI和RI分别发送完数据和接收完数据的中断标志,用来向CPU发中断请求。 三、实验内容 1、学会DPFlash软件的操作与使用,以及内部内嵌的一个串口调试软件的使用。 2、用串口连接PC机和DP-51PROC单片机综合仿真实验仪。 3、编写一个程序,利用单片机的串行口发送0x55,波特率为9600。 程序设计流程图

4、程序下载运行后,可在PC机上的串口调试软件上(内嵌在DPFlash软件的串口调 试器,设置通信口为COM1口,波特率为9600,数据位8,停止位1)看到接收到“UUUUUU……”,出现这样的结果就基本达到要求。 (1)代码: #include void main() { long int i; SCON=0x40; PCON=0; TMOD=0x20; TH1=0xfd; TL1=0xfd; TI=1; TR1=1; star:for(i=0;i<5000;i++); SBUF=0x55; goto star; } (2)电路图; 5、在单片机接收到0x55时返回一个0x41,在PC机一端,以接收到0x41完成,波特率2400。

相关主题