单片机原理与应用(C51编程+Proteus仿真) 课件 7单片机串行口_第1页
单片机原理与应用(C51编程+Proteus仿真) 课件 7单片机串行口_第2页
单片机原理与应用(C51编程+Proteus仿真) 课件 7单片机串行口_第3页
单片机原理与应用(C51编程+Proteus仿真) 课件 7单片机串行口_第4页
单片机原理与应用(C51编程+Proteus仿真) 课件 7单片机串行口_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机的串行口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(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论