OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5815|回复: 5

用c#,vs做了上位机给单片机发送十六进制代码控制单片机io控制74hc595芯片从而控制灯亮灭。

[复制链接]

7

主题

14

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-13
在线时间
8 小时
发表于 2018-8-29 17:31:04 | 显示全部楼层 |阅读模式
10金钱
省略。。。。

cmdIndex=SBUF;

if(cmdIndex==0x31)
            {
                         ST=1;
                         start1=0x00;
          如何让此时SBUF清零,或者在我上位机不送数据时候,sbuf直接等于0x00
                         while(1&ST)
                          {
                            start1=SBUF;
                 if(start1!=0x00)
                           {
                           ST=0;
                           }
                          }
                          }
                          
            else if(cmdIndex==0x32)
            {
                          ST=1;
                          while(1&ST)
                           {

                                595_w(start1);
                                595_w(start1);
                                595_w(start1);
                                595_r();
                                ST=0;

                          }


vs界面按下按键1时给595送数据,按下按键2时,595会控制led亮。因为需要的功能很多,所以用很多按键来实现这些功能。每按一个按键实现一个小功能。在界面textBox
输入的十六进制直接送到595里面,按键1按下时sbuf==0x31.但是我的程序每次595的数据start1都跟按键按下时送的数据一样,请问有没有什么办法把SBUF清零呢。或者可以互不影响呢。

最佳答案

查看完整内容[请看2#楼]

可以的。 if( cmdArrived) { cmdArrived=0; if(cmdIndex) ......... }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2018-8-29 17:31:05 | 显示全部楼层
可以的。
if( cmdArrived)  
{
  cmdArrived=0;
  if(cmdIndex)
  .........
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-8-30 01:27:36 | 显示全部楼层
帮顶
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2018-8-30 10:23:53 | 显示全部楼层
SBUF,你这是51吧。用中断接收数据啊,又数据才进入,没有新数据不会进入
回复

使用道具 举报

7

主题

14

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-13
在线时间
8 小时
 楼主| 发表于 2018-8-30 10:34:50 | 显示全部楼层
miaoguoqiang 发表于 2018-8-30 10:23
SBUF,你这是51吧。用中断接收数据啊,又数据才进入,没有新数据不会进入

void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD|=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0Xfd;                                //计数器初始值设置,注意波特率是19200的
        TL1=0Xfd;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                                //打开计数器

}

void Usart() interrupt 4
{
    if (RI)  //接收到字节
    {                                                                                                                                                   
                cmdIndex = SBUF;
                RI = 0;  //清零接收中断标志位
                SBUF = cmdIndex;//将接收到的数据放入到发送寄存器
                cmdArrived = 1;  
    }
    if (TI)      //字节发送完
    {                                                                                                         
        TI = 0;  //清零发送中断标志位
    }

}


我加了中断。我的意思是我第一次发送数据0x01的时候,程序进入while循环,这时候我重新给sbuf输入数据,在while里面可以接收到吗?
回复

使用道具 举报

7

主题

14

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-13
在线时间
8 小时
 楼主| 发表于 2018-8-31 10:39:46 | 显示全部楼层
miaoguoqiang 发表于 2018-8-30 10:44
可以的。
if( cmdArrived)  
{

完美解决 ,十分感谢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 19:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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