楼主不光是不懂不同类型都有多大范围,函数调用也完全理解错误。想把延迟增加3倍,把Delay里面的参数增加3倍就可以了,而不要去瞎改已经写好的Delay函数。 |
i定义的uchar型,程序执行LED=~LED后,就一直在delay中,调不出来了 |
unchar最大值255,要改为int类型,这是一个延时函数,参数要选对! |
我也曾经遇到过同样的问题,不能大于255。 |
i 被定义为unchar, 变化范围在0-255, i<150 ,i增加到151后就退出循环了. i<500, i增加到255后就不能再增加了条件式一直满足,所以就是死循环. i 定义改为unsigned int ,就又能愉快的玩耍了. |
188610329 发表于 2021-11-3 16:54 写法属实有问题,如果这个delayms是一个延时固定毫秒级函数的话,调用处应该是改写传入参数(括号里的数值),而不是改这个for循环,如果多处调用delayms函数,按楼主的改法,到处都得改了,费时费力了,仅仅是测试的话,无所谓 |
188610329 发表于 2021-11-6 22:34 论坛很多提问的都是这样,有时候真的懒得回复。这个帖子很早就看到了,一直没有回复的兴趣。 |
QWE4562012 发表于 2021-11-6 17:22 说明你虽然上论坛求助, 也只是问问而以。 连答复都懒得看…… 在5楼已经跟你说过为什么是120这个数字了,你居然还问…… |
QWE4562012 发表于 2021-11-6 17:22 你改成60跑一下就知道了。 |
这个变量i用的<120,为什么是120这个数字? |
这个变量i用的<120,为什么是120这个数字? |
unsigned char最大数值255,改成500后会一直循环,将unsigned char改为unsigned int,就可以了,这是C语言里数据类型,建议看一下 |
跟我一样,一开始看不懂拿程序来改数值看效果 |
i的值为255最大,超过之后,数值无法确定 |
你的那个定义的变量i是无符号字符型,赋给i的值超出这个这个变量的取值范围了。要在0~255之间进行选择 |
谢谢网友热线支持 对C不会 |
溢出了,改成unsigned int i 就行了。那个i意思就是让CPU在for循环里面转圈圈,i就是记了多少圈,超过了范围就出去了。依次来达到延时目的 |
既然是仿真,那么在P1.0接示波器看看一个波形的时间是多少。 |
因为,i++ 到255之后又变回0,所以, 你的 i 永远小于500,因此,for(i=0;i<500;i++) 可以近似的看成 while(1); 进了循环之后不会出来。程序就卡死在那里了。 最后,这个带参delayms 应该是计算过的,看上去是12T的单片机 配合前面的while 延时1ms 就需要 for 120 次。所以就算你要改也不应该改 i 这里,而应该改 Delayms() 括号里的数字才对。 |
建议,学习一下各种类型得定义,以及范围 |
unsigned char范围0~255 |
因为你的i最大255 |