精华内容
下载资源
问答
  • 51单片机-串口-串口发送显示 1. 视频 bilibili视频地址: ...PCON电源管理寄存器 SCON串口控制寄存器 模式&波特率(宋雪松P183) SCON主要用模式1,的波特率 对应的,要用定时器T1&T2的模式2...

    51单片机-串口-串口发送显示


    1. 视频

    bilibili视频地址:

    https://www.bilibili.com/video/av92932152

    51单片机-串口-串口发送显示

    2. 文件

    文件下载链接:

    https://download.csdn.net/download/weixin_43130546/12203484

    3. 串口

    PCON电源管理寄存器

    SCON串口控制寄存器

    模式&波特率(宋雪松P183)
    SCON主要用模式1,的波特率
    对应的,要用定时器T1&T2的模式2

    TH1 = TL1 = 256 - 晶振值/12/2/16/波特率
    (256是TL1的溢出值,12指12个时钟周期,16是硬件因素)

    SBUF
    两个SBUF寄存器,分别负责接收和发送缓冲

    4. 串口配置代码

    
    EA = 1;
    
    void ConfigUART(unsigned long baud)
    {
    	TH1 = 256 - (11059200 / 12 / 32) / baud;
    	TL1 = TH1;
    		SCON = 0x50;
    	TMOD &= 0x0F;
    	TMOD |= 0x20;
    	ET1 = 0;
    		ES = 1;
    	TF1 = 0;
    	TR1 = 1;
    }
    
    void InterruptUART(void) interrupt 4
    {
    	if(RI)
    	{
    		RI = 0;
    		UARTNum = SBUF;
    		SBUF = UARTNum;
    	}
    	if(TI)
    	{
    		TI = 0;
    	}
    }
    
    

    5. 例程代码

    串口助手发送0xXX,在单片机数码管上以十进制&十六进制显示

    
    #include <reg52.h>
    
    sbit DULA = P2^6;
    sbit WELA = P2^7;
    
    unsigned char code DUTable[16] = 
    {
    	0x3F,0x06,0x5B,0x4F,
    	0x66,0x6D,0x7D,0x07,
    	0x7F,0x6F,0x77,0x7C,
    	0x39,0x5E,0x79,0x71
    };
    
    unsigned char code WETable[8] = 
    {
    	~0x80,~0x40,~0x20,~0x10,
    	~0x08,~0x04,~0x02,~0x01
    };
    
    unsigned char LedBuff[8] = 
    {
    	0x3F,0x3F,0x3F,0X40,
    	0X3F,0X3F,0X08,0X3F
    };
    
    unsigned char T0RH,T0RL;
    unsigned char UARTNum;
    
    void ConfigTimer0(unsigned char ms);
    void ConfigUART(unsigned long band);
    void ShowNum(unsigned char num);
    
    void main(void)
    {
    	EA = 1;
    	ConfigTimer0(1);
    	ConfigUART(9600);
    	while(1)
    	{
    		ShowNum(UARTNum);
    	}
    }
    
    void ConfigTimer0(unsigned char ms)
    {
    	unsigned long tmp;
    
    	tmp = 11059200 / 12;
    	tmp = tmp * ms / 1000;
    	tmp = 65536 - tmp;
    	tmp += 12;
    
    	T0RH = (unsigned char)(tmp>>8);
    	T0RL = (unsigned char)tmp;
    
    	TH0 = T0RH;
    	TL0 = T0RL;
    	TMOD &= 0xF0;
    	TMOD |= 0x01;
    	ET0 = 1;
    	TF0 = 0;
    	TR0 = 1;
    }
    
    void ConfigUART(unsigned long baud)
    {
    	TH1 = 256 - (11059200 / 12 / 32) / baud;
    	TL1 = TH1;
    		SCON = 0x50;
    	TMOD &= 0x0F;
    	TMOD |= 0x20;
    	ET1 = 0;
    		ES = 1;
    	TF1 = 0;
    	TR1 = 1;
    }
    
    void ShowNum(unsigned char num)
    {
    	LedBuff[0] = DUTable[num/1%10];
    	LedBuff[1] = DUTable[num/10%10];
    	LedBuff[2] = DUTable[num/100%10];
    
    	LedBuff[3] = 0x40;
    
    	LedBuff[4] = DUTable[num & 0x0F];
    	LedBuff[5] = DUTable[num >> 4];
    	LedBuff[6] = 0x08;
    	LedBuff[7] = 0x3F;
    }
    
    void LedScan(void)
    {
    	static unsigned char i = 0;
    
    	P0 = 0x00;
    	DULA = 1;
    	DULA = 0;
    	P0 = WETable[i];
    	WELA = 1;
    	WELA = 0;
    	P0 = LedBuff[i];
    	DULA = 1;
    	DULA = 0;
    
    	i++;
    	i &= ~0xF8;
    }
    
    void InterruptTimer0(void) interrupt 1
    {
    	TH0 = T0RH;
    	TL0 = T0RL;
    
    	LedScan();
    }
    
    void InterruptUART(void) interrupt 4
    {
    	if(RI)
    	{
    		RI = 0;
    		UARTNum = SBUF;
    		SBUF = UARTNum;
    	}
    	if(TI)
    	{
    		TI = 0;
    	}
    }
    
    
    展开全文
  • 51单片机串口通信

    2021-01-06 04:54:53
    使用串口通信,需要对SCON、PCON和TMOD三个特殊寄存器进行配置。 SCON 串口工作方式寄存器SCON(98H)的结构如下表所示: SCON 位 7 6 5 4 3 2 1 0 意义 SM0 SM1 SM2 REN TB8 RB8 TI RI SM2:多机通信控制...
  • 串口通讯

    2021-01-06 08:11:47
    串行口控制寄存器SCON和PCONa>.**串行控制寄存器** **SCON**b>.**串行控制寄存器** **PCON**2).串行口数据缓冲寄存器SBUF3).从机地址控制寄存器SADEN/SADDR4).串行口中断相关寄存器IE/IPH/IPa>.中断允许寄存器IEb...
  • TXD(P3.0)发送数据 Transmit(tx) Data 简写形式 RXD(P3.1)接受数据 Receive(rx) Data 简写形式 串行口的控制寄存器共有两个:特殊功能寄存器SCON和PCON。下面介绍这两个特殊功能寄存器各位的功能。 2.1.1、...

    学习串行口时,感觉挺复杂得 ,但是进入代码之后感觉还行,所以说还是得多练习实践。

    2.80c51的串行口结构

    2.1、内部结构介绍

    AT89S51单片机串行口的内部结构如下图所示。它有两个物理上独立的接收、发送缓冲器SBUF(属于特殊功能寄存器),可同时发送、接收数据发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,两个缓冲器共用一个特殊功能寄存器字节地址(99H)。

    TXD(P3.0)发送数据 Transmit(tx) Data 简写形式 

    RXD(P3.1)接受数据 Receive(rx) Data 简写形式 

    1. 串行口的控制寄存器共有两个:特殊功能寄存器SCON和PCON。下面介绍这两个特殊功能寄存器各位的功能。

    2.1.1、串行口控制寄存器SCON

    串行口控制寄存器SCON,字节地址98H,可位寻址,位地址为98H~9FH。SCON时一个特殊功能寄存器,用以设定串行口的工作方式,接收发送控制以设置状态标志,格式如下图所示。(不用的话 设置0,一般默认是0)

    下面介绍SCON中各位的功能。

    (1) SM0、SMl:串行口4种工作方式选择位。

    SM0、SM1两位的编码所对应的4种工作方式见下表。

    表 串行口的4种工作方式

    注:方式1最常用,以此为例!

    (2)SM2:多机通信控制位。

     

    因为多机通信是在方式2和方式3下进行的,因此SM2位主要用于方式2或方式3中。当串行口以方式2或方式3接收时,

    如果SM2=1,则只有当接收到的第9位数据(RB8)为1时,才使RI置l,产生中断请求,并将接收到的前8位数据送人SBUF;当接收到的第9位数据(RB8)为0时,则将接收到的前8位数据丢弃。

    而当SM2=0时,则不论第9位数据是l还是0,都将前8位数据送入SBUF中,并使RI置1,产生中断请求。(RB8不具有激活RI的功能)

    在方式1时,如果SM2=1,则只有收到有效的停止位时才会激活RI(接受控制器)。

    在方式0时,SM2必须为0。

    (3)REN:允许串行接收位

    由软件置1或清0。

    REN=1,允许串行口接收数据。

    REN=O,禁止串行口接收数据。

    (4)TB8:发送的第9位数据。

    方式2和方式3时,TB8是要发送的第9位数据,其值由软件置l或清O。在双机串行通信时,TB8一般作为奇偶校验位使用;在多机串行通信中用来表示主机发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧

    在方式0和1中,该位未用(0)

    (5) RB8:接收的第9位数据。

    工作在方式2和方式3时,RB8存放接收到的第9位数据。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。

    (6)TI:发送中断标志位

    串行口工作在方式0时,串行发送的第8位数据结束时TI由硬件置1,在其他工作方式中,串行口发送停止位的开始时置TI为1。TI=1,表示一帧数据发送结束。TI位的状态可供软件查询,也可申请中断。CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须由软件清0

    (7) RI:接收中断标志位

    串行口工作在方式0时,接收完第8位数据时,RI由硬件置1。在其他工作方式中,串行接收到停止位时,该位置l。RI=1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。该位的状态也可供软件查询。RI必须由软件清0。

    SCON的所有位都可进行位操作清0或置1。

    2.1.2、特殊功能寄存器PCON

    特殊功能寄存器PCON字节地址为87H,不能位寻址。PCON的格式如下图所示。

    其中,仅仅是最高位SMOD与串行口有关。

    SMOD位:波特率选择位。

    当SMOD=1时,要比SMOD=O时的波特率加倍,所以也称SMOD位为波特率倍增位。

    2.2、80c51的串行口工作方式

    由SM0、SM1两位的编码决定有4种方式!

    2.2.1、方式1、

    只介绍方式1。

    传送一帧数据的格式如图所示,其中:

    TXD为发送端引脚,RXD为接收端引脚。一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。波特率由T1或T2的溢出率确定。

    在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志(置0),否则,下一帧数据无法发送或接收。

    (1)发送:

    CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入输出移位寄存器的第9位。发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND和DATA无效,发送停止位,一帧结束,置TI=1。

     

    (2)接收:

    REN=1后,允许接收。接收器以所选波特率的16倍速率采样RXD

    端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。将接收到的9位数据前8位装入SBUF,第九位进入RB8并置RI=1,向CPU请求中断

    2.2.2、波特率计算

    在串行通信中,收发双方对发送或接受数据的速率要有约定。通过软件可对单片机串行口编程为四种方式。

    方式0和2波特率固定,

    方式1和3波特率可变,由定时器的溢出率来决定。

    各种方式的波特率计算公式;

    1)方式0的波特率=fosc/12

    2)方式2的波特率=2^smod*fosc/64

    3)方式1、3的波特率=2^smod*fosc/32

    由T1或T2的溢出率和SMOD位确定

    定时器的溢出率由定时器中的TH1计数值决定。

    T1定时器溢出率= fosc /[12*(256-TH1)]

    在单片机中,最常用的晶振频率为12MHZ和11.0592MHZ,所以选择用的波特率也相对稳定,常用的波特率以及各参数的关系表

    1)用T1:

    波特率=2^smod*T1定时器的溢出率/32,T1为方式2(这个指的是计时器工作方式,自动重装8位)//T1定时器的溢出率由TH1

    T1定时器溢出率= fosc /[12*(256-TH1)]

    例:已知fosc=6MHz,SMOD=0,设置波特率为2400,求T1的计数初值TH1。

    波特率=1/((12/fosc)*(256-X))/32=fosc/12*32(256-X)

    (256-X)=fosc/2400/384=6M/2400/384;256-X~=6.5104

    TH1~=250=FAH 只能近似计算。

    若fosc=11.0592MHz, 则256-X=11.0592M/2400/384=4068/384=12 TH1=F4H;可精确算出,对其它常用的标准波特率也是能正确算出。所以这个晶振频率是最常用的。

    如果SMOD=1,则同样的X初值得出的波特率加倍。

    2)用T2:

    在52型单片机中,串口方式1、3的波特率发生器选择由TCLK、RCLK位

    确定是T1还是T2。若TCLK=1,则发送器波特率来自T2,否则来自T1。若RCLK=1,则接收器波特率来自T2,否则来自T1。

    由T2产生的波特率与SMOD无关。T2定时的最小单元=2/fosc。T2的溢出脉冲16分频后作为串口的发送或接收脉冲。

    波特率=(1/((2/fosc)(65536-X)))/16=fosc/(32(65536-X))

    例:已知fosc=11.0592MHz,求波特率=2400时的X

    2400=11059200/(32(65536-X)) 65536-X=144 X=65392=FF70H

    2.2.3、串口使用之前的初始化

    主要设置产生波特率的定时器1串行口控制中断控制。具体步骤如下:

    1、确定T1的工作方式(编程TMOD的寄存器)

    2、计算T1 的初值,装TH1.TL1

    3、启动T1(编程中TCON中的TR1位)

    4、确定串行口控制(编程SCON寄存器,这个寄存器可以位寻址即:0x??,也可以直接操作如:SM1=?,SM0=?

    5、串行口在中断方式工作时,要进行中断设置编程IE.IP寄存器

    展开全文
  • 串口通信

    2016-08-03 22:10:22
    #include<reg52.h>unsigned char flag,num;void main() { TMOD=0x20;//定时器1工作方式2 TH1=0xfd;...//串口工作方式设置,即SCON=0X50; 选择工作模式1使能接收,允许发送,允许接收 PCON = 0x80;//1000
    #include<reg52.h>
    
    unsigned char flag,num;
    
    void main()
    {
        TMOD=0x20;//定时器1工作方式2
        TH1=0xfd;
        TL1=0xfd;//初值设定
    
        SM0=0;
        SM1=1;//串口工作方式设置,即SCON=0X50; 选择工作模式1使能接收,允许发送,允许接收
        PCON = 0x80;//1000 0000,即SMOD=1;在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0
        //方式1的波特率 =(2^SMOD/32)·(T1溢出率)
    
    
    
        EA=1;//开总中断
        TR1=1;//打开定时器1中断
        ES=1;//打开串口中断
    
        TR1=1;//启动定时器1
    
        REN=1;//串口允许接收
        SM0=0;
        SM1=1;//串口工作方式设置
    
    
    
    
        while(1)
        {
            /*if(RI==1)
            {
                RI=0;
                P0=SBUF;
            }*/
            if(flag==1)//收到数据
            {
                ES=0;
                flag=0;
                SBUF='1';//发送数据
                while(!TI);
                TI=0;
                /*SBUF='2' ;//发送数据
                while(!TI);
                TI=0;
                SBUF='8' ;//发送数据
                while(!TI);
                TI=0;*/
                ES=1;
            }
        }
    } 
    
    void ser() interrupt 4
    {
        RI=0;
        P0=SBUF;
        num=SBUF;//接受数据
        flag=1;
    }

    这里写图片描述

    展开全文
  • C51串口通讯

    2021-03-20 01:25:27
    C51串口通讯 计算机通信 串行通讯与并行通讯 并行通信:数据多位同时传送 串行通信:数据字节一位一位在一条传输线上逐个传送 ...工作方式寄存器PCON 波特率与溢出率 初值计算 初值计算例子 公式解释 代码步骤 代码示例

    电路图

    1

    计算机通信

    1,PC机与PC机通信
    2,PC机与单片机通信(本讲只讲这一种)
    3,单片机与单片机通信

    图片名称

    串行通讯与并行通讯

    并行通信通常是将数据字节的各位用多条数据线同时进行传送
    特点:控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难
    串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送
    特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂


    并行通信:数据多位同时传送

    控制简单,传输速度快,传输线较多

    图片名称

    串行通信:数据字节一位一位在一条传输线上逐个传送

    图片名称

    传输线少,可利用电话网,但传送控制复杂

    串行通讯

    1,异步通讯

    图片名称

    收、发设备使用各自时钟
    以字符(构成的帧)为单位
    字符间是异步的
    字符内各位是同步的
    特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高

    数据格式

    图片名称

    2,同步通讯

    发送方时钟与接收方时钟同步。既保持位同步,也保持字符同步

    图片名称

    传输方向分为(单工,半双工,全双工)

    图片名称

    传输速率与传输距离

    比特率:每秒钟传输二进制代码的位数
    波特率:每秒钟调制信号变化的次数,即每秒钟发送的位数,单位是:波特(Baud)
    1,波特率和比特率不总是相同的,但对于基带传输,比特率和波特率是相同的
    2,传输距离随传输速率的增加而减小


    串口结构

    图片名称

    有两个物理上独立的接收、发送缓冲器SBUF寄存器,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误


    工作方式寄存器SCON

    D7 D6 D5 D4 D3 D2 D1 D0
    功能 SM0 SM1 SM2 REN TB8 RB8 TI RI
    • RI:接收中断标志位
      接收结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)
    • TI:发送中断标志位
      发送结束时,会由硬件置1,向CPU发出中断请求。要由软件复位)
    • TB8:用来存放发送的第9位。
    • RB8:用来存放接收的第9位。
    • REN:是串行接收允许位
      0时:允许串行接收
      1时:禁止串行接收
    SM0 SM1 方式 说明 波特率
    0 0 0 移位寄存器 fosc/12 (fosc晶振频率)
    0 1 1 10位异步收发器(8位数据) 可变
    1 0 2 11位异步收发器(9位数据) fosc/64 or fosc/32
    1 1 3 11位异步收发器(9位数据) 可变

    SM2:多级通信控制位
    因为多级通信是在工作方式2和工作方式3下进行的,因此SM2主要用在工作方式2和工作方式3。
    当SM2=0时:不论接收的第9位是0还是1,都接收数据,产生中断。当SM2=1时:只有在接收到的第9位为1时,才接收数据,并产生中断;而如果接收到的第9位为0时,则将接收到的数据丢弃,不产生中断


    工作方式寄存器PCON

    D7 D6 D5 D4 D3 D2 D1 D0
    功能 SMOD - - - - - - -
    • PCON是没有位寻址的,也就是说不能直接操作* * * SMOD要直接操作PCON寄存器。
    • SMOD:是波特率是否加倍的选择位。
      0时:波特率不加倍。
      1时:波特率加倍

    波特率与溢出率

    • 波特率定义:串口通信时的速率,即每秒传输二进制代码的位数。 单位:bps;1位 = 1bps
    • 定时器的溢出率定义:定时器记满溢出的频率;即一秒内定时器溢出的次数;单位:HZ

    初值计算

    1,波特率=(2SMOD)/32定时器T1的溢出率
    定时器T1的溢出率=单片机内部时钟频率/(256-X)X是定时器的初值
    2,波特率=(2SMOD)/32(单片机内部时钟频率/(256-X))

    • 方式0:fosc/12 //fosc为系统晶振频率
    • 方式1:(2^SMOD/32)*(T1溢出率)
    • 方式2:(2^SMOD/64)*fosc
    • 方式3:(2^SMOD/32)*(T1溢出率)

    单片机中,常用的晶振频率为:12MHz和11.0592MHz,选用的波特率也相对固定

    图片名称

    初值计算例子

    通信方式为方式1,波特率为9600bps,晶振频率为11.0592MHZ,smod = 1时,定时器T1装入的初值为X
    方式1的公式
    波特率 =(2^SMOD/32)*(T1溢出率)
    则9600 = (2^1/32) * (11059200 / (256 - X) * 12)
    所以初值x = 250

    公式解释

    可以先看看上篇关于周期的内容C51定时器计数器
    一个机器周期可以传输一位bit,所以理论上晶振为11.0592M的C51在一秒内可以传输11059200位bit,但如果要设定波特率位9600,如下
    11059200 / 12 是一秒内有多少个机械周期,再除于16-(2^1/32),这里是这样的,实际上串口模块比我们模拟的要复杂和精确一些,采取的方式是把一位信号采集16次,其中第7、8、9次取出来,两次如果是高电平,那么就认定这一位数据是1,如果两次是低电平,那么就认定这一位是0,再除于计数值-(265-X),表示一秒内定时器溢出多少次,即溢出一次即传输一位bit,也就是一秒内传输多少位的波特率


    代码步骤

    先设置波特率:
    设置定时器T1为工作方式2(设置TMOD寄存器)
    给计数器赋初值(工作方式2会自动重装)
    设置串口工作方式:
    设置SCON(如果允许)
    如果使用中断方式,那么打开相应的中断和总中断。
    打开定时器T1,开始产生波特率。
    设置TRx

    代码示例

    /************************************************************
    配合串口助手使用 将pc机发出的数据传送到单片机中,单片机将接收到的数据发送到pc机 可以在串口助手上显示
    波特率:9600
    ************************************************************/
    #include<reg52.h>
    
    void UsartConfiguration()
    {
    	SCON=0X50;			//设置为工作方式1
    	TMOD=0X20;			//设置计数器工作方式2
    	PCON=0X00;		//SMOD=0,32分频
    	TH1=0Xfd;		//计数器初始值设置,注意波特率是9600的
    	TL1=0Xfd;
    	ES=1;					//打开接收中断
    	EA=1;						//打开总中断
    	TR1=1;					//打开计数器
    }
    
    void main()
    {
    	UsartConfiguration();
    	while(1);
    }
    
    void uart() interrupt 4
    {
    	unsigned char date;
    	
    	date = SBUF;//取出接收到的数据
    	RI = 0;//清除接收中断标志位	
    	SBUF = date;//将接收到的数据放回发送缓存器
    	while(!TI);//等待发送数据完成
    	TI = 0;//清除发送中断标志位
    }
    

    …Thank you for reading…______________________Heisenberg_Poppings

    展开全文
  • 串口工作方式寄存器SCON 串口工作方式寄存器SCON,SCON(Serial Control Register)串行口控制寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态。SCON既可以字节寻址,也可以位寻址,其字节地址为98...
  • 复位时SCON所有位都清0.2)PCON电源控制位寄存器PCON中只有SMOD位与串口工作有关,如下图所示SMOD:波特率倍增位。在方式1、2、3中,当SMOD = 1时,波特率提高一倍。4、串行通信工作方式根据实际需要,89...
  • 串口通讯例程

    2019-12-29 23:09:12
    例:SCON=0X50; //把SM1置1,方式1工作方式;把REN置1,串口允许接收位;01010000 (8位串口,波特率从定时器1来的,波特率=((2^...例:PCON=0X80;,把SMOD置1;工作方式1,2,3的波特率加倍,1000 0000 例:TR1=1...
  • 串口操作(字节操作) 发送 1.配置 void UsartConfiguration() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 // 51... PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,...
  • 51串口实验

    2014-07-03 17:44:45
    51单片机串口程序 void UsartConfiguration() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //SMOD=1,波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 ...
  • 51单片机串口通讯详解

    千次阅读 多人点赞 2019-11-04 22:10:20
    串口,作为单片机程序开发中最常用、最方便,也是应用最广泛的程序调试方法;无论是作为调试工具,打印出调试信息,还是对功能模块进行通信,串口是每个单片机...51单片机配置除了需要配置2个8位寄存器SCON、PCON...
  • PCON寄存器 这里只介绍IDL和PD;PD=1时单片机进入掉电模式,IDL=1时单片机进入空闲模式 掉点模式与空闲模式的区别: 掉电模式:外部晶振,CPU,定时器,串口全部停止工作,只有外部中断继续工作。唤醒方式有两种:...
  • 单片机串口中断

    2015-12-22 22:43:42
    1.首先选择工作方式即SCON方式的选择(SCON,PCON) 2.波特率设置。  ( TMOD TH1 TL1) 3.中断开启(EA) 4.开始(TR) 1)sm0, SM1为方式寄存器 1.串行工作方式0 串行口工作方式0时,串行口作同步移位...
  • 51单片机之串口通信

    万次阅读 多人点赞 2018-05-14 14:50:12
    好记性不如烂笔头,以前总以为自己记性比较好,但事实总是一次一次的打我脸,刚开始学习单片机的时候在串口通信这一块发了一段时间,才将这一块弄... 首先了解串口通信先要熟悉SCON,PCON,TMOD三个寄存器 串口工...
  • 寄存器配置PCON电源管理寄存器位序号D7D6D5D4D3D2D1D0位符号SM0SM1SM2RENTB8RB8TIRI–模式模式模式1直接清零使能串口接收模式1接收停止位发送标志位,软件清零接受标志位,软件清0//不能位寻址SCON串口控制寄存器位...
  • 文章目录前言一、计算机通信简介二、串口通信简介1、简介2、同步通信和异步通信2.1 同步通信2.2 异步通信3、串行通信的传输方式4、串口通信硬件电路5、常见接口介绍三、串口相关寄存器详解1、特殊功能寄存器SCON2、...
  • 51之串口通讯

    2019-11-05 22:19:49
    #include “reg52.h” typedef unsigned int u16; typedef unsigned char u8;... //设置串口通讯工作方式1 TMOD |= 0x20; //设置计数器工作方式2 PCON |= 0x80; //波特率加倍 TH1 = 0xf3; //波特率4800 /*...
  • 51单片机串口通讯

    2013-05-17 10:33:25
    51单片机串口通讯源码 //延时函数。。。。。。。。。。。。。。。。。 void Delay() //@11.0592MHz { unsigned char i, j, k;...//串口初始化。... PCON=0x80; SCON=0x50; TH1=0xFD; TL1=0xFD; TR1=1; }
  • 多机通信控制位REN:串口接受允许位TB8:发送的第9位数据RB8:接收的第9位数据TI:发送中断标志RI:接收中断标志电源控制寄存器PCON二、串口通信工作原理波特率/比特率三、单片机串口通信流程==中断注意事项== ...
  • 51单片机串口多机通信的原理与编程实现

    千次阅读 多人点赞 2020-06-11 12:15:44
    PCON 电源控制位寄存器 IE 中断中断使能寄存器 补充说明,波特率计算,中断源 波特率计算公式 中断源 主从机工作模式和串口初始化代码 (Master host)主机串口初始化,串口发送,中断接收代码 (Slave host ...
  • 波特率计算:在了解了串行口相关的寄存器...在方式2 中,波特率取决于PCON 中的SMOD 值,即波特率为:当SMOD=0 时,波特率为fosc/64 ;当SMOD=1 时,波特率为fosc/32。② 方式1 和方式3 的波特率可变,由定时器1 的溢...
  • 串口波特率计算

    千次阅读 2017-04-16 10:23:10
    在模式0和模式2下,串口波特率固定,模式0为Fosc/12。模式2为Fosc/32或Fosc/64,具体由PCON寄存器的SMOD位决定。 在模式1和模式3下,波特率是一个可变值,波特率可以由定时器1产生(8052可以由定时2产生),那么...
  • 开发板上有关串口通讯的有:TMOD(定时器寄存器)、CSON(串口通信寄存器)、PCON(开发板电源控制寄存器)以及与51系列单片机区别最大的AUXR(分频寄存器)四种,其中以SCON最重要,其他的只是稍微设置下即可,串口...
  • c51 uart串口乱码调试

    2015-12-13 19:25:32
    用timer2作串口波特率发生器,串口方式3做串口与电脑通讯,调试时接收乱码,发送乱码。 代码如下 void uart_init(void){ PCON &= 0x00;SCON = 0xf0;T2CON&=0xF0;//EXEN2=0,TR2=0,C/T2=0;CP/RL2=0T2CON|=0x34;RCLK=1,...
  • 51单片机串口配置

    千次阅读 2016-11-27 20:48:56
    1.配置串口工作模式为模式1。即设置SCON寄存器,SCON |= 0X50;(SM0 = 0,SM1 = 1,REN =1). 2.配置定时器1为模式2,即自动重装载模式。TMOD &= 0X0F; TMOD |= 0X20. 3.根据波特率计算TH1,TL1的初值,如果有需要可使用...
  • keil4单片机串口通信

    2020-12-16 23:02:56
    keil4单片机串口通信代码 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; void UsartInit() { SCON=0X50...
  • C语言进行串口设置的代码

    千次阅读 2018-09-15 17:24:21
    C语言进行串口设置的代码如下 void init(void) ...PCON|=0x80; TH1=0xfa; TL1=0xfa; TR1=1; ET1=1; } C语言收发串口数据的代码如下 void uart(void) interrupt 4 { char i; if(RI) { ...

空空如也

空空如也

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

串口pcon