精华内容
下载资源
问答
  • SCON-串行口控制寄存器:...SM0SM1工作方式功能说明波特率00方式0同步移位寄存器方式osc f /1201方式18位异步通信方式可变,由定时器控制10方式29位异步通信方式osc f /32 或osc f /6411方式39位异步通信方式可变,...

    SCON-串行口控制寄存器:可位寻址,单片机复位时,各位都被清0

    B7

    B6

    B5

    B4

    B3

    B2

    B1

    B0

    SM0

    SM1

    SM2

    REN

    TB8

    RB8

    TI

    RI

     

    SM0、SM1:串行通信方式选择位。

    SM0

    SM1

    工作方式

    功能说明

    波特率

    0

    0

    方式0

    同步移位寄存器方式

    osc f /12

    0

    1

    方式1

    8位异步通信方式

    可变,由定时器控制

    1

    0

    方式2

    9位异步通信方式

    osc f /32 或osc f /64

    1

    1

    方式3

    9位异步通信方式

    可变,由定时器控制

     

    SM2:多机通信控制位。

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

    在方式1时,若SM2=0,RB8是接受到的停止位;若SM2=1,则只有收到有效的停止位才会激活中断RI,若没有接受到有效停止位,则RI清0。

    在方式2或3时,如果SM2 = 1,则只有当接收到的第9位数据(RB8)为“1”时,才使RI置“1”,产生中断请求,并将接收到的前8位数据送入SBUF。当接收到的第9位数据(RB8)为“0”时,不提出中断,接收到的前8位数据无效。若SM2 = 0,接收到RB8后必然置位RI,产生中断,此时不论地址帧还是数据帧都能接收。

    REN:接收控制位。由软件置1或清0,“0”即禁止接收。“1”允许接收。

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

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

    TI:发送中断标志位。发送数据前由软件清0,发送结束由硬件置1。方式0,发送完8位数据时TI由硬件置“1”,其他方式中,发送停止位时置TI 为“1”。其状态可供软件查询,也可请求中断

    RI:接收中断标志位。接收前由软件清0,接收完时由硬件置“1”。方式0时,接收完第8位数据RI由硬件置“1”。在其他工作方式中,串行接收到停止位的中间时,该位置“1”。 其状态可供软件查询,也可请求中断

     

    TMOD-定时器控制寄存器:不按位寻址,高四位控制T1,低四位控制T0。地址89H

     

    B7

    B6

    B5

    B4

    B3

    B2

    B1

    B0

    GATE

    C/T

    M1

    M0

    GATE

    C/T

    M1

    M0

     

    GATE :定时操作开关控制位,当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才开始工作。若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作。

    C/T :定时器或计数器功能的选择位。C/T=1为计数器,通过外部引脚T0(P3.4)或T1(P3.5)输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。

    M1 :模式选择位高位

    M0 :模式选择位低位

     

    M1

    M0

    工作模式

    0

    0

    13位计数/计时器

    0

    1

    16位计数/计时器

    1

    0

    8位自动加载计数/计时器

    1

    1

    定时器1停止工作,定时器0分为两个独立的8位定时器TH0及TL0

     

     

    SCON=0X52 :选择8位异步通信方式,波特率可变,由定时器控制;允许接受;发送中断标志、接收中断标志分别为1、0

    TMOD=0X20:使用定时器1,8位自动加载计时器

    TH1=0XF3:设置8位自动加载计时器定时时间,设定波特率为9600

    TR1=1:启用定时器1

    展开全文
  • 红外输出串口

    千次阅读 2017-02-12 08:58:13
    #include #include"./uart/uart.h" void uart_init() { SCON = 0x50; //设置串口工作模式,打开接受允许 ...//TMOD &= 0x0f;... TMOD |= 0x20; //设置定时器1为工作方式2 TH1 = 0xfd; //波特率9600

    #include<reg52.h>
    #include"./uart/uart.h"


    void uart_init()
    {
    SCON = 0x50; //设置串口工作模式,打开接受允许
    //SM0 = 0 ; SM1 = 1 ; REN = 0 ;
    //TMOD &= 0x0f;
        TMOD |= 0x20; //设置定时器1为工作方式2
    TH1 = 0xfd;  //波特率9600
    //ET1 = 0;
    TR1 = 1;
    //EA = 1;
    //ES = 1;
    }


    void uart_send_byte(unsigned char byte)
    {
    SBUF = byte;
    //TI位自动置1,手动清0
    while(!TI);//  while(TI != 1);
    TI = 0;
    }


    void uart_send_string(unsigned char *string)
    {
        while(*string)
    {
       uart_send_byte(*string);
    string++;
    }  
    }







    #include<reg52.h>

    #include"./uart/uart.h"


    sbit IR_IN = P3^2;


    unsigned int irtime;
    bit irok = 0;
    bit startflag = 0;


    unsigned char irdata[33];
    unsigned char bitnum = 0;


    void int0_init()
    {
        IT0 = 1; //设置外部中断的触发方式
    EA = 1;
    EX0 = 1;


    }


    void timer0_init()
    {
        EA = 1;
    TMOD |= 0x02;
    TH0 = 0;
    ET0 = 1;
    TR0 = 1;
    }


    void timer0_isr() interrupt 1
    {
       irtime++;//0.256ms  引导码 13.5/0.256 = 52 1.12/0.256 = 4   0.56+1.685/0.256 = 8


    }


    void main()
    {
        timer0_init();
    int0_init();
    uart_init();
        while(1)
    {
       if(irok == 1)
    {
       uart_send_string(irdata);
       uart_send_byte('\n');
    irok = 0;
    }
    }
    }


    void int0_isr() interrupt 0
    {
        if(startflag)
    {
    if(irtime>=40&&irtime<=60)
    {
       bitnum = 0;

    irdata[bitnum] = irtime+'0';
    bitnum++;
    irtime = 0;
    if(bitnum == 33)
    {
       irok = 1;
    irdata[33] = '\0';
    bitnum = 0;
    startflag = 0;
    }
    }
    else
    {
       irtime = 0;
    startflag = 1;
    }
    }
    展开全文
  • 0214

    2017-02-14 14:35:55
    uart #include #include"./uart/uart.h" void uart_init() { SCON = 0x50; //设置串口工作模式,打开接受允许 ...//TMOD &= 0x0f;... TMOD |= 0x20; //设置定时器1为工作方式2 TH1 = 0xfd; //波特率

    uart

    #include<reg52.h>
    #include"./uart/uart.h"


    void uart_init()
    {
    SCON = 0x50; //设置串口工作模式,打开接受允许
    //SM0 = 0 ; SM1 = 1 ; REN = 0 ;
    //TMOD &= 0x0f;
        TMOD |= 0x20; //设置定时器1为工作方式2
    TH1 = 0xfd;  //波特率9600
    //ET1 = 0;
    TR1 = 1;
    //EA = 1;
    //ES = 1;
    }


    void uart_send_byte(unsigned char byte)
    {
    SBUF = byte;
    //TI位自动置1,手动清0
    while(!TI);//  while(TI != 1);
    TI = 0;
    }


    void uart_send_string(unsigned char *string)
    {
        while(*string)
    {
       uart_send_byte(*string);
    string++;
    }  
    }

    展开全文
  • 51之串口通讯

    2019-11-05 22:19:49
    #include “reg52.h” typedef unsigned int u16; typedef unsigned char u8; void uartInit() ...TMOD |= 0x20; //设置计数器工作方式2 PCON |= 0x80; //波特率加倍 TH1 = 0xf3; //波特率4800 /*...

    #include “reg52.h”

    typedef unsigned int u16;
    typedef unsigned char u8;

    void uartInit()
    {
    SCON |= 0x50; //设置串口通讯工作方式1
    TMOD |= 0x20; //设置计数器工作方式2
    PCON |= 0x80; //波特率加倍
    TH1 = 0xf3; //波特率4800
    /*
    方式1波特率 = (2^SMOD / 32)* (T1溢出率)
    T1溢出率 = fosc / 12 * (256 - TH1)
    */
    TL1 = 0xf3; //地位为自动重装
    ES = 1; //打开串口中断
    EA = 1; //打开总中断
    TR1 = 1; //打开计数器
    }

    void uart() interrupt 4
    {
    u8 reDate;
    reDate = SBUF; //接收数据
    RI = 0; //接收完时RI置1,需清除接收中断标志位
    SBUF = reDate; //将接收值放入发送寄存器中用以测试核查
    while(!TI); //等待发送数据完成
    TI = 0; //发送完时TI置1,需清除发送完成标志
    }

    void main()
    {
    uartInit();
    while(1);
    }

    展开全文
  • 双机通信

    2020-04-29 13:22:55
    #include <STC89C5xRC.H> #define RELOAD_COUNT 0xF9 //宏定义波特率发生器的载入值 4800 void UartInit(void) //9600bps@12.000... TMOD|=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1...
  • 51串口,调用printf就死机

    千次阅读 2018-05-18 16:50:34
    /串口初始化 void Usart_Init() ... TMOD |= 0x20; //设置计数器工作方式2 PCON = 0x00; //波特率加倍 TH1 = 0xFD; //计数器初值设置,波特率是9600 TL1 = 0xFD; TI = 1; //使用printf函数必备 ES = 1; ...
  • #include #include "delay.h" #include "1602.h" void uart_init(void) { SCON = 0x50;... TMOD |= 0X20;//定时器1工作方式1 TH1 = 0XFD;//波特率为9600 TR1 = 1; EA = 1; //ES = 1; } void uart
  • TMOD|=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率 EA=1; ES = 1; //允许串口中断 TL1=0xfd; TH1=0xfd; //波特率9600 TR1=1; } //温度-----------------------------------------------...
  • 首先编写串口的初始化函数。 void UsartInit() { SM0=0; SM1=1;... TMOD|=0X20; //设置计数器的工作方式 PCON|=0x80; //最高位置1表示波特率加倍 TH1=0xf3; TL1=0xf3; //设置...
  • 0211

    2017-02-11 09:18:28
    #include #include"delay.h" #include"LCD.h" //unsigned char count; //#define count 0; void uart_init() { SCON = 0x50; //设置串口工作方式,接收允许 //SM0 = 0;...TMOD |= 0x20;
  • 串口

    2017-02-11 09:19:36
    #include #include "./delay/delay.h" void uart_init() /*初始化串口*/ { SCON = 0x50; // 设置串口工作方式1,打开接受允许 ...TMOD|= 0x20; //设置定时器1为工作方式1 TH1 = 0xfd;  /
  • 串口的 初步设置

    2017-02-25 10:50:59
    #include #include "./delay/delay.h" #include "1602.h" void uart_init() { SCON = 0x50; //设置寄存器开接收 //SM0 = 0; SM1 = 1; REN = 1;... TMOD |= 0x20; //设置定时器工作方式2 TH1 = 0xfd;
  • 串口通信01_2

    2021-01-28 11:23:45
    #include <STC15F2K60S2.H> sbit p1_0 = P1^0; int myTime =0; //初始化串口 (设置串口,开启串口中断) ... TMOD |= 0x20; // TMOD: 设置定时器1工作方式2, 8-bit 自动重装 TH1 = 0xFD; //.
  • TMOD寄存器使用从高位到低位,选择方式2,M1M0为1/0,即值为,TMOD值为0x20 3.波特率设置 使用STC-ISP自带的波特率计算器 4.开启串口、开启中断 5.写中断服务 清除标志位 6.写发送函数 串口一次...
  • 串口通讯方式1编程

    千次阅读 2014-07-16 23:33:52
    在上位机上用串口调试助手发送一个字符X,单片机收到字符后返回给上位机“I get X”,串口波特率设为9600bps。 #include #define uchar unsigned char  unsigned char flag,a,...TMOD=0x20; //设定T1定时器的工作模式2
  • 串口初始化 void UARTInit() ... TMOD |= 0x20;//定时器1,工作模式2 8位自动重装 TH1 = 0xfd; // 根据下面的公式计算得到 TL1 = 0xfd; //设置比特率9600 } 例如:计算9600的波特率 SMOD在没有设置的情况下,
  • 串口通信—LED

    2019-03-30 18:13:14
    #include "reg52.h" typedef unsigned char u8; sbit led0 = P2^0; sbit led1 = P2^1; sbit led2 = P2^2;... //设置为工作方式1 TMOD = 0X20; //设置计数器工作方式2 PCON = 0X80; //波特率加倍...
  • #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8;...//选择为定时器0模式,工作方式1,仅用...
  • 串口通信

    2019-03-30 18:03:36
    #include "reg52.h" typedef unsigned char u8;... TMOD = 0X20; //设置计数器工作方式2 PCON = 0X80; //波特率加倍 TH1 = 0XF3; //计数器初始值设置,注意波特率是4800的 TL1 = 0XF3; ...
  • 1

    2020-07-18 14:45:57
    #include"reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 ...//选择为定时器0模式,工作方式1,仅用TR0打开启动。 TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; ET0=1;//打开定时器0中断允许 E...
  • TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 TL1=0XF3; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开...
  • keil4单片机串口通信

    2020-12-16 23:02:56
    keil4单片机串口通信代码 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 ... TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是
  • TMOD=0X20; //设置计数器工作方式2 // 51单片机在串口通信时需要有一个定时器去调节与计算机通信的波特率,而定时器设置时需要中断寄存器 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,...
  • c

    2017-09-28 11:26:26
    void send_char_com( unsigned char ch) { ES=0; TI=0; SBUF=ch; while (!TI );... //串口方式1,允许接收 TMOD = 0x20; //定时器1定时方式2 PCON=0x00; //cup正常工作 TCON = 0x50; //设定时器1开始计
  • TMOD=0x20; //设置计数器工作方式2 PCON=0x80; //波特率加倍 TH1=0xF4; //计数器初始值设置,波特率为4800 TL1=0xF4; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void ...
  • TMOD |= 0x20; //配置T1工作方式为2,即自动重装模式; TH1 = 0xFD; //晶振为11.0592MHZ,波特率为9600 TL1 = TH1; //将TH1中的数据添加到TL1中 PCON = 0x00; //波特率正常不倍增 SCON = 0x50...
  • #include #include "./delay/delay.h" #include //串口中断的初始化 void uart_init() ... TMOD = 0x20; //设置定时器工作方式为8位,用作串口波特率 TH1 = 0xfd; //填初值 TR1 = 1; //打开定时器 } /
  • 串口通讯例程

    2019-12-29 23:09:12
    例:SCON=0X50; //把SM1置1,方式1工作方式;把REN置1,串口允许接收位;...例:TMOD=0X20; //8位自动装载定时器 00100000 例:PCON=0X80;,把SMOD置1;工作方式1,2,3的波特率加倍,1000 0000 例:TR1=1...

空空如也

空空如也

1 2 3 4
收藏数 76
精华内容 30
关键字:

tmod工作方式0x20