导航:首页 > 操作系统 > 单片机串行口实验

单片机串行口实验

发布时间:2022-08-15 20:18:57

① 我用80C51单片机做仿真,有一个串行口的实验,请问高手下面这段程序对吗

汇编看的好累啊,51也很长时间没用了。
51单片机中的所有外设,都可以在程序中多次设置,不会有只能设置一次的情况。
串行口输出肯定是可以用示波器检测到的,如果没检测到,应该是串口没有工作,具体为什么没工作,要看程序设置的是不是有问题。
串口工作在异步方式下,必须设置波特率。

② 简述c51单片机串行口数据发送和数据接收过程

参考吴鉴鹰吧里面的资料,我也学习单片机,有吴鉴鹰单片机开发板(评价不错的一款单片机开发板),这样实验+理论,然后看视频学习会更好。有兴趣可以看下
串行口初始化编程格式:
SIO: MOV TMOD,#20H ;T1作波特率发生器
MOV TH1,#X ;定时初值选定波特率
MOV TL1,#X MOV PCON,#00H ;SMOD=0,就是波特率不增倍CLR TI ;清除发送中断标志SETB TR1 ;打开定时器1 2、发送程序
查询方式: TRAM: MOV A,@R0 ;取数据
MOV SBUF,A ;发送一个字符
WAIT:JBC TI,NEXT ;等待发送结束
SJMP WAIT NEXT: INC R0 ;准备下一次发送
SJMP TRAM3、接收程序
WAIT: JBC RI,NEXT ;查询等待
SJMP WAIT NEXT: MOV A,SBUF ;读取接收数据
MOV @R0,A ;保存数据
INC R0 ;准备下一次接收
SJMP WAIT 这个是用软件查询方法做的,没有设定数据校验。

③ 89C51单片机到PC机数据传送实验

汇编语言:

ORG0000H

LJMPSt


ORG0020H

St:


CLRA

MOVR7,A

ANLPCON,#0x7F ;波特率不倍速

MOVSCON,#0x50 ;8位数据,可变波特率

ANLTMOD,#0x0F ;清除定时器1模式位

ORLTMOD,#0x20 ;设定定时器1为8位自动重装方式

MOVTL1,#0xE8 ;设定定时初值

MOVTH1,#0xE8 ;设定定时器重装值

CLRET1 ;禁止定时器1中断

SETBTR1 ;启动定时器1


LOOP1:

CLRTI

MOVSBUF,R7 ;串口发送

INCR7

SETBC

MOVA,R7

XRLA,#0x80

SUBBA,#0xE4

JCLOOP2

CLRA

MOVR7,A

LOOP2:

JBTI,LOOP1

SJMPLOOP2


end


调试结果:

④ 单片机串行口设计走马灯,断开其中两根串口线其中一条,为什么不会影响实验结果

单片机串行口设计走马灯,断开其中两根串口线其中一条,为什么不会影响实验结果

⑤ 单片机串口

关于串口实验你可以看看这篇文章:
http://www.hificat.com/dpj_step/rs232.asp

手把手教你用增强型51实验板实现RS232串口通信 《电子制作》2006年8月 站长原创,如需引用请注明出处

上一期,我们已经利用增强型51实验板学会了单片机控制步进电机转动的方法,这一期,我们将一起来学习一下单片机如何与PC机进行通信,一起来完成一个简单的RS232通信实例,我们不做太多的理论,从实例出发,相信能够给大家一个比较通俗、透彻地认识,掌握了它的原理,那你就可以编出任何和PC机进行通信的程序了。
前几期,我们学习和介绍的内容都是以单机的形式,即所有的功能都是在一块增强型51实验板上得以实现。当单片机技术具体应用到工厂、企业及各类工业、民用领域中,它肯定要与外部设置作数据传输,其交互性也使得单片机的应用越来越广泛,我们可以利用它来传数据,传控制命令等等。因此,单片机与PC机的通信是我们学习单片机技术所经历的必要环节,由此,也使我们的学习更具趣味性。
下面我们一起来完成一个用单片机从串行口接收PC机数据,并在数码管上显示出来的实验。
先介绍一下串口通信基本知识。目前较为常用的串口有9针串口(DB9)和25针串口(DB25)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。串口引脚定义如图1所示。

