标题: 51单片机通信赋值 [打印本页]

作者: 小臭臭废    时间: 2023-11-19 18:55
标题: 51单片机通信赋值
大佬们,这个传输过来的数据是怎么给Rxdbuf赋值的啊实在没看出来


#include <REG52.H>

sbit PIN_RXD=P3^0;//定义接收引脚
sbit PIN_TXD=P3^1;//定义发出引脚

bit RxdOrTxd=0;
bit RxdExd=0;
bit TxdEnd=0;
unsigned char RxdBuf=0;
unsigned char TxdBuf=0;

void ConfigUART(unsigned int baud);
void StartTxd(unsigned char dat);
void starRxd();

void main()
{
        EA=1;
        ConfigUART(9600);
        
        while(1)
        {
                while(PIN_RXD);
                        StartRXD();
                while(!RxdEnd);
                StartTXD(RxdBuf+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=1;
}

void InterruptTimer0() interrupt 1
{
        static unsigned char cnt=0;
        if(RxdOrTxd)
        {
                cnt++;
                if(cnt<=8)
                {
                        PIN_Txd=TxdBuf&0x01;
                        TxdBuf>>=1;
                }
                else if(cnt==9)
                {
                        PIN_Txd=1;
                }
                else
                {
                        cnt=0;
                        TR0=0;
                        TxdEnd=1;
                }
        }
        else
        {
                if(cnt==0)
                {
                        if(!PIN_RXD)
                        {
                                RxdBuf=0;
                                cnt++;
                        }
                        else
                        {
                                TR0=0;
                        }
                }
                else if(cnt<=8)
                {
                        RxdBuf>>=1;
                        if(PIN_RXD)
                        {
                                RxdBuf|=0x80;
                        }
                        cnt++;
                }
                else
                {
                        cnt=0;
                        TR0=0;
                        if(PIN_RXD)
                        {
                                RxdEnd=1;
                        }
                }
        }
}
                        
                        


作者: jiban530    时间: 2023-11-20 10:12
RxdBuf>>=1是右移1位后赋值;
RxdBuf|=0x80是按位或后赋值
作者: 小臭臭废    时间: 2023-11-20 17:34
jiban530 发表于 2023-11-20 10:12
RxdBuf>>=1是右移1位后赋值;
RxdBuf|=0x80是按位或后赋值

大佬,Rxdbuf与subf寄存器有什么联系吗,不是数据存到寄存器吗主要没见定义寄存器
作者: tyrl800    时间: 2023-11-20 18:26
小臭臭废 发表于 2023-11-20 17:34
大佬,Rxdbuf与subf寄存器有什么联系吗,不是数据存到寄存器吗主要没见定义寄存器

Rxdbuf与subf寄存器没有什么联系,因为你使用的是模拟串口
作者: 小臭臭废    时间: 2023-11-20 19:42
tyrl800 发表于 2023-11-20 18:26
Rxdbuf与subf寄存器没有什么联系,因为你使用的是模拟串口

感谢终于懂了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1