打印
[技术问答]

有个例子看不懂

[复制链接]
893|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangcunxiake|  楼主 | 2020-7-9 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: ML51 simple GPIO toggle out demo code
//***********************************************************************************************************

#include "ML51.h"

/**
* [url=home.php?mod=space&uid=247401]@brief[/url]       GPIO input output demo
* @param       None
* [url=home.php?mod=space&uid=266161]@return[/url]      None
* [url=home.php?mod=space&uid=1543424]@Details[/url]     GPIO toggle and UART0 TXD0 send out.
*/
void main (void)
{

      MFP_P46_GPIO;
      P31_PUSHPULL_MODE;
      MFP_P50_GPIO;
      P50_PUSHPULL_MODE;
      MFP_P51_GPIO;
      P51_PUSHPULL_MODE;

/*
For UART0 P3.1 as TXD output setting
* include uart.c in Common Setting for UART0
*/
    MFP_P31_UART0_TXD;                              // UART0 TXD use P1.6
    P31_QUASI_MODE;                                  // set P1.6 as Quasi mode for UART0 trasnfer
    UART_Open(24000000,UART0_Timer1,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200

    while(1)
    {
      SFRS = 0;
      P46 ^= 1;
      while (P5|CLR_BIT6); // P56 = 1;
      while (!(P5&SET_BIT6)); // P56 = 0;

/* include timer.c for delay setting */
      Timer2_Delay(24000000,128,100,1000);
      UART_Send_Data(UART0,0x55);  
    }
  
}
while (P5|CLR_BIT6); // P56 = 1;
while (!(P5&SET_BIT6)); // P56 = 0;
这里两句怎么理解
查了下
CLR是该位为0,SET为该位为1
那么跟P5或了之后,不是没有任何影响吗,怎么能判断是否等于1呢?根据定义这个会一直为真啊。。
还有下面这个zu56为1,组合就为真,取反为假,,跳过了
如果56为0,那么为假,取反为真,等待。。
这个可以懂。上面这个不懂了。

使用特权

评论回复
沙发
huangcunxiake|  楼主 | 2020-7-9 23:17 | 只看该作者
第一个的或换成位与我觉得就对了。

使用特权

评论回复
板凳
huangcunxiake|  楼主 | 2020-7-9 23:18 | 只看该作者
大家怎么看?是不是新唐的程序员搞错了这个地方。

使用特权

评论回复
地板
jasontu| | 2020-7-10 07:51 | 只看该作者
应该写成
while (P5&SET_BIT6); //while loop, when P56 == 1
while (!(P5&SET_BIT6)); //while loop, when P56 == 0

使用特权

评论回复
5
幸福小强| | 2020-7-13 20:22 | 只看该作者
jasontu 发表于 2020-7-10 07:51
应该写成
while (P5&SET_BIT6); //while loop, when P56 == 1
while (!(P5&SET_BIT6)); //while loop, when ...

是啊,厂家的敲代码的经常犯错,估计写的代码都没测试

使用特权

评论回复
6
幸福小强| | 2020-7-13 20:22 | 只看该作者
确实是不对的,呵呵,太明显的错误了,估计写代码的没有测试。

使用特权

评论回复
7
tfqi| | 2020-8-3 18:08 | 只看该作者
低级错误啊这是

使用特权

评论回复
8
wiba| | 2020-8-3 18:08 | 只看该作者
看来官方例程也不一定都是对的

使用特权

评论回复
9
zljiu| | 2020-8-3 18:08 | 只看该作者
学习了 我也要注意

使用特权

评论回复
10
coshi| | 2020-8-3 18:08 | 只看该作者
他们要出勘误表了

使用特权

评论回复
11
aoyi| | 2020-8-3 18:09 | 只看该作者
楼主好细心啊

使用特权

评论回复
12
幸福小强| | 2020-8-3 19:21 | 只看该作者
最近我也学了一些,发现错误虽然有,但是自己都能搞定。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

205

主题

3522

帖子

11

粉丝