9针串口(DB9) 25针串口(DB25)

针号
功能说明
缩写
针号
功能说明
缩写

1
数据载波检测
DCD
8
数据载波检测
DCD

2
接收数据
RXD
3
接收数据
RXD

3
发送数据
TXD
2
发送数据
TXD

4
数据终端准备
DTR
20
数据终端准备
DTR

5
信号地
GND
7
信号地
GND

6
数据设备准备好
DSR
6
数据准备好
DSR

7
请求发送
RTS
4
请求发送
RTS

8
清除发送
CTS
5
清除发送
CTS

9
振铃指示
DELL
22
振铃指示
DELL

图1 DB9和DB25的常用信号脚说明

我们来看一下本次实验的电路图,如图2所示,即增强型51实验板实现串口通信及数码管显示的电路部分。图2中的4个三极管分别与4个共阳数码管相连,是各个数码管的使能端,分别通过单片机的P2.0,P2.1,P2.2,P2.3来控制,数码管显示的详细工作原理,我们已在前几期杂志中作过介绍,有兴趣的朋友可以去看一下以前几期的内容。图2中MAX232芯片起到RS232与TTL电平转换的作用,我们通过9芯串口与PC机相连。

图2 硬件电路原理图

下面是我们完成本次实验的源程序代码,使用Keil编译软件,将其编译生成HEX文件,然后,通过A51编程器烧入AT89S51芯片即可。
#include "reg51.h"
#include <absacc.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char dat;

void Init_Com(void)
{
TMOD = 0x20; //定时器工作方式2,初值自动装入
PCON = 0x00; //波特率不增倍
SCON = 0x50; //串行工作方式设定
TH1 = 0xFd; //定时器初值高位
TL1 = 0xFd; //定时器初值低位
TR1 = 1; //启动定时器
}
/*函数功能:LED数码管延时程序*/
void delay(void)
{
int k;
for(k=0;k<600;k++);
}
/*函数功能:LED数码管显示程序*/
void display(int k)
{
P2=0xfe; //位选
P0=tab[k/1000]; //显示千位数字
delay(); //延时
P2=0xfd; //位选
P0=tab[k%1000/100]; //显示百位数字
delay(); //延时
P2=0xfb; //位选
P0=tab[k%100/10]; //显示十位数字
delay(); //延时
P2=0xf7; //位选
P0=tab[k%10]; //显示个位数字
delay(); //延时
P2=0xff; //位选
}
/*函数功能:主程序*/
void main()
{
P2=0xff; //端口初始化,关LED显示
P0=0xff;
Init_Com(); //调用串口初始化程序
while(1) //主循环
{
if ( RI ) //判断是否收到数据
{
dat = SBUF; //接收数据
RI = 0; //软件清除标志位
}
display(dat-48); //显示收到的数据
}
}

