版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机的串行口07介绍52单片机串行通信的基本概念、串行口的结构、工作方式、双机通信、多机通信以及计算机与计算机之间的通信。07单片机的串行口01串行通信基础050203方式2及其应用方式0及其应用串行口内部结构04方式1及其应用06方式3及其应用07单片机与计算机的串行通信7.1串行通信基础并行通信一、并行通信和串行通信AT89S52单片机内部集成了一个全双工异步通信串行口。串行通信通信线路复杂且成本高通信速度较快适合短距离传输,用得较少传输线少、成本低定义:串行通信中每秒传送二进制的位数12适合远距离传输,应用广泛通信速度慢!波特率单位:位/秒(bit/persecond)、
bps。7.1串行通信基础二、同步串行通信和异步串行通信 同步串行通信12数据传输效率较高,采用同步时钟,增加一条同步时钟线异步串行通信不需要传送同步脉冲,可靠性高,所需设备简单,传输速率低通信双方必须保证两点:①相同的波特率;②相同的数据格式。7.1串行通信基础三、串行通信的制式 单工方式1半双工方式2全双工方式3四、串行通信的错误校验 奇偶校验:数据位尾随的1位为奇偶校验位123代码和校验:所发数据块求和附加到数据块末尾循环冗余校验(CRC):目前应用最广的检错码编码方式之一7.1串行通信基础五、串行通信标准 TTL电平标准(5V)1输出时,电平≥2.4V,即为高电平“1”,
电平≤0.4V,即为低电平“0”;输入时,电平≥2.0V,即为高电平“1”,
电平≤0.8V,即为低电平“0”。通信距离在1.5m以内。单片机双机近距离TTL通信(1.5m以内)7.1串行通信基础五、串行通信标准 RS232C电平标准(负逻辑)2通信距离在15m以内单片机双机远距离RS232C通信(15m以内)高电平(1):-3V~-15V低电平(0):+3V~+15V单片机与计算机通信(15m以内)7.1串行通信基础五、串行通信标准 RS-485电平标准3最大传输距离约1219m,最大传输速率为10Mbit/s。单片机双机远距离RS485通信高电平(1):
—(2~6)V低电平(0):+(2~6)V半双工通信方式RS-232或485RS-232或485单片机甲乙两地之间远距离通讯MCS-51TXD(甲)RXD
RXDMCS-51TXD(乙)07单片机的串行口01串行通信基础050203方式2及其应用方式0及其应用串行口内部结构04方式1及其应用06方式3及其应用07单片机与计算机的串行通信7.2单片机串行口的内部结构7.2单片机串行口的内部结构【例】串口既可以发送数据又可以接收数据,工作在方式1,配置SCON。SCON=0x50;//整字节赋值010
10000SM0=0;SM1=1;REN=1;//按位赋值7.2单片机串行口的内部结构【例】串行口方式2的波特率为0.375Mbps,晶振fosc为12MHz,配置PCON。PCON=0x80;//整字节赋值不能按位赋值
SMOD=107单片机的串行口01串行通信基础050203方式2及其应用方式0及其应用串行口内部结构04方式1及其应用06方式3及其应用07单片机与计算机的串行通信7.3方式0及其应用一、串行口方式0(同步移位寄存器方式)
方式0的设置:1SM0SM1=00234波特率:fosc/12,即单片机机器周期的频率帧格式:8位数据为一帧,无起始位和停止位,先发送或接收最低位方式0的发送和接收工作过程:接收时序发送时序RXD:接收/发送数据TXD:移位脉冲串行口方式0中断使用步骤:1、硬件连接:外接移位寄存器2、串口初始化:发送:SCON=0x00;接收:SCON=0x10;3、中断初始化:EA=1;ES=1;4、发送数据:
SBUF=data;4、中断服务程序void函数名()interrupt4
{if(TI)
{TI=0;......
}if(RI)
{RI=0;
接收数据:X=SBUF;
......}}串行口方式0查询使用步骤:1、硬件连接:外接移位寄存器2、串口初始化:
发送:SCON=0x00;
接收:SCON=0x10;3、发送数据:SBUF=data;4、查询标志位:TI/RI
while(TI==0);TI=0;或while(RI==0);
RI=0;接收数据:X=SBUF;
7.3方式0及其应用7.3方式0及其应用二、并行输出口扩展仿真实例 任务要求:方式0扩展并行输出口,并行输出口外接8个LED按流水方式亮灭。7.3方式0及其应用二、并行输出口扩展仿真实例 硬件设计1任务要求:方式0扩展并行输出口,并行输出口外接8个LED按流水方式亮灭。A、B:数据输入Q0~Q7:数据输出CLK:时钟输入
LED从上到下顺序:D1D2D3D4D5D6D7D874LS174输出端顺序:Q0Q1Q2Q3Q4Q5Q6Q7串口输出数据从高到低位顺序:01111111D1点亮的编码0x7fD2~D7点亮的编码为0x7f循环右移D2点亮的编码101111117.3方式0及其应用二、并行输出口扩展仿真实例 软件设计2任务要求:方式0扩展并行输出口,并行输出口外接8个LED按流水方式亮灭。分析:8个LED按由上到下的顺序流水点亮,串口方式0,串口中断,循环发送数据#include<reg52.h>#include<intrins.h>//移位函数头文件#defineucharunsignedchar#defineuintunsignedintsbitMR=P2^0;//74LS164复位引脚ucharLEDbuffer;//点亮发光二极管数据//串行口方式0中断初始化voiduart_init(){SCON=0x00;//设置串行口为方式
ES=1; //允许串行口中断
EA=1; //全局中断允许}voidmain()
{ uart_init(); LEDbuffer=0x7f;//点亮D1
MR=1;//本例74LS164不需要复位
SBUF=LEDbuffer;//启动串行发送
while(1);}voidSerial_Port()interrupt4
{if(TI)//TI=1,发送完毕
{delay(500);//延时
LEDbuffer=_cror_(LEDbuffer,1);
SBUF=LEDbuffer;
}
TI=0;//清发送中断标志位}
7.3方式0及其应用三、并行输入口扩展仿真实例 任务要求:方式0扩展并行输入口,通过8个按键分别控制8个LED的亮灭。7.3方式0及其应用三、并行输入口扩展仿真实例 硬件设计1任务要求:方式0扩展并行输入口,通过8个按键分别控制8个LED的亮灭。按键从上到下顺序:
B1B2B3B4B5B6B7B874LS175输入端顺序:D0D1D2D3D4D5D6D7LED从上到下顺序:P27P26P25P24P23P22P21P20SO:数据输出D0~D7:数据输入CLK:时钟输入
B1按键,P2.7引脚控制的LED点亮B2按键,P2.6引脚控制的LED点亮7.3方式0及其应用三、并行输入口扩展仿真实例 软件设计2任务要求:方式0扩展并行输入口,通过8个按键分别控制8个LED的亮灭。分析:方式0,串口接收数据,采用查询方式#include<reg52.h>#defineucharunsignedchar #defineuintunsignedint sbitSH=P1^0;//74LS164控制端;ucharINbuffer;main(){
SCON=0x10;//方式0,可接收
while(1) {
while(!RI);//等待接收到数据
SH=0;//SH=0读入S0~S7的状态
delay(1);
SH=1;//SH=1串行读入到串行口中
INbuffer=SBUF;//读取串口数据
P2=INbuffer;//开关状态送P2口
RI=0;//清接收标志位
}}7.4方式1及其应用一、串行口方式1(8位异步通信方式)
方式1的设置:1SM0SM1=012波特率:
T1选择定时器工作方式2,自动重装初值8位定时模式根据实际情况确定波特率,求T1的初值X晶振频率fosc最好选择11.0952MHz定时时间=(最大计数量-初值)*机器周期SMOD取值0或17.4方式1及其应用【例】串口方式1,波特率为9600bps,晶振频率为11.0592MHz,
求TL1、TH1中装入的数值是多少?写出初始化程序段。X=253(0xfd)
初始化程序段为:
SCON=0x40;
PCON=0x00;
TMOD=0x20;TL1=0xfd;TH1=0xfd;TR1=1;7.4方式1及其应用常用波特率T1初值表单片机串口通信系统中,晶振常采用11.0592MHz,主要是因为晶振12MHz,计算出的T1初值不是一个整数,这样通信会产生累计误差,导致通信失败。!7.4方式1及其应用3帧格式:10位数据为一帧,1位起始位、8个数据位、1个停止位先发送低位方式1发送的工作过程41.串口初始化:SCON=0x40;PCON=0x00/0x80;2.T1初始化:TMOD=0x20;TH1=TL1=X;TR1=1;3.中断初始化:ES=1;EA=1;(查询方式不需要)4.发送数据:SBUF=数据;5.中断服务程序:void函数名()interrupt4
或查询:while(TI==0);
{TI=0;......}TI=0;7.4方式1及其应用方式1接收的工作过程51.串口初始化:SCON=0x50;PCON=0x00/0x80;2.T1初始化:TMOD=0x20;TH1=TL1=X;TR1=1;3.中断初始化:ES=1;EA=1;(查询方式不需要)4.
中断服务程序:void函数名()interrupt4
或查询:while(RI==0);
{RI=0;RI=0;变量=SBUF;变量=SBUF;............
}7.4方式1及其应用二、双机通信的仿真实例任务要求:两机方式1,fosc为11.0592MHz,波特率为4800bps,SMOD=1。
甲机循环发送0~9;查询方式发送,虚拟终端观察发送数据;
乙机接收数据,显示在数码管(共阳)上,中断方式接收数据。7.4方式1及其应用硬件设计17.4方式1及其应用软件设计2分析:甲机方式1,fosc=11.0592MHz,4800bps,SMOD=1,查询,循环发送0~9#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodesendbuf[]={0,1,2,3,4,5,6,7,8,9};voiddelay(uintXms);voiduart_init();/*********串口初始化*******voiduart_init(){
SCON=0x40; PCON=0x80;
TMOD=0x20; TH1=0xf4; TL1=0xf4; TR1=1;}voidmain()
{ucharindex=0;//发送数据索引
uart_init();//串口初始化
while(1){
SBUF=sendbuf[index];
while(TI==0);
TI=0;
index++;
if(index>=10)
index=0
delay(1000);}}乙机方式1,fosc=11.0592MHz,4800bps,SMOD=1,中断接收,数码管显示#include<reg52.h>#defineucharunsignedcharucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharreceivebuf;//定义接收缓冲voiduart_init();voidmain(void)
{
uart_init(); while(1);}voiduart_init(){
SCON=0x50;
PCON=0x80;//波特率加倍
TMOD=0x20;//T1定时方式2TH1=0xf4;TL1=0xf4;//2400b/sTR1=1;//启动T1ES=1;//开串口中断允许
EA=1; //开总中断
}voiduart_receive()interrupt4{
if(RI==1)//接收完成
{RI=0;
receivebuf=SBUF;
P2=seg[receivebuf];
}}7.5方式2及其应用一、串行口方式2(9位异步通信方式)
方式2的设置:1SM0SM1=102波特率:
3帧格式:一帧11位,1位起始位、8个数据位、1位可编程位、1个停止位先发送低位【例】fosc
=11.0592MHz:SMOD=0,计算波特率。波特率=0.3456Mbit/s。波特率
=
0.1728Mbit/s;【例】fosc
=11.0592MHz:SMOD=1,计算波特率。7.5方式2及其应用方式2发送的工作过程41.串口初始化:SCON=0x80;PCON=0x00/0x80;2.中断初始化:ES=1;EA=1;(查询方式不需要)3.发送数据:TB8=0/1;SBUF=数据;4.
中断服务程序:void函数名()interrupt4
或查询:while(TI==0);
{TI=0;TI=0;............
}方式2接收的工作过程51.串口初始化:SCON=0x90;PCON=0x00/0x80;2.中断初始化:ES=1;EA=1;(查询方式不需要)3.
中断服务程序:void函数名()interrupt4
或查询:while(RI==0);
{RI=0;
RI=0;变量=SBUF;变量=SBUF;......}......
接收到有效数据完毕,置位RI的条件:(1)REN=1,RI=0(2)且SM2=0或接收到第9位数据为1,此时,数据装载SBUF,RI置1,第9位数据(TB8)送入RB8。7.5方式2及其应用二、带奇偶校验的双机通信仿真实例任务要求:方式2,fosc为11.0592MHz,波特率为0.3456Mbps,奇偶校验。
甲机查询循环发送0~9,数码管显示(共阳)。乙机中断接收后若结果无误,接收数据;若结果有误,则拒绝
接收,把接收到的数据显示在数码管(共阳)上。7.5方式2及其应用硬件设计17.5方式2及其应用软件设计2分析:甲机方式2,fosc=11.0592MHz,0.3456Mbps,查询循环发送0~9,数码管显示#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintvoiddelay(uintxms);ucharcodesendbuf[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voiduart_init(){
SCON=0x80; PCON=0x80;}voidmain(void){ uchari;
uart_init();
while(1)
{
for(i=0;i<10;i++) {
Senddata9(sendbuf[i]);
P2=seg[sendbuf[i]];
delay(1000);
}}}voidSenddata9(uchardat)
{
ACC=dat;
TB8=P;
SBUF=dat;
while(TI==0);
TI=0;}
乙机方式2,fosc=11.0592MHz,
0.3456Mbps,中断接收,数码管显示#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintvoiduart_init();//串口初始化函数ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharreceivebuf;//定义接收缓冲voidmain(void) {
uart_init();//串口初始化
while(1) {
P2=seg[receivebuf];}}voiduart_init(){
SCON=0x90; PCON=0x80;
ES=1;
EA=1; }voiduart_receive()interrupt4{
if(RI==1)
{ RI=0;
ACC=SBUF;
if(RB8==P)
receivebuf=ACC;
} }7.5方式2及其应用7.6方式3及其应用一、串行口方式3(9位异步通信方式)
方式3的设置:1SM0SM1=112波特率:3帧格式:一帧11位,1位起始位、8个数据位、1位可编程位、1个停止位
同方式1同方式2方式3发送的工作过程4方式3接收的工作过程5同方式2同方式27.6方式3及其应用二、多机通信原理 主从式结构是指多机系统中,只有一个主机,其余全是从机。每一个从机都有独立的地址,从机地址可设为0x01、0x02和0x03等。从机和从机之间不能进行直接通信,只能经主机才能实现。主机发送信息可被所有从机接收,从机发送的信息,只能主机接收。主从式结构多机通信7.6方式3及其应用二、多机通信原理 接收到有效数据完毕,置位RI的条件:(1)REN=1,RI=0
(2)且SM2=0或接收到第9位数据为1,此时,数据装载SBUF,RI置1,第9位数据(TB8)送入
RB8。
1.SM2=0:RB8=1或RB8=0
都使RI=1,接收数据送入SBUF。2.SM2=1:RB8=1,使RI=1并引发中断,接收的数据送入SBUF。
RB8=0,信息丢失。在方式2、3中接收到的数据是否能装载SBUF的条件:7.6方式3及其应用二、多机通信原理 1.SM2=0:RB8=1或RB8=0
都使RI=1,接收数据送入SBUF。2.SM2=1:RB8=1,使RI=1并引发中断,接收的数据送入SBUF。
RB8=0,信息丢失。主机1.SM2=02.主机发出从机地址
地址标识
TB8=13.主机发出数据
数据标识TB8=0从机1.SM2=12.从机接收到RB8=1,接收地址码,判断是否和本机地址码相同,若相同,则SM2=0,若不同,则SM2=13.被寻中的从机,接收RB8=0,且SM2=0
将主机发出的数据码送入SBUF,
RI=1,
没有被寻中的从机,接收RB8=0,且SM2=1,不接收任何数据。7.6方式3及其应用三、多机通信仿真实例任务要求:1+2主从式、方式3、晶振11.0592MHz、波特率9600bps主机按下1#从机通信按键,主机向1#从机循环发送“0~9”10个字符,按下2#从机通信按键,主机向2#从机循环发送“A~F”6个字符,主机用虚拟终端观察发送的数据。从机数码管(共阳)显示7.6方式3及其应用三、多机通信仿真实例任务要求:1+2主从式、方式3、晶振11.0592MHz、波特率9600bps主机按下1#从机通信按键,主机向1#从机循环发送“0~9”10个字符,按下2#从机通信按键,主机向2#从机循环发送“A~F”6个字符,主机用虚拟终端观察发送的数据。从机数码管(共阳)显示7.6方式3及其应用三、多机通信仿真实例主机:串口方式3,晶振11.0592MHz、波特率9600bps
1#从机按键采用INT0,中断函数设给1#机发送“0~9”字符标志位
2#从机按键采用INT1,中断函数设给2#机发送“A~F”字符标志位voiduart_init(){SCON=0xc0;//方式3、禁止接收
PCON=0x00;
TMOD=0x20;//T1定时方式2TH1=TL1=0xfd;//9600bps SMOD=0TR1=1; //启动T1}voidEx_init(){IT0=1;//INT0下跳沿触发
EX0=1;//开INT0中断允许
IT1=1;//INT1下跳沿触发
EX1=1;//开INT1中断允许
EA=1;//开总中断}voidkey1_int()interrupt0{flag=1;//设标志位,1#机通信
IE0=0;//清INT0中断标志位}voidkey2_int()interrupt2{flag=2;//设标志位,2#机通信
IE1=0;//清INT1中断标志位}7.6方式3及其应用主机:串口方式3,晶振11.0592MHz、波特率9600bps
1#从机按键采用INT0,中断函数设给1#机发送“0~9”字符标志位
2#从机按键采用INT1,中断函数设给2#机发送“A~F”字符标志位voidkey_send(ucharnode_number){ delay(1000);uart_init();
TB8=1;
//发送地址码
SBUF=node_number;//发送从机地址while(TI==0); //等待发送结束
TI=0;
//清TI标志
TB8=0;
//发送数据码switch(node_number)
{case1:
{
SBUF=str1[num1++];//1#从机数据帧if(num1>=10)num1=0;//修改发送指针break;}case2:
{SBUF=str2[num2++];//2#从机数据帧
if(num2>=6)num2=0;//修改发送指针
break;}default:break;
while(TI==0);//等待数据帧发送结束
TI=0;
}}1.SM2=02.主机发出从机地址
地址标识
TB8=13.主机发出数据
数据标识TB8=0主机7.6方式3及其应用三、多机通信仿真实例主机:串口方式3,晶振11.0592MHz、波特率9600bps
1#从机按键采用INT0,中断函数设给1#机发送“0~9”字符标志位
2#从机按键采用INT1,中断函数设给2#机发送“A~F”字符标志位#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#defineSlave1_ADDR1//1#从机地址#defineSlave2_ADDR2//2#从机地址voiddelay(uintxms);//延时函数voidEx_init();//中断初始化voiduart_init();//串口初始化函数voidkey_send(ucharnode_number);ucharcodestr1[]="0123456789";//1#;ucharcodestr2[]="ABCDEF";//2#;ucharnum1=0,num2=0;ucharflag=0;//按键标志位voidmain(){
Ex_init();while(1)
{ switch(flag){
case1:key_send(Slave1_ADDR);break;
case2:key_send(Slave2_ADDR);
break;
}}}7.6方式3及其应用1#从机:串口方式3,晶振11.0592MHz、波特率9600bps
1#从机接收“0~9”字符,数码管显示voiduart_init(){
SCON=0xf0;//方式3、多机通信、接收
TMOD=0x20;//T1定时方式2TH1=TL1=0xfd; //9600bpsTR1=1; //启动T1ES=1;EA=1; //开中断
}1.SM2=12.从机接收到RB8=1,接收地址码,判断是否和本机地址码相同,若相同,则SM2=0,若不同,则SM2=13.被寻中的从机,接收RB8=0,且SM2=0,将主机发出的数据码送入SBUF,RI=1,
没有被寻中的从机,接收RB8=0,且SM2=1,不接收任何数据。voidreceive(void)interrupt4{RI=0;if(RB8==1){if(SBUF==Slave1_ADDR)SM2=0;return;}display(SBUF);SM2=1;}7.6方式3及其应用1#从机:串口方式3,晶振11.0592MHz、波特率9600bps
1#从机接收“0~9”字符,数码管显示voiddisplay(ucharch){if((ch>=48)&&(ch<=57))P2=seg[ch-48];elseif((ch>=65)&&(ch<=70))
P2=seg[ch-55];}#include<reg52.h>#defineSlave1_ADDR1#defineucharunsignedcharvoiduart_init();//串口初始化函数voiddisplay(ucharch);//显示函数ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳0-F段码
/*************主函数*********/voidmain(){
uart_init();while(1);}2#从机程序和1#从机程序除从机地址不一样以外,两个从机程序完全一样。0的ASCII:0x30(48)9的ASCII:0x39(57)A的ASCII:0x41(65)F的ASCII:0x70(46)!7.7单片机与计算机的串行通信计算机RS-232电平标准:逻辑1:-3~-15V逻辑0:+3V~+15V单片机TTL电平标准:逻辑1:2.0~5V逻辑0:0~0.8V
解决3个问题:1.电平转换电路设计
2.单片机程序设计
3.PC机程序设计7.7单片机与计算机的串行通信一、单片机与计算机通信基础单片机串行通信接口1DB9插头TTL电平计算机串行通信接口2RS232电平!单片机与计算机通信必须进行电平转换7.7单片机与计算机的串行通信TTL电平与RS232电平转换电路3MAX232引脚及内部结构单片机与PC机RS232通信接口单片机与PC机电平转换电路图7.7单片机与计算机的串行通信单片机端接收或发送程序:4VB设计接收发送程序单片机向计算机和单片机向单片机发送数据的方法是完全一样5计算机端接收或发送程序:C#设计接收发送程序C++设计接收发送程序Labview设计接收发送程序串口调试助手接收或发送7.7单片机与计算机的串行通信一、单片机与计算机通信基础TTL电平?计算机或笔记本电脑没有DB9插头,单片机如何和电脑串行通信USB转串口技术实现单片机与计算机之间通信。USB转串口接口电路:CH340USB转串口电路PL2303USB转串口电路7.7单片机与计算机的串行通信二、单片机向计算机发送数据仿真实例任务要求:单片机晶振为11.0592MHz。串口方式1,波特率为9600bps。
单片机按下发送按键给计算机循环发送0~9,数码管显示;按下停止按键停止发送数据,没有按键按下时,显示“-”。
计算机接收数据(串口助手)。7.7单片机与计算机的串行通信任务要求:单片机晶振为11.0592MHz。串口方式1,波特率为9600bps。
单片机按下发送按键给计算机循环发送0~9,数码管显示;按下停止按键停止发送数据,没有按键按下时,显示“-”。
计算机接收数据(串口助手)。硬件电路设计1注意:COMPIM的RXD(输出)和TXD(输入)端的输入输出方向和实际计算机的RS232接口的RXD(输入)和TXD(输出)相反,在仿真连接上和实际连接不同。软件设计2分析:单片机方式1,fosc=11.0592MHz,9800Mbps,按键循环发送0~9,数码管显示voiduart_init(){SCON=0x40;PCON=0x00;
TMOD=0x20;
TH1=0xfd;TL1=0xfd;;
TR1=1;}
voidEx_init(){IT0=1;
EX0=1;
IT1=1;EX1=1;EA=1;}发送按键采用INT0,中断函数设标志位flag=1(发送)停止按键采用INT1,中断函数设标志位flag=2(停止)voidkey1_int()interrupt0{
flag=1;//设标志位发送
IE0=0;//清INT0中断标志位}voidkey2_int()interrupt2{
flag=2;//设按键停止发送标志
IE1=0;//清INT1中断标志位}
voidkey_send(){
uart_init();
SBUF=sendbuf[index];
while(TI==0);
TI=0;
P2=seg[sendbuf[index]];index++;
if(index>=10)index=0;
delay(1000);}voidkey_stop(){
TR1=0;//flag=0;或TI=0都可以
} 7.7单片机与计算机的串行通信软件设计2分析:单片机方式1,fosc=11.0592MHz,9800Mbps,按键循环发送0~9,数码管显示#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintvoidEx_init(); //外部中断初始化voiduart_init();//串口初始化voiddelay(uintxms);//延时函数voidkey_send();//按键发送函数voidkey_stop();//按键停止发送函数ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcodesendbuf[]={0,1,2,3,4,5,6,7,8,9};ucharflag=0,index=0;//发送数据索引voidmain(){
Ex_init();//中断初始化
while(1)
{ switch(flag)
{
case1:key_send();break;
case2:key_stop();break
default:P2=0xbf;break;
}}}7.7单片机与计算机的串行通信三、计算机向单片机发送数据仿真实例任务要求:单片机晶振为11.0592MHz。串口方式1,波特率为9600bps。
计算机向单片机发送数据1、2、3、4。
单片机接收到数据显示在数码管(共阳)上,收到1点亮1个LED,
收到2点亮2个LED,依次类推。7.7单片机与计算机的串行通信三、计算机向单片机发送数据仿真实例任务要求:单片机晶振为11.0592MHz。串口方式1,波特率为9600bps。
计算机向单片机发送数据1、2、3、4。
单片机接收到数据显示在数码管(共阳)上,收到1点亮1个LED,
收到2点亮2个LED,依次类推。7.7单片机与计算机的串行通信软件设计2分析:单片机方式1,fosc=11.0592MHz,9800Mbps,接收1、2、3、4,数码管显示#include<reg52.h>#defineucharunsignedchar #defineuintunsignedintvoiduart_init();//串口初始化voiddelay(uintxms);//延时函数ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90};voidmain(){ uchartemp=0;uart_init();//串口初始化
while(1){
while(RI==0};
RI=0;
temp=SBUF;
P2=seg[temp];switch(temp)
{case1:P1=0xfe;break;
case2:P1=0xfc;break;
case3:P1=0xf8;break;
case4:P1=0xf0;break;
default:P1=0xff;break;
}}}voiduart_init(){
SCON=0x50; PCON=0x00;
TMOD=0x20;//T1定时方式2 TH1=0xfd; TL1=0xfd;//9600b/s TR1=1;}
7.7单片机与计算机的串行通信单片机与计算机的远距离有线通信?逻辑1:+(2~6)V
逻辑0:-(2~6)V传输距离1200米半双工方式485电平转换芯片RS-485标准:7.7单片机与计算机的串行通信单片机与手机的无线通信?ATK-HC05蓝牙模块蓝牙无线通信手机单片机蓝牙音箱蓝牙耳机7.7单片机与计算机的串行通信单片机与手机的无线通信?ESP8266WIFI模块WIFI无线通信手机单片机序号名称说明1UTXD发送引脚(与单片机RXD连接)2CH_PD3.3V(或接一个电阻4.7K)3RST复位4VCC电源(3.3V~5.0V)5GND地6GPIO2悬空7GPIO0悬空8TURXDD接收引脚(与单片机TXD连接)智能家用报警器厨房燃气wifi探测天然气WIFI定时插座7.7单片机与计算机的串行通信WIFI无线通信WiFi互联网工作原理:1、WiFi控制端软件将数据发送到云端服务器上;2、服务器软件处理数据后,发送给对应地址设备3、数据经服务器-互联网=路由器=发送给串口WiFi模块,模块内部将数据由TCP协议转换为串口协议经模块串口端发送给MCU本章小结
A/D、D/A转换接口设计08
介绍典型的并行A/D、D/A转换芯片与AT89S52单片机的硬件接口设计以及程序设计。08A/D、D/A转换接口设计01单片机与A/D转换器的接口设计02单片机与D/A转换器的接口设计8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识8.1单片机与A/D转换器的接口设计8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识模拟量和数字量转换原理1(a)△=(1/8)V(a)(b)(b)△/2=(1/15)V8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识A/D转换类型2积分型优点:转换精度高,抗干扰性能好,价格便宜。缺点:转换速度较慢,主要用于速度要求不高的场合。
逐次比较型优点:速度较快,精度较高,转换时间在几μs到几百μs之间。
型优点:具有积分式和逐次比较式ADC的双重优点,
线性度好,转换速度和分辨率高。按转换原理分类
8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识A/D转换类型2按转换精度分类
低精度:8位以下中等精度:9~12位高精度:13~16位超高精度:16为以上按转换速度分类
低速:>1ms中速:1ms~10us高速:10us~1us超高速:<1us分辨率:用数字量的位数表示。8位、12位、16位转换时间:完成一次转换所需要的时间量程:所能转换的输入电压范围转换误差:实际输出的数字量与理论输出数字量之间的差别A/D转换器主要性能指标基于ADC0804的数字电压表仿真实例8.1.2介绍模数转换器ADC0804的使用。一、设计方案二、ADC0804芯片简介三、硬件电路设计四、软件设计五、仿真任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。一、设计方案分析:单片机采用AT89S520~5V连续可变的电压是一个模拟信号,所以,要先经模数转换器转换为数字量再送入单片机。任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。图8-3数字电压表设计方案逐次比较型A/D转换器在精度、速度和价格上比较适中,在单片机系统设计中应用较为广泛。本例中采用ADC0804实现0~5V模拟电压的转换。选用4位共阳数码管显示。二、ADC0804芯片简介(1)模拟输入电压范围:0V~5V(2)分辨率:8位(0~255)
(3)
转换时间:100us(4)参考电压:2.5V(5)工作电压:5V(6)逐次比较型模数转换二、ADC0804芯片简介启动转换时序/*****启动A/D转换函数*****/voidstart(){
ADC_CS=0;
ADC_WR=1;_nop_();//延时
ADC_WR=0;//启动AD转换
nop_();ADC_WR=1; }ADC_CSADC_WR二、ADC0804芯片简介读取数据时序/*****读取A/D转换函数*****/unsignedcharreadADC(){
P1=0xff;
ADC_CS=0;ADC_RD=1;_nop_();ADC_RD=0;_nop_();
addat=P1;//读取AD转换值
ADC_RD=1;
returnaddat; }ADC_CSADC_RDP1三
、硬件电路设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。四、
软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(1)ADC0804启动模拟电压采集:调用start()函数。(2)读取ADC0804转换结果:调用readADC()函数。
转换时间:100us
方法3:
等待100us后读取结果方法1:INTR引脚与单片机一个IO口线相连,查询为低电平,读取结果方法2:INTR引脚与单片机的外部中断引脚相连,该引脚由高变低触发中断,在中断服务程序中读取结果四、
软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(3)模数转换的数字量需要转换为电压,然后再送数码管显示。标度变换:将对应的数字量大小转换成有量纲的被测工程量数值。0V5V待求电压(显示的采集电压)0255addat(转换后的数字量)模拟电压=数字量*最大电压/255四、
软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(4)0~5V模拟电压,保留2位小数,显示在数码管上。所以需要把模拟电
压进行百、十、个位分离。bai=dat*Vref/255;//标度变换
shi=dat*10*Vref/255%10;//小数后1位
ge=dat*100*Vref/255%10;//小数后第2位模拟电压=数字量*最大电压/2552.50=128*5/255C语言中:128*5/255=2整数部分128*5*10/255%10=5取电压小数后1位128*5*100/255%10=0取电压小数后第2位四、
软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(5)4位共阳数码管动态显示voiddisplay(uchardat){ucharbai,shi,ge;bai=dat*Vref/255;//标度变换
shi=dat*10*Vref/255%10;//小数后1位
ge=dat*100*Vref/255%10;//小数后2位
w0=1;P0=table[ge];//显示个位
delayms(1);P0=0xff;w0=0;w1=1;P0=table[shi];//显示十位
delayms(1);P0=0xff;w1=0;w2=1;P0=0x7f;//显示小数点
delayms(1);P0=0xff;w2=0;w3=1;P0=table[bai];//显示百位
delayms(1);P0=0xff;w3=0;}/***毫秒延时子函数***/voiddelayms(uintz){
uintx,y;
for(x=z;x>0;x--)
for(y=111;y>0;y--);}ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E};//共阳段码任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitADC_CS=P2^4;//ADC0804片选端sbitADC_RD=P2^5;//ADC0804读信号sbitADC_WR=P2^6;//ADC0804启动信号sbitw0=P2^0;//个位sbitw1=P2^1;//十位sbitw2=P2^2;//小数点sbitw3=P2^3;//百位voiddelayms(uintz);//延时函数voidstart();//启动一次AD转换ucharreadADC();//读取AD转换结果voiddisplay(uchardat);//数码管显示ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90};//共阳段码uchari=0,addat,Vref=5;voidmain(){while(1){
start();//启动A/D转换
display(addat);//显示,也是延时
readADC();//读取A/D转换
}}五、仿真1在KeilC中编写、编译代码,生成hex文件。任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。五、仿真2在Preteus中绘制电路图,加载hex文件运行。任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。8.1单片机与A/D转换器的接口设计二、基于ADC0804的数字电压表仿真实例任务要求:设计0~5V数字电压表,通过数码管实时显示,保留2位小数。ADC0804芯片简介(1)高阻抗状态输出(2)分辨率:8位(0~255)(3)存取时间:135ms(4)转换时间:100ms(5)总误差:-1~+1LSB(6)工作温度:ADC0804C为0度~70度;ADC0804L为-40度~85度(7)模拟输入电压范围:0V~5V(8)参考电压:2.5V(9)工作电压:5V(10)输出为三态结构(11)逐次比较型模数转换8.1单片机与A/D转换器的接口设计软件滤波#definea10ucharvalue;ucharfilter(){
ucharnew_value;
new_value=readADC();
if((new_value-value>a)||(value-new_value>a)returnvalue;returnnew_value;}1.限幅滤波法将本次采样值与上次采样值进行比较,若它们的差值超出允许范围,则认为本次采样值受到了干扰,应予易除。8.1单片机与A/D转换器的接口设计软件滤波#defineN11ucharfilter(){
ucharvalue_buf[N],temp;ucharcount,i,j;for(count=0;count<N;count++;)
{
value_buf[count]=readADC();delay();
}2.中值滤波法对被测参数连续采样N次(N应为奇数);将这些采样值进行排序(增序或降序);选取中间值为本次采样值。for(j=0;j<N-1;j++)//排序(增序)
{for(i=0;i<N-j;i++){if(value_buf[i]>value_buf[i+1]){
temp=value_buf[i];
value_buf[i]=value_buf[i+1];
value_buf[i+1]=temp;
}
}}returnvalue_buf[(N-1)/2];//返回中值}8.1单片机与A/D转换器的接口设计软件滤波#defineN12ucharfilter(){uintsum=0;for(count=0;count<N;count++){sum+=readADC();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025农村征地合同协议书
- 2025农村土地永久转让及生态保护合同全新制定
- 2025年度公司特色花卉组合采购服务协议3篇
- 二零二五年度地铁车站清洁与安全服务合同3篇
- 二零二五年度物流运输劳动合同劳务合同3篇
- 二零二五年度私人住宅泳池建造合同3篇
- 2025年度全款购车汽车用品赠送合同范本3篇
- 二零二五年度高校毕业生就业见习计划合作协议3篇
- 2025年度环保设备销售加盟合同协议
- 二零二五年度电力设施检修与维修合同3篇
- UBA之梦想、目标、计划、行动、信念
- 储罐水喷砂施工方案
- 每个人有每个人的爱好
- 每立方米钢筋砼钢筋含量参考值
- 小学语文教师怎样说课-ppt课件
- Q∕GDW 12147-2021 电网智能业务终端接入规范
- 猩红热ppt幻灯片课件
- 输配电线路基础知识
- 2015年日历表(超清晰A4打印版)
- 剪式汽车举升机设计
- 健康证体检表
评论
0/150
提交评论