51单片机串口通信的注记

发布者:Huanle666最新更新时间:2016-05-18 来源: eefocus关键字:51单片机  串口通信 手机看文章 扫描二维码
随时随地手机看文章
最近折腾51单片机,当然学到的都是比较基础的东西,可能我认为比较复杂的概念有“中断” 和“串口通信”,这篇主要是讲串口通信

使用的自然是山大王STC89C52RC的芯片来学习

串口通信主要是C51单片机的RXD 和TXD 与上位机进行通信,由于上位机一般是电脑,所以要TTL转成电脑能读出的RS232的电路来支持   一般使用MAX232 芯片   串口通信电路如下

51单片机串口通信的注记
 

之后就可以电脑的串口与这里的串口头子接了,注意   串口先要交叉一下    即电脑的TXD 对应下位机的RXD

C51单片机串口通信模式有4种,最常用的是第一种  

方式0       同步移位寄存器方式 ,一般用来扩展I/O口,

方式1       10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制)

方式2       11位异步收发(9位数据),波特率固定

方式4       11位异步收发,波特率可变(定时器1溢出率决定)

 

51单片机串口通信的注记
 

 

各种需要配置的参数如下所示

 

51单片机串口通信的注记
 

TI 
发送中断标志位 
当发送一帧完毕后,由硬件使TI=1,向外部发送中断申请,在中断服务程序中,必须用软件手动TI = 0,否则一直卡在中断里(测试一下)

RI 
接受中断标志位  
当接收一帧完毕后,由硬件使RI = 1, 向外部发送中断申请,也必须要在中断服务程序中,用软件将其清0,取消此次中断申请

ES  
串行中断允许位 
1 为开打   0为关闭

REN 
允许串行接受位 
1 为打开   0 为关闭

SBUF 
串口缓存  
在读写完毕后,存储的是相应的读/写值(注意,SUBF实际有两个寄存器,一个放写一个放读)

SM0/1 
串口设置工作方式 
设置4种工作方式,注意,最好是设置好工作方式再开串口传授

EA 
终端总开关

TR1 
定时器1开关

TH1/TL1 
定时器初值 
为了满足9600 的波特率   所以需要将TH1  TL1 设置为0xfd

TMOD 
定时器运行模式 
在串口通信的1号方式的时候  需要打开T1的串口通信    TMOD= 0x20 ,即第二种方式,8位自动重装

ET0/1 
中断允许开关 
time0 time1

 

之后是我的印象笔记的两篇关于串口通信笔记的分享

 

http://app.yinxiang.com/shard/s20/sh/6abe8da0-d4b8-4407-9848-3142dde1bed5/ba2a0a6debaab317aaca09185ce65c71 
http://app.yinxiang.com/shard/s20/sh/0faa2671-1e95-4d08-9d12-b1bdedc0eadd/13e7a915ea347b0daf3aca30fd9a6a74

 

我自己写的个简单的串口通信  

 

 

#include  
#define uint unsigned int 
#define uchar unsigned char 
uchar code table[] = "Hi ";

uchar receiveFlag=0;

void init(){    
    TMOD = 0x20; 
    TH1 = 0xfd; 
    TL1 = 0xfd; 
   

    SM0 = 0; 
    SM1 = 1; 
    REN = 1;


    EA = 1; 
    TR1 = 1; 
}

void main(){ 
    uchar serVal,i; 
    init(); 
    receiveFlag = 1; 
    
    while(1){ 
        if(receiveFlag == 1){ 
            ES = 1; 
            while(RI==0); 
            serVal = SBUF; 
            
            RI = 0; 
            receiveFlag = 0; 
        } 
        if(receiveFlag==0){  //need to send msg; 
            for(i =0;i<3;i++){ 
                SBUF = table[i]; 
                while(TI==0); 
                TI = 0; 
            } 
            SBUF = serVal; 
            while(TI ==0); 
            TI = 0; 
            receiveFlag = 1; 
        } 
    } 
    
}


void receive_data() interrupt 4{ 
    RI = 0;//手动清0 
    ES = 0; 
    receiveFlag = 0;

}

关键字:51单片机  串口通信 引用地址:51单片机串口通信的注记

上一篇:51单片机串口通信的发送与接收
下一篇:51单片机串口通信使用类似printf函数的两种办法

推荐阅读最新更新时间:2024-03-16 14:54