我们来一起分析一下程序代码,main主程序首先将P2口和P0口全部输出高电平,即数据管不显示任何内容,Init_Com函数用来初始化串口设置,如波特率设置,工作方式的设置,这些都是程序运行的一切初始化设置。然后,我们看到了一个while(1)语句,该语句的作用是产生死循环,即单片机上电复位后,我们就不断地去接收由PC机发过来的串口数据,同时将接收到的数据放在dat 这个变量中,每接收完一次数据,我们需要执行RI = 0这条语句,用来清除串口数据接收标志位,现在我们已经收到了PC机传过来的数据了,余下的任务就是要将数字通过数码管显示出来,我想大家看了我们前几期的介绍,已经并不陌生数码管的使用了,在这里,我们也写得非常简洁,通过display这个函数将数字显示出来,因为我们收到的是字符型的ASCII码数据,如数字“0”的ASCII码值是48,所以,我们要显示“0”的话,还需要将其值减去48后才是真正要显示的数据。数码管我们采用动态扫描法进行显示,delay函数的作用是产生一定时间的延时,对于人眼来说是分辨不出来的,在display的函数体内,我们先将数据装载到P0口,如我们在程序开始时定义的:unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}语句,意思相当于:数字“0”对应的数码管段码值为“0xc0”, 数字“1”对应的数码管段码值为“0xf9”, 数字“2”对应的数码管段码值为“0xa4”……以此类推,最后通过数码管的使能端来显示各位数码管的值。至此,整个程序的功能就轻松地实现了我们所需要的功能,看到这里相信你现在对串行通信感到并不是原来想的那么深奥了吧。

现在我们已经将程序写好,并烧入了单片机芯片,下面我们要做的就是用串口线将增强型51实验板和PC机相连起来,同时给实验板接上电源,然后就是通过PC机软件来发数据了,要在PC机上向串口发送数据一定要借助相应软件,打开光盘内附带的串口调试软件,它设置方便、灵活,界面简洁明。因为我们得告诉实验板来显示哪些数字,程序的功能是发送“1”、“2”、“3”......“8”、“9”、“0”等字符,增强型51实验板收到数据后通过数码管显示出来,所以我们得在软件发送区内填上我们所需要发送的数字,如图3所示。

图3

串口调试软件中,设置参数如下:串口:COM1;波特率:9600;校验位:无;数据位:8位;停止位:1位;发送内容:5
当我们点击“手动发送”按钮后,我们可以看到增强型51实验板上的数码管已显示数字“5”的字样,如图4所示。当然,我们也可以选择“自动发送”,即每隔一定的时间,由软件自动发送“发送缓冲区”内的数据,时间周期可以在软件界面中设置。

图4

现在,你已经可以自由发挥来接收PC机发过来的数据了,只要发挥你的想象力,定义好PC机和单片机两端的数据通信协议,你可以做出任何通过电脑来对单片机进行控制的程序,实现各种各样的数据传输,远程控制功能,比如通过PC机来控制液晶显示、控制步进电机的转动、控制蜂鸣器奏乐等等,您也可以将本期所讲的知识与前几期所讲的关联起来,完成功能更多,更实用的具体应用实例。因此,到本期的学习,我们已经可以将单片机与PC相连,借助PC机强大而灵活的功能,就可以为我们解决各类实际生产及应用型问题提供了方便。这一期的内容我们就介绍到这里,增强型51实验板更多的学习内容,我们将在以后几期陆续为大家作介绍,祝大家学习顺利。

⑥ 单片机串口实验

;;用单片机口串口通信工作于方式0,串行输出,
;;再接CD4094或74HC164寄存器实现并出,8个发光管从左到右交替地亮灭
;;P1.0接CD4094的STR作并出允许控制,RXD接DATA,TXD接CLK作时钟
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 000H
JMP MAIN
ORG 30H
MAIN:
MOV SP,#5FH
MOV SCON,#00H;设串口方式0
MOV A,#80H;最左位先亮
CLR P1.0;关并行输出
OUT0:
MOV SBUF,A;串出
OUT1:JBC T1,NEXT
JMP OUT1
NEXT:SETB P1.0;并出
CALL DELAY ;延时一会
RR A
CLR P1.0
AJMP OUT0
DELAY: MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET

END

⑦ 单片机串行通信实验

