语言: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倒计时项目,所以: 9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8,7,6,.. 。 但它在第一个周期后停止。
答案 0 :(得分:5)
使用
signed int i;
而不是
int i;
默认情况下,整数在CCS编译器中是无符号的。
http://www.ccsinfo.com/downloads/ccs_c_manual.pdf
检查第38页
“默认情况下,除浮动之外的所有类型都是无符号的;但是,[它们]可以在无符号或签名之前。
答案 1 :(得分:1)
您的编译器要么已损坏,要么是默认情况下int
未签名的非标准废话。
我建议使用真正的,符合标准的C编译器。
答案 2 :(得分:0)
检查编译器生成的汇编代码,您肯定知道。或者在这里发布,这样我们就不必拥有/安装特定的编译器。很好的思考装配(特别是像PIC16这样的死简单微处理器)是它永远无法隐藏它实际上做的事情: - )
我同意一些关于某些工具质量的评论,并且Microchip从未拥有过他们自己的PIC16 C编译器,因此我们不能责怪他们: - (