语言:C PIC:16F84A程序:CCS PCW
当我编译下面的代码时,我的编译器抱怨FOR总是为真(也许int i不支持负值?):
#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条答案
按热度按时间6l7fqoea1#
使用
而不是
在CCS编译器中,整数默认是无符号的。
http://www.ccsinfo.com/downloads/ccs_c_manual.pdf
检查第38页
“所有类型,除了float,默认都是无符号的;然而,[它们]可以是没有签名或签名的。
vaqhlq812#
你的编译器要么坏了,要么是一些非标准的垃圾,其中
int
默认是无符号的。我建议使用真实的的、符合C编译器。
anhgbhbe3#
检查一下编译器生成的汇编代码,你就会知道了。或者在这里发布,这样我们就不必拥有/安装特定的编译器。好的想法与汇编(特别是在死简单的微型像PIC 16)是,它永远无法隐藏它实际上做什么:-)
我同意这里关于一些工具质量的一些评论,Microchip从来没有自己的PIC 16 C编译器,所以我们不能责怪他们:
9avjhtql4#
我只是弄清楚它与for条件和递减for上的变量类型有关。
这将删除警告,代码将正常运行。