精华内容
下载资源
问答
  • 最简洁的单片机串口通信程序,芯片STC15系列 一个同学写的,希望不算盗用版权
  • 适用于AT89c51/52单片机串口通信例程,可根据实际需求更改发送的数据和发送波特率
  • STC 51 单片机 串口通信实验

    千次阅读 2013-07-21 23:53:01
     作为第一个博客,首先谈谈我写的一个51单片机串口通信程序。  我用的是一款增强版51单片机,型号为STC12LE5A60S2。  串口通信的方式是查询方式,下面是我的源代码: /*====================================== ...

            以后不再好高骛远,要脚踏实地地做好每件事,要踏踏实实地学好单片机。

            作为第一个博客,首先谈谈我写的一个51单片机串口通信程序。

            我用的是一款增强版51单片机,型号为STC12LE5A60S2。

            1、查询方式,下面是我的源代码:

    /*======================================
    单片机型号:STC12LE5A60S2
    串口1,波特率发生器使用定时器1,定时器1工作于8位自动重载模式
    Author:fighting
    Date:2013-07-21
    =======================================*/
    
    #include <reg51.h>
    
    sfr AUXR = 0x8e;
    
    void uart_init(void)
    {
        TMOD &= 0x0f;
        TMOD |= 0x20;//8-bit,auto-reload
        PCON &=0x7f;    //Don't double baund rate
        SCON = 0x50;    //8-bit data, changeable baund rate
        AUXR |= 0x40;   //Choose 1T mode
        AUXR &= 0xfe;   //UART 1 chooses timer 1 as baund rate generator
        TL1 = 0x98;     //in order to operate on 9600 when the clock is 32MHz
        TH1 = 0x98;
        ET1 = 0;
        TR1 = 1;
    }
    
    void main(void)
    {
        unsigned char response;
        uart_init();
        while(1)
        {
    		if(RI == 1)
    		{
    			RI = 0;
    			response = SBUF;
    			SBUF = response;
    		}
        }
    }

            2、中断方式

    /*======================================
    单片机型号:STC12LE5A60S2
    串口1,波特率发生器使用定时器1,定时器1工作于8位自动重载模式
    中断方式
    Author:fighting
    Date:2013-07-21
    =======================================*/
    
    #include <reg51.h>
    
    sfr AUXR = 0x8e;
    unsigned char response;
    
    void uart_init(void)
    {
        TMOD &= 0x0f;
        TMOD |= 0x20;//8-bit,auto-reload
        PCON &=0x7f;    //Don't double baund rate
        SCON = 0x50;    //8-bit data, changeable baund rate
        AUXR |= 0x40;   //Choose 1T mode
        AUXR &= 0xfe;   //UART 1 chooses timer 1 as baund rate generator
        TL1 = 0x98;     //in order to operate on 9600 when the clock is 32MHz
        TH1 = 0x98;
        ET1 = 0;        //Disable timer 1 interrupt
        TR1 = 1;        //Turn on timer 1
        ES = 1;         //Enable serial interrupt
        EA = 1;         //Enable global interrupt
    }
    
    void serial() interrupt 4 using 3
    {
        if(RI == 1)
        {
            RI = 0;
            response = SBUF;
    		TI = 0;
    		SBUF = response;
    		while(TI == 0);
        }
    }
    void main(void)
    {
        uart_init();
        while(1);
    }



    展开全文
  • 51单片机与电脑串口通信,电脑给单片机发送一个字符,单片机收到以后在数码管上进行显示,并且将此字符返回给电脑程序对应的电路图:
  • 51 单片机串口通信程序,RS232串口通信 含详细例子。 含详细例子,RS232串口通信单片机接收发送数据的 C51程序,手把手教你用增强型51 实验板实现RS232 串口通信 51串口通信
  • 51单片机串口通信 实验仿真图: 实验原理: 主机的P3,1(TXD)连接到从机的P3,0(RXD),利用开关对主机的P1口赋值,将P1的数据存到主机SBUF,在通过串口传动到从机的SBUF,从机将接收到的数据从机的P1口体现。 说明...

    51单片机串口通信

    实验仿真图:
    在这里插入图片描述
    实验原理:
    主机的P3,1(TXD)连接到从机的P3,0(RXD),利用开关对主机的P1口赋值,将P1的数据存到主机SBUF,在通过串口传动到从机的SBUF,从机将接收到的数据从机的P1口体现。
    说明:主机和从机代码分开。

    //主机程序 (汇编)
           ORG 0000H	   //将程序放到RAM
    	   LJMP START
    	   ORG 0030H
    START: MOV SP,#60H	  //堆栈赋值
           CALL INIT	  //进入定时器和串口初始化
    MLOOP: MOV SBUF, P1
           CALL DELAY 	  //进入定时器和串口初始化
           SJMP MLOOP
    	   
    INIT:  MOV TMOD,#20H  //定时器1工作方式选择  选择了工作方式2:0010 0000 	   定时器提供了一个时间基准
    	 
    	   MOV TH1,#0FDH
    	   MOV TL1,#0FDH  //波特率9600
    	   MOV SCON,#50H  //串口工作模式选择 选择了工作方式1: 0101 0000  
    	   MOV PCON,#00H
    	   SETB TR1	   //定时器计时启动
    	   RET
    
    //延时函数	 
    DELAY: MOV R7,#0FFH
    DELAY1:MOV R6,#0FFH
    	   DJNZ R6,$		//寄存器内容减1 非0转移
    	   DJNZ R7,DELAY1
    	   RET
    	   END
    
    //从机(汇编)   
    	    ORG 0000H	   //将程序放到RAM
    		LJMP START
    		ORG 0023H	   //定时器1地址入口
    		LJMP RECEIVE
    		ORG 0030H
    START:	MOV SP,#60H		  //堆栈赋值
    		LCALL INIT		  //进入定时器和串口初始化
    		SJMP $
    
     //	定时器和串口初始化
    INIT:	MOV TMOD,#20H	//定时器1工作方式选择  选择了工作方式2:0010 0000 	   定时器提供了一个时间基准
    		MOV SCON,#50H	//串口工作模式选择 选择了工作方式1: 0101 0000  
    		MOV TH1,#0FDH	//定时器高八位	波特率9600 
    		MOV TL1,#0FDH	//定时器低八位
    		MOV PCON,#00H	//串口波特率
    		SETB EA			//总中断开关
    		SETB ES		    //串口开关
    		SETB TR1
    		RET
    RECEIVE:CLR RI		  //串口接收中断标志位,接收结束被置1 需要软件清0
    		MOV P1,SBUF	  //将SBUF接收到的数据传输到P1
    		RETI
    		END
    
    //主机程序
    
    #include<reg52.h>
    #include< intrins.h>
    #define u8 unsigned char
    #define u16 unsigned int 
    void delay1s(void);
    void Usart1Init();
    
    void main()
    {
      Usart1Init();
      LED=1;
      delay1s();
      LED=0;
      while(1)
      {
        SBUF=P1;
    	delay1s();
      }
      
    }
    
    void delay1s(void)   //误差 0us
    {
        unsigned char a,b,c;
        for(c=167;c>0;c--)
            for(b=171;b>0;b--)
                for(a=16;a>0;a--);
        _nop_();  //if Keil,require use intrins.h
    }
    
    void Usart1Init()
    {
      TMOD=0x20;//定时器1 选择工作方式2 定时模式
      TH1=0xFD;
      TL1=0xFD;//定时器1 初值  设置波特率为9600
      TR1=1;   //TR1 置1是定时器1 工作 置0时 定时器停止工作
      PCON=0x00;//PCON寄存器第七位为SMOD 波特率倍增位 SMOD=1时 波特率提高一倍 不能单独进行位操作
      SCON=0x50;//特殊功能寄存器 用以设置串行口的工作方式 接收发送控制以及设置状态标志
                //工作方式一 允许串行接收位
    }
    
    //从机程序
    #include<reg52.h>
    
    #define u8 unsigned char
    #define u16 unsigned int 
    
    void Usart1Init()
    {
      TMOD=0x20;//定时器1 选择工作方式2 定时模式
      TH1=0xFD;
      TL1=0xFD;//定时器1 初值  设置波特率为9600
      TR1=1;   //TR1 置1是定时器1 工作 置0时 定时器停止工作
      PCON=0x00;//PCON寄存器第七位为SMOD 波特率倍增位 SMOD=1时 波特率提高一倍 不能单独进行位操作
      SCON=0x50;//特殊功能寄存器 用以设置串行口的工作方式 接收发送控制以及设置状态标志
                //工作方式一 允许串行接收位
      ES=1;//寄存器IE ES串行口中断允许位
      EA=1;//寄存器IE CPU中断总允许位
    
    }
    
    void main()
    {
      Usart1Init();
      while(1);
      
    }
    
    void Usart1() interrupt 4
    {
      LED=~LED;
      P1=SBUF;//从SBUF中读取接收到的数
      RI=0;	 //SCON特殊功能寄存器 RI在数据接收成功后会由硬件置1,需要软件清0;接收中断标志位
     // while(!TI);
     // TI=0;	  //发送中断标志位 发送停止后由硬件置1,需要软件清0 
    
    }
    
    

    实验现象:拨动主机的开关,从机连接的LED就会变化。

    串口初始化编程步骤:

    1、通过SCON设置工作方式及发送/接收控制;
    2、通过PCON设置SMOD;
    3、设置波特率。

    下面对相关寄存器进行简单介绍:
    串行口控制寄存器SCON:
    在这里插入图片描述
    (1)SMO、SM1: 串行口4种工作方式选择。
    在这里插入图片描述
    (2)TI——发送中断标志位
    发送结束后由硬件置“1”,需要软件清“0”。
    (3)RI——接收中断标志位
    接收结束后由硬件置“1”,需要软件清“0”。
    特殊功能寄存器PCON:
    在这里插入图片描述
    在这里仅关注SMOD的设置,SMOD=1时,串行口波特率加倍,默认SMOD=0,波特率计算公式:
    在这里插入图片描述
    一般,将定时器/计数器1设置为工作方式2作为波特率发生器使用,常用波特率及处置如下表所示。
    在这里插入图片描述
    中断允许寄存器IE:
    在这里插入图片描述
    EA为中断源总允许位,EA=1时,中断请求被开放。
    ES为串口中断允许位,ES=1时,允许串行口中断。
    在利用定时器/计数器1作为波特率发生器时还用到TR1,它属于定时器/计数器控制寄存器TCON:
    在这里插入图片描述
    TR1=1时,启动定时器/计数器。

    展开全文
  • 单片机串口通信实验 一、实验目的 二、实验内容 三、实验步骤 四、C代码如下 五、实验结果 六、实验体会 一、实验目的 1、 掌握单片机串口通信的设计方法; 2、 了解双单片机通信的原理。 二、实验内容...

    双单片机串口通信实验

    一、实验目的

    二、实验内容

    三、实验步骤

    四、C代码如下

    五、实验结果

    六、实验体会


    一、实验目的

    1、 掌握单片机串口通信的设计方法;
    2、 了解双单片机通信的原理。

    二、实验内容

    编写发送方程序,接受方程序。

    三、实验步骤

    1 、打开 Keil 程序,执行菜单命令“ Project ” “New Project ”创建“双单片 机串口通信”项目,并选择单片机型号为 AT89C51
    2、执行菜单命令“ File ” “New”创建文件,输入源程序,保存为“双单片机 串口通信 .A51”。
    3、在“Project ”栏的 File 项目管理窗口中右击文件组, 选择“Add Files to Group ‘Source Group1 ’”将源程序“双单片机串口通信.A51”添加到项目中。
    4、执行菜单命令“ Project ” “Options for Target ‘Target 1 ’”, 在弹出的 对话框中选择“ Output ”选项卡,选中“ Greate HEX File ”。
    5、执行菜单命令“ Project ” “Build Target ”,编译源程序。如果编译成功,则在“ Output Window”窗口中显示没有错误,并创建了“双单片机串口通信 .HEX”文件。
    6、在 proteus 仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行。

    四、C代码如下

    //两个单片机通讯,使用中断法


    #include <reg51.h>
    #define uchar unsigned char
    #define uint unsigned int
    #define key_port P1
    #define dis_port P2

    void main (void)
    {
        uchar key_in=0xff;
        SCON=0x50; //MODER1,REN=1;
        TMOD=0x20; //TIMER1 MODER2;
        TH1=0xf3;  //bode=2400
        TL1=0xf3;
        ET1=1;
        TR1=1;

        EA=1;
        ES=1;
        while(1)
        {        
            if (key_in != key_port)
                {
                    key_in = key_port;
                    SBUF=key_in;
                }
        }
    }

    void get_disp (void) interrupt 4 using 0
    {
        if (RI)            //如果是串口输入引起中断
                {
                    dis_port = SBUF;
                    RI=0;
                }
         else TI=0;        //否则就是串口输出引起的中断
    }

    五、实验结果

    六、实验体会

    通过本次实验,使得我掌握了单片机串口通信的设计方法;了解了双单片机通信的 原理,从而,对于以后的多单片机通信有一定的基础,知道了一些其中的必须的东西, 我想在以后做类似的多单片机通信时会有一定的帮助。在实验的过程中,可以说数码管显示实验是没有什么难度的,因为我在前面已经做过了这么一个实验,但是在设计程序的时候,要尽可能的先料及数码管动态显示的原理然后根据具体情况才能很好的了解如 何使用了;其次是编写代码时要加注释不然后续查错很困难;最后,此次实验“双单片 机通信”的是用书上汇编语言来编写的,需要对单片机的功能、原理、使用方法和步骤 等都要有很深的了解,虽然代码书上已经给出,只是输入程序的时候要仔细,千万千万不要犯一些低级错误,这样反而会得不偿失,到最后,浪费了大把的时间仍然不能把实验顺利完成! 也是通过本次实验,让我明白了在做实验时万万不可偷工减料,否则最后吃亏的仍然是自己在第一次开始的时候一定要将电路图画好,不然的话就算程序是对的也无法观察到正确的现象,得出正确的结果;做软件设计的候要特别认真的做好每一步,如果设计的程序很长,就很难在后期的调试中找到逻辑上的错误;做设计的时候要清楚的知道单片机各个引脚和端口的功能,如果不能理解,可以请教老师同学并且在每次实验中多积累积累经验,从而可以学到更多,虽然此次实验短暂而且难做,但是做完后返回去看看,这其中还是有诸多问题,比如说:自己不够细心、编写代码时粗心大意、运
    行时不小心、画电路原理图时没有画完整等等。我在以后的实验中一定会更加注意不让此类问题的发生!
    展开全文
  • 上位机与51单片机串口通信目录:1、单片机串口通信的应用2、PC控制单片机IO口输出3、单片机控制实训指导及综合应用实例4、单片机给计算机发送数据:[实验任务]单片机串口通信的应用,通过串口,我们的个人电脑和...

    上位机与

    51

    单片机串口通信

    目录:

    1

    、单片机串口通信的应用

    2

    PC

    控制单片机

    IO

    口输出

    3

    、单片机控制实训指导及综合应用实例

    4

    、单片机给计算机发送数据:

    [

    实验任务

    ]

    单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。

    个人电脑作为上位机,向下位机单片机系统发送十六进制或者

    ASCLL

    码,单片机

    系统接收后,用

    LED

    显示接收到的数据和向上位机发回原样数据。

    [

    硬件电路图

    ]

    [

    实验原理

    ]

    RS-232

    是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串

    行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。

    RS-232

    串行接口总线适用于:设备之间的通讯距离不大于

    15m

    ,传输速率最大为

    20kBps

    RS-232

    协议以

    -5V

    15V

    表示逻辑

    1

    ;以

    +5V

    15V

    表示逻辑

    0

    我们是

    MAX232

    芯片将

    RS232

    电平转换为

    TTL

    电平的。

    一个完整的

    RS-232

    接口有

    22

    根线,采用标准的

    25

    芯插头座。我们在

    这里使用的是简化的

    9

    芯插头座。

    注意我们在这里使用的晶振是

    11.0592M

    的,而不是

    12M

    。因为波特率的设置

    需要

    11.0592M

    的。

    “串口调试助手

    V2.1.exe

    软件的使用很简单,只要将串口选择‘

    CMO1

    ’波

    特率设置为‘

    9600

    数据位为

    8

    位。打开串口(如果关闭)

    。然后在发送区里

    输入要发送的数据,单击手动发送就将数据发送出去了。注意,如果选中‘十六

    进制发送’那么发送的数据是十六进制的,必须输入两位数据。如果没有选中,

    则发送的是

    ASCLL

    码,那么单片机控制的数码管将显示

    ASCLL

    码值。

    展开全文
  • 答:只需搜索公众号"51单片机学习网"免费关注电子资料全集(免费给你确定不要?)↓↓↓文章底部更精彩一.串口通信基础1.串行通信串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。单片机采用串行通信。...
  • 实验是两个80C51单片机利用proteus进行串口通信仿真,包括软件的源代码。可以作为测试评估使用。
  • arm与51单片机之间串口通信实验

    千次阅读 2012-08-25 19:51:00
    这几天弄arm的串口通信,因为以前有点单片机的基础,于是 就选了块51单片机与其实验实验内容是在linux下编写好串口通信程序,编译后下载到arm板上运行,验证其可行性。linux下串口程序是想51中写入一个数据,并...
  • 含详细例子,RS232串口通信单片机接收发送数据的 C51程序,手把手教你用增强型51 实验板实现RS232 串口通信
  • 实验7.4:RS232串口应用实例 设计要求: 通过串口发送接收数据(串口工作方式1) 实现思路: 定时器设置 串口设置 工作方式 波特率 开启定时/计数器 串口执行 接收数据 发送...
  • 答:只需搜索公众号"51单片机学习网"免费关注电子资料全集(免费给你确定不要?)↓↓↓文章底部更精彩一.串口通信基础1.串行通信串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。单片机采用串行通信。...
  • 在以上基本任务 1 的基础上,奇校验,实现甲机和乙机的全双工通信,即甲机和乙 机都分别接 8 个开关和 8 个发光二极管,甲机 8 个开关所代表的数据能传送到乙机并在 乙机的 8 个 LED 灯显示,同时乙机 8 个开关所...
  • 该工程实现的是两个89S52之间的串行通信程序,为单向通信,双向通信只需进行稍微的修改即可实现!内附详细仿真图和实验源码!
  • 关注【电子开发圈】微信公众号,一起学习吧!...电子DIY、Arduino、51单片机、STM32单片机、FPGA…… 电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机…… 点击链接,免费下载100G+电子设计学习资料! ...
  • 实验主要用到的器件是串口连接器COMPIM和LCD12864,上位机程序用“串口调试助手”。当模拟串口打开后,在串口调试助手中发一些字符,就可以在LCD12864中显示出来了(暂时不支持中文),同时,本实验还可以在LCD...
  • 51单片机串口通信

    2018-01-01 14:19:06
    基于51单片机、C语言的串口通信实验。该文件为txt代码程序。
  • 51 单片机串口实验

    千次阅读 2016-01-25 12:02:54
    51单片机有一个全双工的串行口。在 PROTEUS 软件中,可以使用虚拟终端,和单片机的串口进行通信实验。此时,并不需要在电路中加上 TTL-RS232 电平转换器件。直接把单片机的串口,和虚拟终端连接在一起就可以了。...
  • 51单片机串口实验protues电路仿真 (单片机与单片机之间的串口通信;单片机与PC机通信······)
  • 看了很多串口通信,应该是配置问题很多代码烧进去都不对,或者没有反应。 代码控制输入,串口输出区输出自己想要的数据,下面直接上代码:(代码亲测有效) /********************...* 串口通信实验 *...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 175
精华内容 70
关键字:

51单片机串口通信实验