实验四 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 --接收数据后,波特率时钟启动信号置位);
bps_start:out std_logic; --接收到数据后,波特率时钟启动置位
rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个
数据来到
rx_int: in std_logic --接收数据中断信号,接收数据期间时钟
为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避
免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块
就已经将不正确的数据传输出去); signal bps_start_1:std_logic; signal bps_start_2:std_logic; signal clk_bps_1:std_logic; signal clk_bps_2:std_logic; signal rx_data:std_logic_vector(7 downto 0); signal rx_int:std_logic; begin
rx_top: uart_rx port map(clk=>clk, rst_n=>rst_n,
rs232_rx=>rs232_rx,
clk_bps=>clk_bps_1,
bps_start=>bps_start_1, rx_data=>rx_data,
rx_int=>rx_int
); speed_top_rx: speed_select port map(clk=>clk, rst_n=>rst_n,
clk_bps=>clk_bps_1,
bps_start=>bps_start_1
); tx_top:uart_tx port map(clk=>clk, --系统时钟
rst_n=>rst_n, --复位信号 rs232_tx=>rs232_tx,
--rs232发送数据信号 clk_bps=>clk_bps_2, --此时clk_bps的
高电平为发送数据的采样点
bps_start=>bps_start_2, --接收到数据后,波特率时钟启动置位
rx_data=>rx_data, --接收数据寄存器,保存直至下一个数据来到
rx_int=>rx_int --接收数据中断信号,接收数据期间时钟为
高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免
了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就
已经将不正确的数据传输出去);
speed_top_tx: speed_select port map(clk=>clk, rst_n=>rst_n,
clk_bps=>clk_bps_2,
bps_start=>bps_start_2
); end behav;
--------------------------------------------------------------------------------
------
---------------------------------3个子模块
--------------------------------------------- ---------------------------------异步接收模块
------------------------------------------- library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity uart_rx is
port(clk : in std_logic; --系统时钟
rst_n: in std_logic; --复位信号
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 --接收数据中断信号,接收数据期间
时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,
避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模
块就已经将不正确的数据传输出去); end uart_rx; architecture behav of uart_rx is signal rs232_rx0: std_logic; signal rs232_rx1: std_logic; signal rs232_rx2: std_logic; signal rs232_rx3: std_logic; signal neg_rs232_rx:std_logic; signal bps_start_r:std_logic; signal num:integer;
signal rx_data_r:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存
直至下一个数据到来
begin process(clk,rst_n)
begin
if (rst_n=0)then
rs232_rx0<=0;
rs232_rx1<=0;
rs232_rx2<=0;
rs232_rx3<=0;
else
if (rising_edge(clk)) then rs232_rx0<=rs232_rx; rs232_rx1<=rs232_rx0;
rs232_rx2<=rs232_rx1;
rs232_rx3<=rs232_rx2;
end if;
end if;
neg_rs232_rx <=rs232_rx3 and rs232_rx2 and not(rs232_rx1)and not(rs232_rx0); end process; process(clk,rst_n)
begin
if (rst_n=0)then
bps_start_r<=0;
rx_int<=0;
else
if (rising_edge(clk)) then if(neg_rs232_rx=1) then --接收到串口数据线rs232_rx的下降沿标志信号
bps_start_r<=1; --启动串口准备数据接收
rx_int<=1; --接收数据中断信号使能
else if((num= 15) and (clk_bps=1)) then --接收完有用数据信息
bps_start_r<=0; --数据接收完毕,释放波特率启动信号
rx_int<=0; --接收数据中断信号关闭
end if;
end if;
end if;
end if;
bps_start<=bps_start_r; end process; process(clk,rst_n)
begin
if (rst_n=0)then
rx_data_r<=00000000;
rx_data<=00000000;
num<=0;
else
if (rising_edge(clk)) then if(clk_bps=1)then
num<=num+1;
case num is篇二:arm uart实验报告
题目:
一. 实验目的
通过实验,掌握uart查询1方式程序的设计
二. 实验设备
? 硬件:pc 机一台
? lpc2131教学实验开发平台一套
? 软件:windows98/xp/2000 系统,ads 1.2 集成开发环境。 ? easyarm工具软件。
三.实验内容
四.实验步骤
启动ads 1.2,使用arm executable image for lpc2131工程模板建立一个工程dataret_c。
②在user 组中的main.c 中编写主程序代码,在项目中的config.h 文件中加入
#include <stdio.h>。
③选用debuginram生成目标,然后编译连接工程。
④将easyarm2131开发板上的jp6跳线分别选择txd0和rxd0端时,方可进行uart0
通信实验。
⑥选择【project】->【debug】,启动axd进行jtag仿真调试。⑦全速运行程序,
在pc 机上的easyarm软件发送如“hello easyarm2131!”字样的字符串,easyarm2131开发
板接收到数据后,并将接收到的数据回发给pc机
五.程序 #include “config.h”
#define uart_bps 115200
/**************************************************************************** * 名称:delayns()
* 功能:长软件延时
* 入口参数:dly
* 出口参数:无
****************************************************************************/ void delayns(uint32 dly) {
uint32 i;
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
/*******************************************************************************
**
**函数名称:uart0_init()
**函数功能:串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200 **入口参数:无
**出口参数:无
********************************************************************************
*/
void uart0_init(void)
{ } u0lcr = 0x83; u0dlm = fdiv / 256; u0dll = fdiv % 256; u0lcr = 0x03; //dlab
= 1,允许设置波特率 //设置波特率 fdiv = ( fpclk / 16 ) / uart_bps; uint16 fdiv; 延
时参数,值越大,延时越久 //串口通信波特率
/*******************************************************************************
**
**函数名称:uart0_getbyte()
**函数功能:从串口接收1字节数据,使用查询方式接收
**入口参数:无
**出口参数:接收到的数据
**********************************************************************/ uint8 uart0_getbyte(void)
{ }
/*******************************************************************************
**
**函数名称:uart0_getstr() **函数功能:从串口接收
**入口参数:s
n
**出口参数:无
**********************************************************************/ void uart0_getstr(uint8 *s, uint32 n) { }
/*******************************************************************************
**
**函数名称:uart0_sendbyte() **函数功能:向串口发送字节数据
**入口参数:dat
**出口参数:无
**********************************************************************/ void uart0_sendbyte(uint8 dat) { }
/*******************************************************************************
**
**函数名称:uart0_sendstr() **函数功能:向串口发送一字符串
**入口参数:str 要发送的字符串的指针 u0thr = dat; //写入数据 //等待数据发送
完毕 while((u0lsr & 0x40 ) == 0); 要发送的数据 for( ; n > 0; n-- ) *s++ =
uart0_getbyte(); 指向接收数据数组的指针接收的个数 uint8 rcv_dat; while((u0lsr %
0x01) == 0); rcv_dat = u0rbr; return (rcv_dat); //等待接收标志置位
**出口参数:无
**********************************************************************/ void uart0_sendstr(uint8 const *str) { }
/**************************************************************************** * 名称:main()
* 功能:从串口uart0接收字符串“hello easyarm2131!”,并发送回上位机显示
* 说明:需要pc串口显示终端软件,如easyarm.exe。
****************************************************************************/ int main(void)
{
uint8 snd[32];
pinsel0 = 0x00000005; } while(1); return(0); uart0_init(); uart0_getstr(snd, 18); delayns(10);
uart0_sendstr(snd); delayns(10); //向串口发送字符串 //从串口接收字符串 // 设
置i/o连接到uart0 //串口初始化 while(1) { } if( *str == ?\0? ) break; //
遇到结束符,退出 uart0_sendbyte(*str++); //发送数据
六.实验心得体会
通过本次实验对lpc2131的uart有了进一步的认识和了解,在使用ads 的编程过程中
对j-tag调试中出现的一些错误积累了一些经验,对于串口编程和通信的实践操作有了很大
的提高,总之实验使我收获很大,感谢学校给我这样的实验环境!篇三:uart实验报告
嵌入式实验四实验报告
3.4基于uart的加法器的实现
一、实验目的
学习lm3s9b92的串口通信
学习应用超级终端调试串口
学会应用uart有关的库函数
二、实验设备
计算机、lm3s9b92开发板、usb a型公口转 mini b型 5pin 数据线1 条
三、实验原理
stellaris系列arm的uart具有完全可编程、16c550型串行接口的特性。stellaris系
列arm含有2至3个uart模块。
四、实验要求
采用超级终端作为外部输入与输出的接口,实现多位数的相加。即通过uart串口分别输
入需要相加的多位数a与b,最后把a和b两个多位数相加的过程和结果,回显给用户。具
体实现方法:既可以采用轮询的方式也可以应用中断。
五、实验步骤
1、连接实验设备:使用usb mini b线缆的mini端与开发板icdi口相连,另一端接到
pc机的usb插口上。
2、根据实验要求编写、调试、运行程序。并要求在代码上附上相关的注释。
#include <string.h>
#include inc/hw_ints.h
#include inc/hw_memmap.h
#include inc/hw_types.h
#include driverlib/debug.h #include driverlib/gpio.h
#include driverlib/interrupt.h #include driverlib/sysctl.h #include driverlib/uart.h
#include grlib/grlib.h
#include drivers/kitronix320x240x16_ssd2119_8bit.h #include drivers/set_pinout.h #include systeminit.h void uartinit(void)
{
sysctlperienable(sysctl_periph_uart0); // 使能uart模块
sysctlperienable(sysctl_periph_gpioa); // 使能rx/tx所在的gpio端口
gpiopintypeuart(gpio_porta_base, // 配置rx/tx所在管脚为
gpio_pin_0 | gpio_pin_1); // uart收发功能
uartconfigset(uart0_base, // 配置uart端口
9600, // 波特率:9600
uart_config_wlen_8| // 数据位:8 uart_config_stop_one | // 停止位:1 uart_config_par_none); // 校验位:无
uartenable(uart0_base); // 使能uart端口
} void uartputs(const char *s) {
while (*s != \0)
{
uartcharput(uart0_base, *(s++)); }
} main(void)
{
char c,a[12]; int sum=0,num=0,i;
// jtagwait( ); // 防止 jtag 失效,重要!
clockinit( ); // 时钟初始化:晶振, 6mhz uartinit( ); // uart 初始化
uartputs(输入格式 m+n=\n); for (;;)
{
c = uartcharget(uart0_base); // 等待接收字符
if(c>=0&&c<=9) //判断收到的是否为字符 { num=num*10+c-0; //将收到的字符转换为整形储存 } else if(c==+){ //接收第二个数 sum=sum+num; num=0;
}
else if(c===) //输出
{
sum=sum+num;
num=0;
for(i=0;sum!=0;i++)
{
a[i]=sum%10;
sum=(sum-a[i])/10;
}
for(i--;i>=0;i--){
uartcharput(uart0_base, a[i]+0); } uartcharput(uart0_base, \n); } if (c == \r) // 如果遇到回车<cr> {
uartcharput(uart0_base, \n); // 多回显一个换行<lf> } } }
3、书写实验报告,要求附上程序流程图。
六、实验心得
比较轮询方式与中断方式
篇四:uart串口通信实验报告
串口通信实验报告
基本实验:16位的乘法器
设计思想:乘法器根据以往学过数电的设计经验,应该是移位相加的方法,设被乘数为
[15:0]a,乘数为[15:0]b,则从b的最高位开始算起,c初值为0,为b最高位为1,则c就
等于c+a;接下来,若b的次高位为1,则c左移一位加a,若为0则c左移一位就可以了,
这样的步骤做到b的最低位那么c的值就是a*b,当然最好c是中间寄存器,这样结果才不
会出现中间值。
实验的源码:
module muti(clk,rst,ready,a,b,c); input clk;
input rst;
input [15:0]a;
input [15:0]b;
output [31:0]c;
output ready;
reg [31:0]c;
reg ready;
reg [31:0]temp;
reg [5:0]n;
always @(posedge clk or posedge rst) begin
if(rst)
begin
c<=0;
ready<=1;
temp<=0;
n<=32;
end
else
if(ready)
begin
temp<=0;
n<=32;
ready<=0;
end
else
if(n)
begin
if(b[n-1])
begin
temp<=(temp<<1)+a; n<=n-1;
end else
begin
temp<=temp<<1;
n<=n-1;
end
end
else
begin
c<=temp;
n<=32;
ready<=1;
end
end
endmodul 测试代码:
`timescale 1ns/1ns
module tb;
reg clk;
reg [15:0]a;
reg [15:0]b;
reg rst;
wire ready;
wire [31:0]c; always #10 clk=~clk;
initial
begin
rst<=1;
clk<=0;
a=0;
b=0;
#10 rst=0;
#21 a=21;b=32;
#650 a=3;b=4;
#700 $stop;
end
muti muti_unit(
.a(a),
.b(b),
.rst(rst),
.clk(clk),
.ready(ready),
.c(c));
endmodule 仿真结果:
这边a被乘数,b是乘数,当rst为高时,则将c置0,ready置一,ready信号为高表
示此时空闲可以计算,rst为低时则开始计算,21*32为672,3*4为12,在乘法操作时,ready
信号为低电平表示在工作中不能再输入进行计算,当计算结束则变为高电平。乘法功能得以
实现。
进阶实验:串口通信实验
基本要求:了解uart 串口通信协议
设计思想:主要是分成3个模块,一个是波特率产生模块,一个是发送模块,一个是接
收模块,波特率产生模块产生一个9600hz的采样脉冲,由于开发板上的固有频率为50mhz,
所以我需要分频为50000000/9600=5208.3,即从0记到5207,当记到2503时产生一个时钟周
期的高电平即可。发送模块受到接受模块的控制,接收模块的输出rxd连发送的txd,rxd
为高表示正在接收不能发送数据,发送时采用并转串发送,接收时为串转并接收。实验代码:
1. top文件
module top(f50m,rst,datain,dataout,seg); input f50m;/////50mhz的时钟信号
input rst;///////////////复位信号
input [7:0]datain;///////////输入数据
output [7:0]dataout;////////////////输出数据
output [3:0]seg;/////////////////板子上面选一个led wire bps_start1;/////////////////当正在发送时为高电平
wire bps_start2;///////////////正在接收时为高电平
wire caiyang1;//////////////////////采样的波特率信号
wire caiyang2;
wire rxd_txd;
wire dataout;
wire rx232_tx;///////////////////////中间的串行通信线
brate1 brate1(
.f50m(f50m),
.rst(rst),
.bps_start1(bps_start1), .caiyang1(caiyang1) );
brate2 brate2(
.f50m(f50m),
.rst(rst),
.bps_start2(bps_start2),
.caiyang2(caiyang2)
);
rev rev_u(
.f50m(f50m),
.rx232_tx(rx232_tx),
.rst(rst),
.caiyang2(caiyang2),
.rxd(rxd_txd),
.dataout(dataout),
.bps_start2(bps_start2)
);
send send_u(
.f50m(f50m),
.datain(datain),
.rst(rst),
.caiyang1(caiyang1),
.txd(rxd_txd),
.bps_start1(bps_start1),
.rx232_tx(rx232_tx)
);
seg seg_u(.f50m(f50m),
.seg(seg));
endmodule 波特率产生模块:
a.发送波特率产生模块:
module brate1( f50m,rst,bps_start1,caiyang1); input f50m;
input rst;
input bps_start1; output caiyang1; reg [12:0]n;//50mhz/9600hz=5208,n count reg caiyang1;//a 9600 bound rate sign always @(posedge f50m or negedge rst) begin
if(!rst)
begin 0 to 5207 n<=0;
caiyang1<=0;
end
else
if((n==5207) || !bps_start1) ////////////如果记满5207或者发送数据结束就将
caiyang2清0 begin
n<=0;
caiyang1<=0;
end
else
if(n==2603)//////////////////////////////计数满2603就产生一个时钟周期的高电
平 begin
n<=n+1;
caiyang1<=1;
end
else
begin
n<=n+1;
caiyang1<=0;
end
end
endmodule
b.接收波特率产生模块
module brate2( f50m,rst,bps_start2,caiyang2); input f50m;
input rst;
input bps_start2; output caiyang2; reg [12:0]n;//50mhz/9600hz=5208,n count 0 to 5207 reg caiyang2;//a 9600 bound rate sign always @(posedge f50m or negedge rst) begin
if(!rst)
begin
n<=0;
caiyang2<=0;
end
else
if((n==5207) || !bps_start2)////////////如果记满5207或者发送数据结束就将
caiyang2清0 begin
n<=0;篇五:实验报告3_uart 电子科技大学中山学院学生实验报告
(1)根据提供代码1,将uart0初始化为通讯波特率9600,8位数据位,1位停止位,偶校验。请给出这一部分初始化代码。
(2)根据提供代码2,如果需要每接收到一个字节数据就产生接收中断,应如何设计程序?请给出重点实现代码。
二、提高实验
(3)请设计一个简单远程控制系统,当pc发送’a’、‘1’时,led闪一下; 发送’a’、‘2’时led闪两下。你认为这里’a’可以起什么作用,不要可以吗?请说明理由。
‘a’起同步、抗干扰作用。干扰难产生‘a’的信号而容易产生‘1’的信号。当所接受的第一个字符为‘a’时,基于这个条件下,再继续判断第二个字符可以减小因干扰而产生的影响。
RS232串口通信实验报告 学院:电子信息学院 班级:08031102 姓名:张泽宇康启萌余建军 学号:2011301966 2011301950 2011301961 时间:2014年11月13日 学校:西北工业大学
一.实验题目: 设计一个简单的基于串口通信的信息发送和接受界面 二.实验目的: 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_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class 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
实验三双机通信实验 一、实验目的 UART 串行通信接口技术应用 二、实验实现的功能 用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。 三、系统硬件设计 (1)单片机的最小系统部分 (2)电源部分 (3)人机界面部分
数码管部分按键部分 (4)串口通信部分 四、系统软件设计 #include
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键按下 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 串口通信 学院:研究生院 学号: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; 实验六串行口通信实验 一、实验内容 实验板上有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] 实验四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 实验报告-实验一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用作串口 实验十单片机串行口与PC机通讯实验报告 ㈠实验目的 1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制; 2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议; 3.了解PC机通讯的基本要求。 ㈡实验器材 1.G6W仿真器一台 2.MCS—51实验板一台 3.PC机一台 ㈢实验内容及要求 利用8051单片机串行口,实现与PC机通讯。 本实验实现以下功能,将从实验板键盘上键入的字符或数字显示到PC 机显示器上,再将PC机所接收的字符发送回单片机,并在实验板的LED上显示出来。 ㈣实验步骤 1.编写单片机发送和接收程序,并进行汇编调试。 2.运行PC机通讯软件“commtest.exe”,将单片机和PC机的波特率均设定 为1200。 3.运行单片机发送程序,按下不同按键(每个按键都定义成不同的字符), 检查PC机所接收的字符是否与发送的字符相同。 4.将PC机所接收的字符发送给单片机,与此同时运行单片机接受程序,检 查实验板LED数码管所显示的字符是否与PC机发送的字符相同。 ㈤ 实验框图 源程序代码: ORG 0000H AJMP START ORG 0023H AJMP SERVE ORG 0050H START: MOV 41H,#0H ;对几个存放地址进行初始化 MOV 42H,#0H MOV 43H,#0H MOV 44H,#0H MOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示 MOV TMOD,#20H ;设置为定时器0,模式选用2 MOV TL1, #0E6H ;设置1200的波特率 MOV TH1, #0E6H SETB TR1 ;开定时器 MOV SCON,#50H ;选用方式1,允许接收控制 SETB ES SETB EA ;开中断 LOOP: ACALL SOUT ;键盘扫描并发送,等待中断 SJMP LOOP SERVE JNB RI,SEND ;判断是发送中断还是接收中断,若为发送中 断则调用 ACALL S IN ;发送子程序,否则调用接收子程序 RETI SEND: CLR TI ;发送子程序 RETI SIN: CLR RI ;接受子程序 MOV SCON, #00H MOV A, SBUF ;接收数据 LCALL XS ;调用显示子程序 RETI 子程序: SOUT: CLR TI ;清发送中断标志位 LCALL KEY ;调用判断按键是否按下子程序 MOV A,R0 ;将按键对应的数字存入A MOV SBUF,A ;输出按键数字给锁存 RET KEY: MOV P1,#0FFH ;将P1设置为输入口 MOV A, P1 CPL A ;将A内值取反 串行通信实验报告 班级姓名学号日期 一、实验目的: 1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。 2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。 3、学习串口通讯的程序编写方法。 二、实验要求 1.单机自发自收实验:实现自发自收。编写相应程序,通过发光二极管观察 收发状态。 2.利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。 三、实验说明 通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为 减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上。 连线方法:在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。波特率定为600,SMOD=0。 在第二个实验中,将两台实验箱的RXD和TXD交叉相连。编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器 20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。通过运行程序观察存储单元内数值的变化。 四、程序 甲方发送程序如下: ORG 0000H LJMP MAIN ORG 0023H LJMP COM_INT ORG 1000H MAIN: MOV SP,#53H MOV 78H,#20H MOV 77H,00H MOV 76H,20H MOV 75H,40H ACALL TRANS HERE: SJMP HERE TRANS: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1 MOV SCON,#40H MOV IE,#00H CLR F0 MOV SBUF,78H WAIT1: JNB TI,WAIT1 CLR TI MOV SBUF,77H WAIT2: JNB TI,WAIT2 CLR TI MOV SBUF,76H WAIT3: JNB TI,WAIT3 CLR TI 实验报告3 1.实验名称:UART 发送与接收 2.实验原理:以UART方式设置串口,当有数据发送时触发中断,进入中断程序。 3.实验结果: 实现CC2530通过串口向PC机串口发送字符串“What is your name?”,电脑向CC2530发送名字,名字以#号结束,CC2530向串口发送字符串”HELLO”+名字。 4.实验改进需求: 输出0V和1V 5.代码: 原始代码: #include //初始化串口0函数 void initUARTO(void) { CLKCONCMD &=~0x40; while(CLKCONSTA & 0x40); CLKCONCMD &=~0x47; PERCFG=0x00; P0SEL=0x3c; P2DIR&=~0xc0; U0CSR|=0x80; U0GCR|=9; U0BAUD|=59; UTX0IF=1; U0CSR|=0x40; IEN0|=0x84; } //串口发送字符串函数 void UartTX_Send_String(uchar *Data,int len) { uint j; for(j=0;j 单片机实验报告 实验名称:串行通信实验 姓名:魏冶 学号: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 实验四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接收 《 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串口通信学院:研究生院学号: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 --接收数据后,波特率时钟启动信号置位); 实验报告 课程名称:微机原理与接口技术 指导老师:张军明 成绩:__________________ 实验名称:实验四 串口通信实验 实验类型:________________同组学生姓名:吴越 一、实验目的和要求(必填) 二、实验内容和原理(必填) 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得 一、实验目的 1、掌握80C51串行口工作方式选择、理解串行口四种通讯模式的区别、波特率发生器的作用及通讯过程中的时序关系。 2、掌握串口初始化的设置方法和串行通信编程的能力。 3、了解PC 机通讯的基本要求,掌握上位机和下位机的通讯方法。 4、编写简单的通信协议(如串行口工作方式、波特率、校验方式、出错处理等)。 二、实验器材 1、Micetek 仿真器一台。 2、实验板一块。 3、PC 机电脑一台。 4、九针串口线一条。 三、实验原理 串口通讯对单片机而言意义重大,不但可以实现将单片机(下位机)的数据传输到PC 端(上位机),而且也能实现PC 对单片机的控制,51单片机有一个全双工的串行通讯口,所以单片机和PC 之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL 电平的,两者之间必须有一个电平转换电路,本实验采用专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。 3.1 RS232九针串口基本功能简介 九针串口即RS-232接口,是个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries Association ,EIA) 所制定的异步传输标准接口。通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组RS-232接口,分别称为COM1和COM2。该接口分为公头子和母头子。九针串口(母头)的功能如下,请见图1: 专业:电子信息工程 姓名:彭嘉乔 学号:3130104084 日期:2015.05 地点:东3-409 信息工程学院实验报告 课程名称:单片机原理及接口 实验项目名称:串口通信实验实验时间: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构成接收线路。一台计算机得TxD、RxD线分别与另一台计算机得RxD、TxD线相连。 由于在串行通信过程中得并串转换、串并转换、线路检测、采样判决、组帧、 拆帧、发送与接收等操作需消耗CPU大量时间,以至CPU无法处理其它工 作,因而开发出专用于处理异步串行通信发送与接收工作得芯片UART(通用 异步串行通信接收发送器)。 CPU只需将要发送得一个字节数据交给UART,其它发送工作由UART自动完成,当UART将一帧数据发送完毕,会通知CPU 已发送完,可提交下一个字节。 UART自动监测线路状态并完成数据接收工作,当接收到一个字节数据后,UART会通知CPU来读取。采用UART 后,CPU得负担大大减轻了。 UART串口实验报告 【实验目的】 1、学习异步串行通信原理,理解字符与字符码的关系; 2、学习Kinetis微控制器的UART模块。 【实验任务】 1、学习和运行Task1,掌握UART模块的编程方法; 2、完成Task2和Task3. 【实验内容】 1、(TASK 1)让单片机给计算机串口发送完整ASCII码表,每16个字符换行。 1.1ASCII码表 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,ASCII码以0x00~0x7F这128个8 bit的数表示常用的英文、数字和符号。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。 根据图1,发送完整的ASCII码表,实际上是需要从串口发送0x00到0x7F这128个数,数据类型是C语言的unsigned char。 1.2单片机的初始化设置 初始化SCI串口的波特率为9600。查阅芯片手册《K20P120M100SF2RM.pdf》可知,需要配置UART0_BDH、UART0_BDL和UART0_C4的BRFA位。设置波特率时,需要同时写入UART0_BDH和UART0_BDL。因为写入BDH之后把数值放在临时数据存储区里直到BDL写入才把数据放入寄存器。 图1 ASCII码表[1] 图2 芯片手册关于波特率设置(UART0_BDH、UART0_BDL)的说明波特率的值,遵循如下的计算公式: 图3 芯片手册关于波特率设置(UART0_C4)的说明UART module clock总线时钟为System clock,System clock在上电后默认是DCO时钟经过FLL倍频之后输出的MCGOUTCLK,MCGOUTCLK默认为20.97MHz,所以UART module clock默认为20.97MHz。由上面公式可得BRFD 值,而BRFA[4:0]=32*BRFD,由此可得出UART0_C4中BRFA[4:0]的值。要得到9600的波特率(UART baud rate),显然计算可得寄存器的设置值SBR应为0x85,BRFA=0x00。对应写成C语言语句就是: 初始化UART0串口启用发送接收器。查阅芯片手册,找到UARTx_C2寄存器的说明如下: 图4 芯片手册关于UARTx_C2的说明 网络编程与实践实验报告 实验内容:串口通信编程 学号:S201502189 姓名:职荣豪 日期:2015-9-28 一、实验要求 使用VS2010编写基于对话框的MFC应用程序,两个窗口分别使用两个串口,使得这两个窗口可以进行通信,包括数据的发送与接收。 二、实验原理 本实验使用Microsoft Communications Control控件,利用这个ActiveX控件,只需要编写少量代码即可轻松进行通信。 该控件相关的函数如下: put__CommPort:设置串口号 put_Settings:以字符串的形式设置波特率、奇偶校验位(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数 put_InputMode:设置接收数据的类型(0-文本类型,1-二进制类型) put_InputLen:设置从接收缓冲区读取的字节数,0表示全部读取 put_InBufferSize:设置接收缓冲区大小 put_OutBufferSize:设置发送缓冲区大小 put_RThreshold:设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件 put_SThreshold:设定在触发OnComm事件前,发送缓冲区内所允许的最少的字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件put_PortOpen:打开或关闭串口,传入参数为true时打开串口,传入参数为false时关闭串口 get_CommEvent:获得串口上刚发生的事件,事件值为2表示接收到数据 get_InBufferCount:获得缓冲区中的数据位数 get_Input:获取缓冲区数据,返回类型为VARIANT put_Output:发送数据 三、设计思路 需要添加一个Microsoft Communications Control控件,用于进行串口通信。 由于要求同一程序可运行两个窗口进行相互通信,需要两个窗口开启两个不同串口,故需要添加一个Edit Control控件用于输入串口号,并添加打开串口按钮,在点击该按钮时对串口控件的参数进行设置并开启串口。同时添加关闭串口按钮,点击后关闭串口并可以对串口号进行修改。 需要添加两个Edit Control 分别用于显示接收到的数据以及输入要发送的数据。 需要添加一个发送按钮,点击后发送输入的数据。 四、实验步骤 1.建立基于对话框的MFC应用程序 2.添加界面控件并设置ID与CaptionUART串口通信设计实例
UART串口通信实验报告
串行口通信实验 单片机实验报告
UART串口通信实验报告
实验报告-实验一IAR串口通信
单片机串口通讯实验报告
最新串行通信实验报告整理
(3)UART 发送与接收
单片机实验报告串行口
实验四 UART串口通信实验报告
ARM串口实验报告.
UART实验报告
实验四-串口通信实验
单片机串口通信实验报告
FREESCALE_K20_UART串口实验报告
串口通讯实验报告