串口通信协议stm32
串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 UART串口时序 UART串口配置 1)串口时钟使能。串口作为 STM32 的一个外设,其时钟由外设时钟使能寄存器控制,这里我们使用的串口1是APB2ENR寄存器的第14位。(除了串口 1 的时钟使能在 APB2ENR 寄存器,其他串口的时钟使能位都在 APB1ENR 寄存器,而 APB2(72M)的频率一般是 APB1(36M)的一倍。) 2)串口复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始
[单片机]
<font color='red'>串口通信</font>协议stm32
MCS-51单片机的内部结构介绍
1、8051单片机片内并行接口 2、MCS-51的内部资源 3、MCS-51的芯片引脚 4、单片机的工作方式 单片机的工作方式包括:复位方式、程序执行方式、单步执行方式、低功耗操作方式以及EPROM编程和校验方式。 1. 复位方式:经典的上电复位电路 2. 程序执行方式:(1)执行内部程序;(2)执行外部程序 3. 单步执行方式:用于调试程序和系统 4. 低功耗操作方式 5. 编程和校验
[单片机]
MCS-<font color='red'>51单片机</font>的内部结构介绍
51单片机C编程(十、74LS165串口输入)
通过74ls165将按键的状态串口输入到51单片机,在数码管上显示出来,每个按键对应数码管上的一段。 proteus仿真电路图如下: #include reg51.h sbit SL=P3^7 //串口接收启动端口:0- 1启动。 #define LEDPORT P0; void main() { unsigned char ucCount; SCON=0x10; //设置串口模式:模式0,允许接收。 while(1) { SL=0; SL=1; //启动接收。 while(RI==0); LEDPORT=SBUF; //转存数据。 RI=0;
[单片机]
51单片机串口通信详解-原理 寄存器 编程等
单片机的通信一般有并行通信和串行通信。并行通讯是数据的各位同时发送或接收,并行通信控制简单,传输速度快,传输线较多。 参看下图: 串行通讯传输线少,可利用电话网,但传送控制复杂。数据一位一位顺序发送或接收。 串行通讯中有一种是异步通信,即我们通常所说的串口通信。这是我们今天要分享的内容: 异步通讯用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1。用这种格式表示字符,则字符可以一个接一个地传送。 一、在异步通讯中,CPU与外设之间必须有两项规定,即字符格式和波特
[单片机]
<font color='red'>51单片机</font>的<font color='red'>串口通信</font>详解-原理 寄存器 编程等
51单片机MAX7219程序
该程序已使用过,免调试。 #include reg52.h #include intrins.h #define byte unsigned char //#define N_NOP _nop_();//_nop_();_nop_(); /////////////////////////////////////////////////////// //MAX7219 //////////////////////////////////////////////////////////////////// //管脚,变量和常数定义;DEFINE #define Model_addr 0x09 // X9 H #d
[单片机]
51单片机中断入口地址在c语言中的表示
函数类型 函数名(随便) 中断标识(不同的数字代表不同中断入口) 例如: void INT () interrupt 0 //外部中断0 {} void INT () interrupt 1 //定时/计数器0 {} void INT () interrupt 2 //外部中断1 {} void INT () interrupt 3 //定时/计数器1 {} void INT () interrupt 4 //串口 {} interrupt X 其中X表示中断号, 0表示外部中断0 1表示定时器0溢出中断 2表示外部中断1(/INT1) 3表示定时器1溢
[单片机]
C-51单片机动态数码管显示1234.5
利用数码管显示数字,可以在静态数码管上加以改良, 给出短码想要的数字可以自己修改。。。。 下面给显示1234.5的码, 这个没有用到循环语句,比较简单 #include reg51.h #define uchar unsigned char void delay(uchar x) { uchar i; while(x--) { for(i=0;i 120;i++); } } void main() //**主程序** { while(1) { P0=0Xfe; P2=0X06; delay(1); P0=0Xfd; P2=0X5b;
[单片机]
C-<font color='red'>51单片机</font>动态数码管显示1234.5
基于51单片机的数字钟
//作者:中山董豪 时间:2010年 //功能:4位数码管可以显示 时分,月日,年份;万年历,整点报时,定时自动(或手动)关闭显示器,空闲模式工作省电 //硬件:2051单片机,P1.6到P1.0分别是 A到G,P1.7=DP,P3.5=D4,P3.4=D3,P3.1=D2,P3.0=D1,P3.7控制直流蜂鸣器(整点报时)。 //.2=0(改时间),P3.3=0(改状态),6Mhz晶振。 //使用说明:默认时间为 2010年1月1日,0点0分,状态1显示时分 //按P3.2为0,状态++,状态功能分别为 1:显示时间 2:显示月日 3:显示年 4:修改分钟 5:修改时钟 6:修改年 7:修改月 8:修改日 ; //用DP来表示
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved