2

语言:C PIC:16F84A 程序:CCS PCW

当我编译以下代码时,我的编译器抱怨 FOR 始终为真(也许 int 我不支持负值?):

#include <16F84A.h>
#FUSES XT
#use delay(clock=4M)
byte const display[10] = {63,6,91,79,102,109,124,7,127,103};

void main()
{
   set_tris_b(0);
   while(True)
   {
   int i;
      for(i=9;i>=0;--i)
      {
         output_b(display[i]);
         delay_ms(300);
      }
   }
}

它的 PIC Countdown 项目,所以:9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8 ,7,6,... 但它在第一个周期后停止。

4

3 回答 3

5

利用

    signed int i;

代替

    int i;

在 CCS 编译器中,整数默认是无符号的。

http://www.ccsinfo.com/downloads/ccs_c_manual.pdf

检查第 38 页

“所有类型,除了浮点数,默认情况下都是无符号的;但是,[它们] 前面可能有无符号或有符号。

于 2013-03-08T07:45:00.850 回答
1

你的编译器要么坏了,要么是一些非标准的废话,int默认情况下是无符号的。

我建议改用真正的、符合标准的 C 编译器。

于 2013-03-08T07:51:23.980 回答
0

检查编译器生成的汇编代码,你就知道了。或者在这里发布,这样我们就不必拥有/安装特定的编译器。组装的好想法(特别是在像 PIC16 这样的死简单的微控制器上)是它永远无法隐藏它的实际作用:-)

我同意这里关于某些工具质量的评论,而且 Microchip 从来没有自己的 PIC16 C 编译器,所以我们不能责怪他们:-(

于 2013-03-18T17:53:29.213 回答