标题: 单片机C语言程序 为何无法循环? [打印本页]

作者: 木示    时间: 2023-4-13 22:23
标题: 单片机C语言程序 为何无法循环?
大家好,学习EEPROM知识,想利用EEPROM上电进行递增0-4数字,但发现无法进行0-4之间的循环,不知道循环部分怎么写了?程序如图,

145.png (20.32 KB, 下载次数: 50)

这部分,不知道这样写对不对

这部分,不知道这样写对不对

作者: Hephaestus    时间: 2023-4-13 23:35
TIM_10MS_Flag是在中断里面改变的吧?用个不用的GPIO把这个标志位输出出来,用示波器看。
作者: yahooboby    时间: 2023-4-14 01:37
你试试把 char dat = 0; 改成 int dat =0;
作者: wulin    时间: 2023-4-14 06:14
将dat约束在0-4范围
dat++;
if(dat>=5) {dat=0;}
作者: ucmic    时间: 2023-4-14 07:51
dat的值,后来被从E2读出来的值覆盖,而E2的初始值,有可能是负数,自加1后一时半回还到不了0-4的范围。
试下把dat的定议为无符号数,再把此值写入E2,再读出来,接着再到你后定的程序。
作者: zch5200    时间: 2023-4-14 08:58
你是想上电一次e2里面的值加1吧,你把while(1)后面的程序全放在前面去,while(1);。让程序停在这里。
     你在死循环里一直加dat,程序没贴全不知道你什么时候写进e2的,数可能会跳过不是递增的。还有if(dat>=3) {dat=0;}dat的值是0-3循环。
作者: li64331218    时间: 2023-4-14 09:09
先把定时器中断标志去了,看看会不会循环,,按你的逻辑是0,1,2,来循环的,到不了3,和4。
作者: coody_sz    时间: 2023-4-14 11:20
if(dat>=3) dat = 0;
因为你的程序是0、1、2循环,所以当然到不了3、4。
作者: 木示    时间: 2023-4-15 10:23
Hephaestus 发表于 2023-4-13 23:35
TIM_10MS_Flag是在中断里面改变的吧?用个不用的GPIO把这个标志位输出出来,用示波器看。

,你好,看了,是10MS一个周期
作者: 木示    时间: 2023-4-15 10:28
zch5200 发表于 2023-4-14 08:58
你是想上电一次e2里面的值加1吧,你把while(1)后面的程序全放在前面去,while(1);。让程序停在这里。
   ...

你好。“不知道你什么时候写进e2的,数可能会跳过不是递增的”这句话怎么理解?没贴上的就是EEPROM的擦除,写入,读取的基本程序。这程序完全没有循环,
作者: 木示    时间: 2023-4-15 10:51
这个下载得选项是要勾选上的吧?

33333.png (236.25 KB, 下载次数: 53)

33333.png





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1