1、实验:用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,
另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示
2、原理:串行通信是指数据按位顺序传送的通信。串行数据传送的特点是:通信线路简单,最多只需一对传输线即可实现通信,成本低但速度慢,其通信线路既能传送数据信息,又能传送控制信息。它对信息的传送格式有固定要求,具体分为异步和同步两种信息格式.与此相应有异步通信和同步通信两种方式;在串行通信中,对信息的逻辑定义与TTL不兼容,需要进行逻辑电平转换:计算机与外界的数据传送大多是串行的,其传送的距离可以从几米到几千公里。单片机中使用的串行通信通常都是异步方式的
3、实验目的:1)掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。 2)了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。 3)学习串口通讯的中断方式的程序编写方法
4、参考实现:
http://wenku..com/link?url=uyYKlkBQqwjGl-akFJ3xWa67R814ShF50uwd3

⑧ 8031双机串行通信实验设计

哎直接给我算咯, 串行通信
一、实验目的
1、掌握串行口工作方式2的程序设计,掌握单片机通信程序编制方法。
2、了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。
3、掌握双机通信的原理和方法。
二、实验设备
DVCC仿真系统二套。
三、实验内容
1、 利用8031单片机串行口,实现双机通信。将1号实验机键盘上键入的数字显示到2号实验机的数码管上。
四、实验步骤
1、按图接线
2、两台DVCC实验系统处于“P.”状态下。
3、在1号机上选择“双机通信”发送程序,编译并连接,输入0D00后,按EXEC键。
4、在2号机上选择“双机通信”接收程序,编译并连接,输入0E30后,按EXEC键。
5、从1号机的键盘上输入数字键,会显示在3号机的显示器上。
五、实验线路

六、程序框图

一 工作方式
1)方式 0
当设定SM1、SM0为00时,串行口工作于方式0,在方式0下,RXD为数据输入/输出端,TXD为同步脉冲输出端,发送或接收的数据为8位,低位在前,高位在后,方式0的波特率固定为ƒ /12,也就是每一机器周期传送一位数据。方式0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输入/输出设备。

2)方式 1
当设定SM1、SM0为01时,串行口工作方式1。方式1为波特率可变的8位异步通信方式,由TXD发送RXD接收,一帧数据为10位,1位起始位(低电平),8位数据位(低位在前)和1位停止位(高电平),波特率取决于定时器 的T 溢出率(1/溢出周期)和波特率的选择位SMOD。
波特率 = *(定时器T 溢出率)

3)方式2和方式3
当设定SM0、SM1为10或11时,串行口工作于方式2或方式3,这两种方式都是9位异步通信,仅波特率不同,适用于多机通信。在方式2或方式3下,数据由TXD发送RXD接收,1帧数据为11位,1位起始位(低电平),8位数据位(低位在前),1位可编程位(第9位数据,用作奇偶校验或地址/数据选择),1位停止位(高电平)。与方式1相比,多了一位可编程位,发送时,第9位数据为TB8,接收时,第9位数据送入RB8。

