標(biāo)題: 51單片機(jī)通信賦值 [打印本頁(yè)]

作者: 小臭臭廢    時(shí)間: 2023-11-19 18:55
標(biāo)題: 51單片機(jī)通信賦值
大佬們,這個(gè)傳輸過來的數(shù)據(jù)是怎么給Rxdbuf賦值的啊實(shí)在沒看出來


#include <REG52.H>

sbit PIN_RXD=P3^0;//定義接收引腳
sbit PIN_TXD=P3^1;//定義發(fā)出引腳

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    時(shí)間: 2023-11-20 10:12
RxdBuf>>=1是右移1位后賦值;
RxdBuf|=0x80是按位或后賦值
作者: 小臭臭廢    時(shí)間: 2023-11-20 17:34
jiban530 發(fā)表于 2023-11-20 10:12
RxdBuf>>=1是右移1位后賦值;
RxdBuf|=0x80是按位或后賦值

大佬,Rxdbuf與subf寄存器有什么聯(lián)系嗎,不是數(shù)據(jù)存到寄存器嗎主要沒見定義寄存器
作者: tyrl800    時(shí)間: 2023-11-20 18:26
小臭臭廢 發(fā)表于 2023-11-20 17:34
大佬,Rxdbuf與subf寄存器有什么聯(lián)系嗎,不是數(shù)據(jù)存到寄存器嗎主要沒見定義寄存器

Rxdbuf與subf寄存器沒有什么聯(lián)系,因?yàn)槟闶褂玫氖悄M串口
作者: 小臭臭廢    時(shí)間: 2023-11-20 19:42
tyrl800 發(fā)表于 2023-11-20 18:26
Rxdbuf與subf寄存器沒有什么聯(lián)系,因?yàn)槟闶褂玫氖悄M串口

感謝終于懂了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1