找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 754|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机通信赋值

[复制链接]
跳转到指定楼层
楼主
ID:1094287 发表于 2023-11-19 18:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大佬们,这个传输过来的数据是怎么给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;
                        }
                }
        }
}
                        
                        

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1096212 发表于 2023-11-20 10:12 | 只看该作者
RxdBuf>>=1是右移1位后赋值;
RxdBuf|=0x80是按位或后赋值
回复

使用道具 举报

板凳
ID:1094287 发表于 2023-11-20 17:34 来自手机 | 只看该作者
jiban530 发表于 2023-11-20 10:12
RxdBuf>>=1是右移1位后赋值;
RxdBuf|=0x80是按位或后赋值

大佬,Rxdbuf与subf寄存器有什么联系吗,不是数据存到寄存器吗主要没见定义寄存器
回复

使用道具 举报

地板
ID:275826 发表于 2023-11-20 18:26 | 只看该作者
小臭臭废 发表于 2023-11-20 17:34
大佬,Rxdbuf与subf寄存器有什么联系吗,不是数据存到寄存器吗主要没见定义寄存器

Rxdbuf与subf寄存器没有什么联系,因为你使用的是模拟串口
回复

使用道具 举报

5#
ID:1094287 发表于 2023-11-20 19:42 | 只看该作者
tyrl800 发表于 2023-11-20 18:26
Rxdbuf与subf寄存器没有什么联系,因为你使用的是模拟串口

感谢终于懂了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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