登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 串口通信

[复制链接]
发表于 2022-2-8 17:15:47 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 单片机
开始时间: 2022-02-08
结束时间: 2022-02-08
利用STC实现不同单片机之间的通信主要要了解串口数据如何发送对时域进行深层次的理解
在发送区发送一个数字接收区将他加一
#include<reg52.h>

sbit PIN_RXD=P3^0;
sbit PIN_TXD=P3^0;

bit rxdortxd=0;
bit rxdend=0;
bit txdend=0;
unsigned char rxdbuff=0;
unsigned char txdbuff=0;

void ConfigUART(unsigned int baud);
void StartTXD(unsigned  char dat);
void StartRXD();

void main()
{
EA=1;
        ConfigUART(9600);
        while(1)
        {
        while(PIN_RXD);
        StartRXD();
                while(!rxdend);
                         StartTXD(rxdbuff+1);
                while(!txdend);
        }
}

void  ConfigUART(unsigned int baud )
{
TMOD&=0xF0;
        TMOD|=0x02;
        TH0=256-(11059200/12)/baud;
}

void StartRXD()
{
TL0=256-((256-TH0)>>1);
ET0=1;
        TR0=1;
rxdend=0;
rxdortxd=0;
}

void StartTXD(unsigned char dat)
{        txdbuff=dat;
TL0=TH0;
ET0=1;
        TR0=1;
        PIN_TXD=0;
        txdend=0;
        rxdortxd=1;
}

void InterruptTimer0() interrupt 1
{
static unsigned char cnt=0;
        if(rxdortxd)
        {
        cnt++;
                if(cnt<=8)
                {
                PIN_TXD=txdbuff&0x01;
                        txdbuff>>=1;       
                }
        else if(cnt==9)
        {
                PIN_TXD=1;
        }
        else
        {
        cnt=0;
                TR0=0;
                txdend=1;
        }
        }
else
{
if(cnt==0)
{

if(!PIN_RXD)
{
rxdbuff=0;
        cnt++;
}
else
{
TR0=0;
}
}
else if(cnt<=8)
{
rxdbuff>>=1;
        if(PIN_RXD)
        {
        rxdbuff|=0x80;
        }
        cnt++;
}
else
{
cnt=0;
        TR0=0;
        if(PIN_RXD)
        {
        rxdend=1;
        }
}
}


}


好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表