精华内容
下载资源
问答
  • 本人在51开发板上经历了实际测试的程序,拿来就可以用哦!
  • 单片机串口通信,利用KERIL 51实现单片机与串口的 通信。其中使用了CRC校验
  • 8-bitreload*/TH1=0xFD;/*TH1:reloadvaluefor9600baud@11.0592MHz*/TR1=1;/*TR1:timer1run*/EA=1;.../*打开串口中断*/while(1)/*主循环不做任何动作*/{}}voidUART_SER(void)interrupt4//串行中断...

    8-bit reload*/

    TH1 = 0xFD; /* TH1:

    reload value for 9600 baud @ 11.0592MHz

    */

    TR1 = 1; /* TR1:

    timer 1 run

    */

    EA = 1;

    /*

    打开总中断

    */

    ES = 1;

    /*

    打开串口中断

    */

    while (1)

    /*

    主循环不做任何动作

    */

    {

    }

    }

    void UART_SER (void) interrupt 4 //

    串行中断服务程序

    {

    unsigned char Temp;

    //

    定义临时变量

    if(RI)

    //

    判断是接收中断产生

    {

    RI=0;

    //

    标志位清零

    Temp=SBUF;

    //

    读入缓冲区的值

    P1=Temp;

    //

    把值输出到

    P1

    口,用于观察

    SBUF=Temp;

    //

    把接收到的值再发回电脑端

    }

    if(TI)

    //

    如果是发送标志位,清零

    TI=0;

    }

    2.

    51

    单片机与电脑串口通信的

    C

    程序

    ,

    最好是中断方式的

    #include 

    #include 

    unsigned char ch;

    bit read_flag= 0 ;

    void init_serialcom( void ) //

    串口通信初始设定

    {

    SCON = 0x50 ; //UART

    为模式

    1

    8

    位数据,

    允许接收

    TMOD |= 0x20 ; //

    定时器

    1

    为模式

    2,8

    位自动重装

    PCON |= 0x80 ; //SMOD=1;

    TH1 = 0xFD ; //Baud:19200 fosc="11".0592MHz

    IE |= 0x90 ; //Enable Serial Interrupt

    TR1 = 1 ; // timer 1 run

    展开全文
  • 51单片机串口通信

    2018-04-10 21:47:44
    51单片机串口通信例程,串口一中断输出,串口通信的基本认识通信分为并行通信和串行通信,并行通信时的数据各个位同时传送.
  • 51单片机串口通信讲解,从原理、使用方法,程序例程多方面介绍。
  • 51单片机串口通信代码作者:佚名来源:本站原创点击数:9407更新时间:2007年06月17日【字体:大中小】1.发送:向总线上发命令2.接收:从总线接收命令,并分析是地址还是数据。3.定时发送:从内存中取数并向主机发送....

    51

    单片机与串口通信代码

    作者

    :

    佚名

    来源

    :

    本站原创

    点击数

    :

    9407

    更新时间:

    2007

    06

    17

    【字体:

    1.

    发送:向总线上发命令

    2.

    接收:从总线接收命令,并分析是地址还是数据。

    3.

    定时发送:从内存中取数并向主机发送

    .

    经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。

    程序如下:

    //

    这是一个单片机

    C51

    串口接收(中断)和发送例程,可以用来测试

    51

    单片机的中断接收

    //

    和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的

    i nclude 

    i nclude

    i nclude 

    #define INBUF_LEN 4

    //

    数据长度

    unsigned char inbuf1[INBUF_LEN];

    unsigned char checksum,count3 , flag,temp,ch;

    bit

    read_flag=0;

    sbit

    cp=P1^1;

    sbit

    DIR=P1^2;

    int i;

    unsigned int xdata *RAMDATA;

    /*

    定义

    RAM

    地址指针

    */

    unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ;

    void init_serialcomm(void)

    {

    SCON=0x50;

    //

    11.0592MHz

    下,设置串行口波特率为

    9600

    ,方式

    1,

    并允许接收

    PCON=0x00;

    ES=1;

    TMOD=0x21;

    //

    定时器工作于方式

    2

    ,自动装载方式

    TH0=(65536-1000)%256;

    TL0=(65536-1000)/256;

    TL1=0xfd;

    TH1=0xfd;

    ET0=1;

    TR0=1;

    TR1=1;

    //

    TI=0;

    EA=1;

    //

    TI=1;

    RAMDATA=0x1F45;

    展开全文
  • 适用于AT89c51/52单片机串口通信例程,可根据实际需求更改发送的数据和发送波特率
  • 51单片机串口通信

    2021-03-25 14:58:20
    串行通信基本介绍波特率通信校验内部结构并行通信串行通信串行通信方式同步通信异步通信串行口的控制寄存器SCON寄存器PCON寄存器中断源及优先级串行通信配置步骤相关程序简单例程1简单例程2 基本介绍 单片机通信是指...

    基本介绍

    单片机通信是指单片机和单片机 或者 单片机和计算机的相互通信,一般比较多都是单片机(下位机)和计算机(上位机)作为通信。
    串行通信其实用的还是挺多的,就比如我们在调试程序时,可以通过串行口来调试程序。像什么蓝牙模块、语音模块等等也挺多是用串行通信。

    一般通信方式为两种:并行通信 和 串行通信。

    通信制式

    一共为3种:
    单双工: 一个只能发送,一个只能接收。(相当于两个人,一个只能说话,一个只能听)
    半双工:都可以发送和接收,但是同一时刻不能发送和接收同时进行。相当于一般的对讲机 你说话的时候 你是接收不了对方说的话的。
    全双工:就是可以同时发送或者接收。相当于现在我们的手机打电话一样。可以两个人互骂哈哈

    波特率

    常用串口波特率一般为2400、4800、9600、115200…也有更低点的。
    波特率是什么?
    其实就是我们传输的速度,相当于两个人说话的语言语速,在通信时,我们得需要约定好大家的波特率。大家得统一。
    1波特率(bps) = 1位/秒 (8位1字节)
    如果想每秒传输 960 个字符 且是1个起始位、8个数据位、1个停止位(共10位) (960 X 10 = 9600)那9600bps 就是 1秒传输9600位数据。

    一般波特率越高 传输距离短(不适宜长距离传输) 波特率低 传输距离可以远点,这样稳定点。
    当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m(约250英尺)。

    通信校验

    一、奇偶校验

    在发送数据时,数据位尾随的奇偶校验位(0或1)。
    奇校验时:数据中的‘1’的个数与校验位‘1’的个数加起来为奇数。
    偶校验时:数据中的‘1’的个数与校验位‘1’的个数加起来为偶数。
    接收字符时,对于‘1’的个数进行校验,如果发现不一致,说明这个数据有错误。
    二、和校验

    和校验是发送方将所有数据块加起来(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾,接收端接收数据同时对数据块(除校验字节外)加一起,(或者各字节异或),将所得的结果与发送方的校验和进行比较,如果相同则正确,相反则接收错误。

    三、CAC校验

    CRC校验通过某种数字运算实现有效信息与校验位之间的循环校验,这种校验方法纠错能力强,比较广泛应用。

    在线计算网址

    内部结构

    在这里插入图片描述

    51主要是由两个独立的寄存器缓冲区SBUF(一个发,一个接)和发送控制器、接收控制器、输入移位寄存器及其控制门电路。
    我们主要就记住是通过SBUF发送和接收数据的,他们虽然名字一样,但是物理地址是不一样的,相当于一个房间一个前面(只能进)一个后门(只能出)不会冲突。
    比如我想发送这个 字符 ‘A’ 给对方,就直接 SBUF = ‘A’; 给放到SBUF就好啦。 接收就 直接 value = SBUF。

    并行通信

    并行通信就是8根线一起传输(如下图)—,每一根线传输1位,一次就可以传输1个字节(8位)数据了。这样传输速度就相对串行通信快,但是但是硬件成本比较高,然后不适宜长距离传输,像如果是300米那岂不是拉好多根线来作为传输。而且还容易受到干扰。
    一般我们是用串行通信比较多。
    在这里插入图片描述
    在这里插入图片描述

    串行通信

    串行通信跟并行通信区别就是 串行通信是一位一位的传输。传输速度没有并行通信那么快,但是硬件成本低,适宜长距离传输。我们一般都是用串行通信来的。

    串行通信方式

    同步通信

    同步通信也是属于串行通信,它需要一个同一个时钟信号线来控制。(如下图)
    像 IIC总线 和 SPI总线 则属于同步通信,都有一根SCL时钟线来控制的。

    在这里插入图片描述

    异步通信

    异步通信是指通信的发送和接收设备使用各自的时钟控制数据发送和接收。为使双方发送和接收协调,要求发送和接收设备的时钟尽可能一致。异步通信是以字符(构成的帧)为单位进行传输。

    一帧信息由4个部分组合:起始位、数据位、奇偶校验位、停止位。
    有的字符信息也带空闲位,即在字符之间有空闲符。

    在这里插入图片描述
    起始位其实是一个标志准备开始,因为如果不发送和接收是处于空闲状态。都是高电平,那你想发送数据或者接收数据是不是得拉低 表示起始呢,不然我都不知道啥时候开始发送和接收了。停止位也是这个道理。

    串行口的控制寄存器

    SCON寄存器

    7 6 5 4 3 2 1 0
    字节地址:98H SM0 SM1 SM2 REN TB8 RB8 TI RI

    工作模式:

    工作方式 SM0 SM1 说明 波特率
    0 0 0 同步移位寄存器(一般用于IO扩展) fosc/12
    1 0 1 10位异步收发器(8位数据) 可变,由定时器溢出率控制
    2 1 0 11位异步收发器(9位数据) fosc/64 / fosc/32
    3 1 1 11位异步收发器(9位数据) 可变

    SM2: 多机通信控制位。

    主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI
    (RB8=0时不激活RI,收到的信息丢弃;
    RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。
    当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。
    在方式0时,SM2必须是0。
    在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。

    REN: 允许串行接收位。

    由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。

    TB8: 在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
    在方式0和方式1中,该位未用。

    RB8: 在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。
    在方式1时,若SM2=0,则RB8是接收到的停止位。

    **TI:**发送中断标志位。

    当串行发送第8位数据结束时,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。

    RI: 接收中断标志位。

    当串行接收第8位数据结束时,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

    PCON寄存器

    7 6 5 4 3 2 1 0
    字节地址:97H SMOD - - - - - - -

    SMOD: 波特率倍增位。
    在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。

    中断源及优先级

    中断源符号 名称 中断标志 中断引起原因 中断号 优先级
    /INT0 外部中断0 IE0 低电平或下降沿信号 0 最高
    T0 定时器中断0 TF0 定时/计数器0 计数回0溢出 1
    /INT1 外部中断1 IE1 定电平或下降沿信号 2
    T1 定时器中断1 TF1 定时/计数器1 计数回0溢出 3
    TX/RX 串行口中断 TI/RI 串行通信完成一帧数据发送或接收 4 最低

    串口通信配置步骤

    串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。

    1、确定T1的工作方式(TMOD寄存器)
    2、确定串行口控制(SCON寄存器);
    3、计算T1的初值,装载TH1、TL1。
    4、设定是否波特率增倍 (PCON寄存器)
    5.、启动T1(TCON寄存器TR1位)
    6、设置总中断允许以及设置串行口中断(IE寄存器)
    7、优先级(IP寄存器) 看自己需求定

    关于TMOD、IE、IP等寄存器配置这里没有写,是学定时器中断的相关内容,可以点击 这里 查看相关内容。

    比如想配置一个 波特率为 9600。 我单片机是11.0592晶振。

    TMOD = 0x20; //设定定时器工作方式2 8位初值自动重装定时/计数器
    SCON = 0x50; //10位异步收发器(8位数据) 打开串口接收允许
    TH1 = 0xFD; //9600波特率
    TL1 = 0xFD;
    PCON = 0x00; //波特率不增倍
    TR1 = 1; //打开定时器1
    EA = 1;  //打开中断总开关
    ES = 1; //允许串行口中断
    

    关于初值的计算不会算可以通过一个软件 mcuelf 来快速计算,反正我不会算哈哈。或者 stc-isp串口助手 也可以。

    相关程序

    简单例程1

    我们用电脑通过串口助手发送数据给单片机 单片机将收到内容发给计算机。

    代码:

    #include <reg52.h>
    
    /*初始化串口函数*/
    void init_uart()
    {
    	TMOD = 0x20; //设定定时器工作方式2 8位初值自动重装定时/计数器
    	SCON = 0x50; //10位异步收发器(8位数据) 打开串口接收允许
    	TH1 = 0xFD; //9600波特率
    	TL1 = 0xFD;
    	PCON = 0x00; //波特率不增倍
    	TR1 = 1; //打开定时器1
    	EA = 1;  //打开中断总开关
    	ES = 1; //允许串行口中断
    }
    
    /*主函数入口*/
    void main()
    {
    	init_uart(); //启动串口
    	while(1);
    }
    
    /*串口中断服务函数*/
    void uart_dispose() interrupt 4
    {
    	unsigned char dat; //存放数据
    
        if(RI == 1) //如果有数据来
        {
    		dat = SBUF; //接收数据
            RI = 0;
    	   	SBUF = dat; //发送内容
    		while(!TI); //判断是否发送完毕
    		TI = 0; //软件清零
        }
    
    }
    

    运行结果:
    在这里插入图片描述

    简单例程2

    串口发送指令(‘1’)给单片机 单片机发送hello world 回应。

    #include <reg52.h>
    
    char code array[11] = {"hello world"}; //定义要发送的内容
    unsigned char flag = 0; //标志位
    /*初始化串口函数*/
    void init_uart()
    {
    	TMOD = 0x20; //设定定时器工作方式2 8位初值自动重装定时/计数器
    	SCON = 0x50; //10位异步收发器(8位数据) 打开串口接收允许
    	TH1 = 0xFD; //9600波特率
    	TL1 = 0xFD;
    	PCON = 0x00; //波特率不增倍
    	TR1 = 1; //打开定时器1
    	EA = 1;  //打开中断总开关
    	ES = 1; //允许串行口中断
    }
    
    /*串口发送数据函数*/
    void send_data(unsigned char c)
    {
        SBUF = c;
        while(!TI);
        TI = 0;	  //这里有TI 置 0了 不需要在串口中断再次写 否则会冲突
    }
    
    /*主函数入口*/
    void main()
    {
    	unsigned char i;
    	init_uart();
    
    	while(1)
    	{
    	 	if(flag == 1)  //收到指令 1
    		{
    			/*可以去自己设定去点亮某个LED灯丫 喇叭响起等等*/
    			for(i=0;i<11;i++)	//我这里就是发送 hello world   
    			{
    				send_data(array[i]);		
    			}
    			flag = 0; //标志位复位
    		}
    	}
    }
    
    /*串口中断服务函数*/
    void uart_dispose() interrupt 4
    {
    	unsigned char dat; //存放数据
    
        if(RI == 1) //如果有数据来
        {
    		dat = SBUF;//接收数据
    		switch(dat)
    		{
    			case '1':
    				flag = 1;
    				break;	
    						
    			default:
    				flag = 0;
    				break;
    		}
    		RI = 0; //软件置0
        }
     	/*发送字节函数那里已经有TI置0 这里不加。*/
    }
    

    运行结果:
    在这里插入图片描述

    展开全文
  • 本意是通过串口发送4个字节数据,单片机串口接收后,发送回4个字节数据(在串口助手显示出来)。 但我通过uvison3下载到stc12c5a60s2最少单片机系统,通过串口测试工具(波特率19200,校验位:无,数据位:8,停止...
  • 这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的。
  • 基于51单片机的知识总结,使用protues和keil共同学习。 我使用的是protues7.8 和 keil4,需要软件的联系我。 源码及protues仿真: 串口通信 protues电路仿真 仿真元器件 DB9接口:COMPIM 仿真电路以及使用...

    基于51单片机的知识总结,使用protues和keil共同学习。
    我使用的是protues7.8 和 keil4,需要软件的联系我。
    源码及protues仿真:https://download.csdn.net/download/sinat_33734313/11853192

    串口通信-232

    protues电路仿真

    仿真元器件

    DB9接口:COMPIM

    仿真电路以及使用软件截图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    硬件说明

    1.DB9接口
    1.1 COMPIM组件内部,自带232-TTL的电平转换功能,因此不需要再使用电平转换芯片。
    1.2 双击COMPIM组件,填写程序对应的串口信息。
    1.3 使用虚拟串口软件进行模拟。

    程序

    /*-------------------------------------------
    FileName:main.c
    Function: 串口通信
    Description:
    ---------------------------------------------
    Author: Ethan Chen
    Date: 2019-10-11
    -------------------------------------------*/
    
    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    u8 receiveData[20];
    u8 RXLen = 0;
    /*******************************************************************************
    * 函数名         :UsartInit()
    * 函数功能		   :设置串口
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    void UsartInit()
    {
    	SCON=0x50;			//设置为工作方式1
    	TMOD=0x20;			//设置计数器工作方式2
    	PCON=0x80;			//波特率加倍
    	TH1=0xF3;			//计数器初始值设置,注意波特率是4800的
    	TL1=0xF3;
    	ES=1;				//打开接收中断
    	EA=1;				//打开总中断
    	TR1=1;				//打开计数器
    }
    
    void Usart_HandleMessage(void)
    {
    	static u8 LastRXLen = 0;
    	static u8 time = 0;
    	
    	if( RXLen == 0 )	return;
    	
    	if( LastRXLen != RXLen )
    	{
    		LastRXLen = RXLen;
    	}
    	else
    	{
    		time++;
    		if( time >= 10 )
    		{
    			time = 0;
    			LastRXLen = 0;
    			if( receiveData[0] == 'S' && receiveData[1] == 'E' && receiveData[2] == 'T' )
    			{
    				u8 TXBuf[3];
    				u8 i;
    				TXBuf[0] = 'G';
    				TXBuf[1] = 'E';
    				TXBuf[2] = 'T';
    				for( i=0; i<RXLen; i++)
    				{
    					SBUF = TXBuf[i];
    					while(!TI);
    				}
    				RXLen = 0;
    			}
    		}
    	}
    	return;
    }
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能		 : 主函数
    * 输    入       : 无
    * 输    出    	 : 无
    *******************************************************************************/
    void main()
    {
    	UsartInit();  //	串口初始化
    	while(1)
    	{
    		Usart_HandleMessage();
    	}		
    }
    
    /*******************************************************************************
    * 函数名         : Usart() interrupt 4
    * 函数功能		  : 串口通信中断函数
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    void Usart() interrupt 4
    {
    	if( RI )
    	{
    		receiveData[RXLen++]=SBUF;//出去接收到的数据
    		RI = 0;//清除接收中断标志位
    	}
    	if( TI )
    	{
    		TI = 0;
    	}
    }
    

    串口通信-485

    protues电路仿真

    仿真元器件

    DB9接口:COMPIM
    MAX487

    仿真电路以及使用软件截图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    硬件说明

    1.DB9接口
    1.1 COMPIM组件内部,自带232-TTL的电平转换功能,因此需要多加一个MAX487将485电平转为TTL连接COMPIM。
    1.2 双击COMPIM组件,填写程序对应的串口信息。
    1.3 使用虚拟串口软件进行模拟。

    程序

    /*-------------------------------------------
    FileName:main.c
    Function: 串口通信
    Description:485
    ---------------------------------------------
    Author: Ethan Chen
    Date: 2019-10-11
    -------------------------------------------*/
    
    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    #include "string.h"
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    sbit RS485DIR=P1^0;	  //RS485DIR=0为接收状态  RS485DIR=1为发送状态
    
    u8 receiveData[20];
    u8 RXLen = 0;
    
    /*******************************************************************************
    * 函 数 名         : delay
    * 函数功能		   : 延时函数,i=1时,大约延时10us
    *******************************************************************************/
    //void delay(u16 i)
    //{
    //	while(i--);	
    //}
    
    /*******************************************************************************
    * 函数名         :UsartInit()
    * 函数功能		   :设置串口
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    void UsartInit()
    {
    	SCON=0X50;			//设置为工作方式1
    	TMOD=0X20;			//设置计数器工作方式2
    	PCON=0X80;			//波特率加倍
    	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
    	TL1=0XF3;
    	ES=1;						//打开接收中断
    	EA=1;						//打开总中断
    	TR1=1;					//打开计数器
    	RS485DIR=0;
    }
    
    void Usart_HandleMessage(void)
    {
    	static u8 LastRXLen = 0;
    	static u8 time = 0;
    	
    	if( RXLen == 0 )	return;
    	
    	if( LastRXLen != RXLen )
    	{
    		LastRXLen = RXLen;
    	}
    	else
    	{
    		time++;
    		if( time >= 10 )
    		{
    			time = 0;
    			LastRXLen = 0;
    			if( receiveData[0] == 'S' && receiveData[1] == 'E' && receiveData[2] == 'T' )
    			{
    				u8 TXBuf[3];
    				u8 i;
    				
    				TXBuf[0] = 'G';
    				TXBuf[1] = 'E';
    				TXBuf[2] = 'T';
    				for( i=0; i<RXLen; i++)
    				{
    					RS485DIR=1;
    					SBUF=TXBuf[i];//将接收到的数据放入到发送寄存器
    					while(!TI);			 //等待发送数据完成
    				}
    				RXLen = 0;
    				memset(&receiveData[0], 0, sizeof(receiveData));
    			}
    		}
    	}
    	return;
    }
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能		 : 主函数
    * 输    入       : 无
    * 输    出    	 : 无
    *******************************************************************************/
    void main()
    {	
    	UsartInit();  //	串口初始化
    	while(1)
    	{
    		Usart_HandleMessage();
    	}
    }
    
    /*******************************************************************************
    * 函数名         : Usart() interrupt 4
    * 函数功能		  : 串口通信中断函数
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    void Usart() interrupt 4
    {
    	if( RI )
    	{
    		receiveData[RXLen++]=SBUF;//出去接收到的数据
    		RI = 0;//清除接收中断标志位
    	}
    	
    	if( TI )
    	{
    		TI = 0;
    		RS485DIR=0;
    	}	
    }
    
    展开全文
  • 一.串口通信概念; 二.串口通信原理; 三.51单片机的串行口资源; 四、串口使用步骤; 五、例程
  • 数码管,键盘,液晶屏,串口通信,无线模块,步进电机等模块的例程
  • 51 单片机 与上位机串口通信程序设计1....程序如下://这是一个 单片机 C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的#in...
  • 实现单片机与PC机之间的通信。 有课件、例程和接口电路图。
  • 这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的
  • stc或者是51单片机的RS232例程,有收也有发,还有电路图 对于想学习串口通信的朋友有很大的帮助,助人为乐资源分就1分
  • 三、51单片机串行口结构 概况 1、控制寄存器SCON 表格1:位序号与位格式 表格2:串口工作方式 表格3:其他位功能 2、时序图 时序图 工作步骤表格 3、例程串口调试助手通信 4、例程串口实现printf ...
  • 发送:向总线上发命令2. 接收:从总线接收命令,并分析是...//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的
  • 单片机C51串口中断接收和发送测试例程(含通信协议的实现)
  • 单片机C51串口中断接收和发送测试例程(含通信协议的实现).pdf单片机C51串口中断接收和发送测试例程(含通信协议的实现).pdf
  • 单片机C51 串口中断接收和发送测试例程(含通信协议的实现).pdf
  • 基于51单片机的pwm和串口通信

    千次阅读 2017-11-14 16:39:33
    例程设置了按键可以调整100-1000hz的不同频率(100的倍数)的方波,另外还加入了串口通信,可以通过串口发送来的数字来设置相对应的频率; #include sbit PWMOUT = P0^0; unsigned char HighRH = 0; //高电平...
  • 51单片机例程.zip

    2020-10-06 17:01:44
    例程(9)-串口通信 例程(10)-内部EEPROM 例程(11)-用PCA扩展外部中断 例程(12)-用PCA实现定时器 例程(13)-用PCA输出高速脉冲 例程(14)-用PCA输出PWM 例程(15)-模数转换器ADC 例程(16)-数模转换器DAC 例程(17)-LCD1602...
  • 51单片机试验例程

    2015-05-13 18:05:08
    包括有串口通信,数码管显示,ad和da转换,ds18b20测温程序,超声波测距,按键扫描,EEPROM的应用等,适合初学者学习,对于模块化编程也可以使用
  • 51单片机特殊功能寄存器有哪些_功能是什么 最近学习中对寄存器的概念理解很迷惑,I/O口操作/中断/定时器/串口通信四大模块的寄存器应用不太明白,这篇文章,解释的不错,希望帮到各位!  1、21个寄存器介绍 2...

空空如也

空空如也

1 2 3 4 5
收藏数 90
精华内容 36
关键字:

51单片机串口通信例程