精华内容
下载资源
问答
  • 51单片机 串口发送数据(只是发送)用于调试。 #include <reg51.h> #define uchar unsigned char #define uint unsigned int #define XTAL 11059200 // CUP 晶振频率 #define baudrate 9600 // 通信波特...

    51单片机 串口发送数据(只是发送)用于调试。

    #include <reg51.h>
    
    #define uchar unsigned char 
    #define uint unsigned int
    
    #define XTAL 11059200 // CUP 晶振频率
    #define baudrate 9600 // 通信波特率
    
    
    /*************************************************
    函数:uart_init
    功能:初始化串口
    出口:void
    入口:void
    *************************************************/
    void uart_init()
    {
    
    	TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
    	TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));
    	TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // 定时器0赋初值
    	SCON = 0x50;
    	PCON = 0x00;
    	TR1 = 1;
    	IE = 0x00; // 禁止任何中断
    
    }
    
    
    /*************************************************
    函数:uart_tx_byte
    功能:串口发送一个字节
    出口:void
    入口:一个字节
    *************************************************/
    void uart_tx_byte(uchar str)
    {
    	SBUF=str;
    	while(TI == 0);
    	TI = 0;
    }
    /*************************************************
    函数:uart_tx_string
    功能:串口发送一个字符串
    出口:void
    入口:字符串数组
    *************************************************/
    void uart_tx_string(uchar *str)
    {
    	while(*str!='\0')
    	{
    		uart_tx_byte(*str++);
    	}
    }
    
    void main(void)
    {
        *str="123"
        uart_init(); 
        uart_tx_byte('0');
        uart_tx_string(str);
    }

     

    展开全文
  • 上位机与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.串行通信串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。单片机采用串行通信。...

    030595351c1b38a9196f64456930f092.gif

    点击箭头处

    “蓝色字”

    ,关注我们哦!!

    问:怎么每天看到这种文章?

    答:只需搜索公众号"51单片机学习网"免费关注

    smiley_8437e205.pngsmiley_8437e205.pngsmiley_8437e205.png电子资料全集(免费给你确定不要?)

    ↓↓↓

    文章底部更精彩

    一.串口通信基础

    1.串行通信

    • 串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。单片机采用串行通信。特点是:传输线少,长距离传送成本低,但数据传送控制复杂。

    • 串行通信的传输的传输方向:单工(数据传输只能沿一个方向),半双工(传输数据和接受数据分布进行),全双工(传输和接受同步进行)。

    • 单片机采用异步通信,发送和接受设备使用各自的时钟频率,容易实现,但传输效率不高,数据格式 c8469a76cafad6a076671293cf524e62.png

    2.MAX232

    • 实验通过MAX232电平转换芯片,可把计算机串口电平(-12V~+12V)转换为单片及TTL电平。电路原理图如下 a457b4401d4d315e75d86d77231434eb.png

    3.80C51串行口

    8dfa9b68baca029de7cc84a8b700354e.png向发送缓冲器SBUF写入数据,两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。

    4.工作方式寄存器SCON

    D7D6D5D4D3D2D1D0
    功能SM0SM1SM2RENTB8RB8T1R1
    • 介绍

    • RI:接收中断标志位 
      接收结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)

    • TI:发送中断标志位 
      发送结束时,会由硬件置1,向CPU发出中断请求。要由软件复位)

    • TB8:用来存放发送的第9位。

    • RB8:用来存放接收的第9位。

    • REN:是串行接收允许位 
      0时:禁止串行接收 
      1时:允许串行接收

    5.工作方式寄存器PCON

    • PCON是没有位寻址的,也就是说不能直接操作SMOD要直接操作PCON寄存器。

    • SMOD:是波特率是否加倍的选择位。 
      0时:波特率不加倍。 
      1时:波特率加倍。

    6.串口的操作步骤:

    第一步:设置波特率,设置定时器T1为工作方式2(设置TMOD寄存器),给计数器赋初值(工作方式2会自动重装)

    第二步:设置串口工作方式,设置SCON(如果允许)。

    第三步:如果使用中断方式,那么打开相应的中断和总中断。

    第四步:打开定时器T1,开始产生波特率。TCON设置TRx。


    二.实验例程

    1.说明:本实验通过使用串口调试助手向计算机发送数据,并返回,实验不需要接线。

    2.程序源代码如下:

    C

    #include#define uchar unsigned char#define uint unsigned intuchar flag,i;/*串口初始化函数*/void init_uart(){
        SCON=0x50;  //设置为工作方式1 0101 0000
        TMOD=0x20;  //设置计数器工作方式2
        PCON=0x80;  //波特率加倍
        TH1=0xF3;   //计数器初始值,波特率为4800
        TL1=0xF3;
        EA=1;       //打开总中断
        ES=1;       //打开接受中断
        TR1=1;      //打开计数器}void main(){
        init_uart();    while(1)
        {        if(flag==1)
            {
                ES=0;      //关闭串口中断
                flag=0;
                SBUF=i;    //接受到的数据写入SBUF
                while(!TI);//判断是否发送完
                TI=0;
                ES=1;      //打开串口中断
             }
         }}   void serial() interrupt 4{
        RI=0;              //接受标志位清零
        i=SBUF;            //从SBUF读数据
        flag=1;            //说明接受到数据}

    cbc30b195108a22aa53f20df7e007a8e.png

    原文地址: http://www.mcuc.com.cn/post/19.html版权属于:智凡单片机c语言入门     本文作者:智凡单片机

    本文转自网络,版权归原作者,如果您觉得不好,请联系我们删除!

    ↙↙↙点这里

    展开全文
  • 很少看到有资料写如何以中断的方式发送一帧数据,如果以等待的发送数据帧,对高速运行的单片机来说是很浪费时间的,下面就介绍一种使用中断方式发送数据帧,操作平台采用51 mcu 首先定义一个数据帧的结构体,该...
  • 51单片机串口发送函数 #include<reg52.h> #define uchar unsigned char #define uint unsigned int unsigned char flag,i,a[2],j,k; uchar code table[ ]=""; //空格内为需要打印的字符串 void init() { ...

    51单片机串口发送函数

    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    unsigned char flag,i,a[2],j,k;
    uchar code table[ ]="";  //空格内为需要打印的字符串
    void init()
    {								 
    TMOD=0x20;
    TH1=0xfd;  //波特率9600、数据位8、停止位1。效验位无 (11.0592M)
    TL1=0xfd;
    TR1=1;
    REN=1;
    SM0=0;
    SM1=1;
    EA=1;
    ES=1;
    }
    void main( )
    {
    init();
    while(1)
    {
    if(flag==1)
    {
    ES=0;
    for(i=0;i<K;i++)//K为需要打印的字符串的字符数
    {
    SBUF=table[i];
    while(!TI);
    TI=0;
    }
    ES=1;
    for(k=0;k<0xffff;k++);
    ES=0;
    for(i=0;i<j;i++)	 
    {
    SBUF=a[i];
    while(!TI);
    TI=0;
    }
    flag=0;
    }
    }
    }
    void ser()interrupt 4
    {
    RI=0;
    a[j]=SBUF;
    flag=1;
    j=j+1;
    }
    
    
    展开全文
  • ///**********************************************//*平台:BST-V51 + Keil U3 + STC89C52//*名称:往串口发送一字节数据(可通过超级终端或者串口调试助手显示出来,// 超级终端波特率选为9600)。// 超级终端设置...
  • 串口发收数据发送主要逻辑接收主要逻辑计算波特率完整代码避坑指南 发送主要逻辑 一:声明一个你要发送的字符串列表 unsigned char code table[]={0x7E,0x03,0x01,0x02,0xEF}; 二:配置串口寄存器 这里使用的是9600...
  • } void SendData()//发送数据或回应操作完成,18字节 { BYTE n=0; for(n;n;n++) { TI=0; SBUF=ComBuf[n]; while(!TI){} TI=0; } } void SendResp()//回应上位机1个字节,在写器件函数中使用 { TI=0; SBUF=ComBuf[0]; ...
  • reg51.h> sbit k1=P1^0; int i=0; unsigned char Data[7]= {0X7E,0X05,0X44,0X00,0X01,0X40,0XEF}; void delay20ms(void) { unsigned char a,b,c; for(c=1;c>0;c--) for(b=222;b&...
  • //SM0=0,SM1=1时,串口工作在方式1,既:10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制) 75 SM1=1;//76 REN=1;//串口接收启动77 //SCON = 0x50;78 //设置中断允许寄存器IE,可位寻址79 //IE结构80 //D7 ...
  • 51 单片机 与上位机串口通信程序设计1....程序如下://这是一个 单片机 C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的#in...
  • 基于c51单片机的数据采集串口发送数据到pc的C程序
  • #include<reg52.h> #define uchar unsigned char unsigned char rtemp,sflag; unsigned char code Buffer[] = "Welcome To The MCU World...//所要发送数据 unsigned char *p; unsigned char Te...
  • <p>51单片机串口发送数组(只是发送),串口发送的是8位数据,那如果数组里的数据不是8位怎么办,最好有例程</p>
  • 单片机每次发送或者接受完数据(8位数据...因此只需要中断置位以后再缓冲区中读数据(或者发送数据)。 1 /************************************************* 2 *receive code(HEX) 3 * $ P M T K 1 8 0 ...
  • 第一种方法:在中断中处理 typedef unsigned char UINT8; volatile UINT8 u8Uart_Data; void InitialUART0_Timer1() { SCON = 0x50; //2015-05-04 TMOD = 0x20; TH1 = 0XFD;...
  • 51单片机串口,是个全双工的串口发送数据的同时,还可以接收数据。当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI置 1。无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 564
精华内容 225
关键字:

51单片机串口发送数据