微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用STC89c52做串口实验、T0 T1的问题?

用STC89c52做串口实验、T0 T1的问题?

时间:10-02 整理:3721RD 点击:
做的串口程序:实现计算机向单片机发送数,单片机把收到的数送回计算机。
这是用T1做波特率发生器。好使的、但是T0就不可以了、为什呢啊?
#include<reg52.h>
unsigned char temp,flag;
void main()
{
    SCON=0x50;
    TMOD=0x02;
    TH0=0xfd;
    TL0=0xfd;
    TR0=1;
    EA=1;
    ES=1;
    while(1)
    {
        if(flag==1)
        {
            flag=0;
            ES=0;
            SBUF=temp;
            while(!TI);   
            TI=0;
            ES=1;
            
        }
    }
}
void ser() interrupt 4
{
    RI=0;
    flag=1;
    //P1=SBUF;
    temp=SBUF;
}

这是用T0做波特率发生器。不好使?!
#include<reg52.h>
unsigned char temp,flag;
void main()
{
    SCON=0x50;
    TMOD=0x02;
    TH0=0xfd;
    TL0=0xfd;
    TR0=1;
    EA=1;
    ES=1;
    while(1)
    {
        if(flag==1)
        {
            flag=0;
            ES=0;
            SBUF=temp;
            while(!TI);   
            TI=0;
            ES=1;
            
        }
    }
}
void ser() interrupt 4
{
    RI=0;
    flag=1;
    //P1=SBUF;
    temp=SBUF;
}
求高手解答、?不胜感激、、、

错了、复制重复了、T1的TMOD为0x20;T0的为0x02;

用 单片机小精灵  一下OK:  11.0592MHz,,9600
#include <reg51.h>
void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
void main(void)
{
    InitUART();
}
void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        //add your code here!
    }
    else
        TI = 0;
}
void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top