方式(2)波特率 = *ƒ
方式(3)波特率 = *(定时器T 溢出率)
二 波特率的设置
Mcs-51系列单片机串行通信的波特率取决于串行口的工作方式。方式0的波特率固定等于ƒ /12,方式2的波特率有两种:当SMOD=0时,波特率=ƒ /64;当SMOD=1时,波特率=ƒ /32。 SMOD是PCON寄存器的最高位,通过软件可设置SMOD=0或1,但注意PCON无位寻址功能。
当串行口工作于方式1和方式3时,波特率= *定时器T 溢出率/32,其中T 溢出率=1/T 溢出周期。因此,影响波特率的因素除了设定的SMOD值以外,还有T 溢出率,使波特率的设置更灵活,范围更广。下面说明溢出率计算和波特率设方法。
1) T 溢出率的计算
串行通信方式1和3 下,使用定时器T 作为波特率发生器。T 可以工作于方式0、方式1和方式2。其中方式2为自动装入时间常数的8位定时器使用时只需进行初始化,不需要安排中断服务程序重装时间常数,因此是一种常用方式。
Mcs-51系列单片机定时器时间计算式为:
T = (2 -N)*12/ƒ
式中:T ——定时器溢出周期
n ——定时器位数
N——时间常数即定时器初值
ƒ ——振荡频率(2 -N)*12/ƒ
当定时器T 工作于方式2,则有
溢出周期=(2 -N)*12/ƒ
溢出率=1/溢出周期= ƒ /12*(2 -N)
2)波特率的设置:由上述可得当串行口工作于方式1或方式3,定时器T 工作于方式2时。 波特率 = 2 * T 溢出率/32
=2 * ƒ /[32*12(2 -N)
;系统晶振是 6.0 MHz

ORG 0E30H
START:
MOV SP,#60H
mov A,#02H
MOV R0,#79H
MOV @R0,A
INC R0
MOV A,#10H
MOV @R0,A
INC R0
MOV A,#01H
MOV @R0,A
INC R0
MOV A,#03H
MOV @R0,A
INC R0
MOV A,#00H
MOV @R0,A
INC R0
MOV A,#08H
MOV @R0,A
MOV A,#7EH
MOV DPTR,#1FFFH
MOVX @DPTR,A
MOV SCON,#50H ;串口 方式 1
MOV TMOD,#20H ;T1 方式 1
MOV TL1,#0CCH ;波特率 9600 的常数
MOV TH1,#0CCH
SETB TR1 ;开中断
CLR ET1
CLR ES
WAIT:
JBC RI,DIS_REC ;是否接收到数据
LCALL DISP ;
SJMP WAIT ;
DIS_REC:
MOV A,SBUF ;读串口接收到的数据
LCALL DATAKEY ;显示输入的数字(0-F)
DB 79H,7EH
AJMP WAIT

DATAKEY:MOV R4,A
MOV DPTR,#1FFFH
MOVX A,@DPTR
MOV R1,A
MOV A,R4
MOV @R1,A
CLR A
POP 83H
POP 82H
MOVC A,@A+DPTR
INC DPTR
CJNE A,01H,DATAKEY2
DEC R1
CLR A
MOVC A,@A+DPTR
DATAKEY1:PUSH 82H
PUSH 83H
MOV DPTR,#1FFFH
MOVX @DPTR,A
POP 83H
POP 82H
INC DPTR
PUSH 82H
PUSH 83H
RET
DATAKEY2:DEC R1
MOV A,R1
SJMP DATAKEY1

DISP: SETB 0D4H
MOV R1,#7EH
MOV R2,#20H
MOV R3,#00H
DISP1:
MOV DPTR,#DATACO
MOV A,@R1
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A
MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
LCALL DELAY
DEC R1
CLR C
MOV A,R2
RRC A
MOV R2,A
JNZ DISP1
CLR 0D4H
RET
DELAY: MOV R7,#03H
DELAY0: MOV R6,#0FFH
DELAY1: DJNZ R6,DELAY1
DJNZ R7,DELAY0
RET
DATACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H,0DEH
END

阅读全文

与单片机串行口实验相关的资料

热点内容
收藏网址加密的浏览器 浏览:1000
phpurl问号 浏览:898
什么笔记本电脑可以用python 浏览:135
加密相册如何翻找 浏览:992
泰州地区DNS服务器地址 浏览:849
一种app可以买菜用英语怎么说 浏览:196
中国联通app里面通话详单怎么删除 浏览:505
计算机网络编译软件 浏览:100
程序员说不能说的秘密 浏览:700
在线shell编译器 浏览:102
为什么王者荣耀安卓转苹果成功登不上去 浏览:710
文件加密算法可行性报告 浏览:60
a3双面打印pdf 浏览:270
被命令文言文 浏览:717
c语言编译器在线菜鸟 浏览:215
安卓如何使用华为手机助手 浏览:701
怎么查看域服务器名称 浏览:775
如何把苹果的视频传到安卓手机 浏览:612
接口服务器怎么使用 浏览:62
苹果怎么实现安卓全面屏手势 浏览:977