找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问一下,我这个需要如何修改可以一直发送单片机引脚口的状态啊!

[复制链接]
跳转到指定楼层
楼主
ID:320022 发表于 2018-5-23 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个需要发送一次返回一个数据,我想不发送或者发送一次就可以一直发送数据
#include <reg51.h>
sbit c=P2^1;
void SendOneByte(unsigned char c)
{
    SBUF =0x30+c;
    while(!TI);
    TI = 0;
}
void main(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
while(1);
}
void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        SendOneByte((unsigned char)c);
    }
    else
        TI = 0;
}

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

使用道具 举报

沙发
ID:320022 发表于 2018-5-23 21:43 | 只看该作者
有没有老哥帮忙看一下啊
回复

使用道具 举报

板凳
ID:18297 发表于 2018-5-23 22:21 | 只看该作者
#include <reg51.h>
sbit c=P2^1;
#define AUTO_send 1   //自动发送
#define ONE_send 0     //发送1次
unsigned char send_state=0;     //状态标志,=1,自动发送。
void SendOneByte(unsigned char c)
{
    SBUF =0x30+c;
    while(!TI);
    TI = 0;
}
void delay_ms(unsigned int n)
{         unsigned int i=0,j=0;
    for(i=0;i<n;i++)
    for(j=0;j<123;j++);
}
void main(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
        while(1)
          {
                         if(send_state==AUTO_send)    //发送状态=1,自动发送
                         {
                                  SendOneByte((unsigned char)c);      //自动发送
                                  delay_ms(100);        //延时
                         }
                }          
}
void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
                          if(SBUF==ONE_send)     //接收命令=0(发送一次)
                                {
                                                SendOneByte((unsigned char)c);   //发送一次
                                          send_state=ONE_send;                      //当前状态为单次发送
                                }
                                else if(SBUF==AUTO_send)                           //接收的命令=1(自动送)
                                {
                                          send_state=AUTO_send;                    //当前状态为自动发送。主程序自动发送
                                }
    }
    else if( TI)
                {
               
        TI = 0;
                }
}
功能:
1、给单片机发送0,单片机发送一次
2、给单片机发送1,单片机自动发送,再次收到0后,变为手动发送并发送一次。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:47286 发表于 2018-5-23 22:25 | 只看该作者
扫了一下 帮你改了一下结构 具体语句没改 你试试 不一定能执行 因为不知道你语句是否有写错的地方

不过你这么写 如果程序没错误应该是上电就不间断快速发送P2.1端口的状态 而且端口状态不会变化 你收到的是一直持续不变的0或1 没什么实际用啊

#include <reg51.h>

sbit c=P2^1;

void SendOneByte(unsigned char c)
{
    SBUF =0x30+c;
    while(!TI);
    TI = 0;
}

void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
    }
    else
        {
        TI = 0;
        }
}

void InitUART()
{
        TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}

void main(void)
{
        InitUART;
       
        while(1);
        {
                SendOneByte((c);
        }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:47286 发表于 2018-5-23 22:36 | 只看该作者
补充

SendOneByte((c);

应该是

SendOneByte(c);
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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