找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1776|回复: 10
收起左侧

单片机C语言程序 为何无法循环?

[复制链接]
ID:706724 发表于 2023-4-13 22:23 | 显示全部楼层 |阅读模式
大家好,学习EEPROM知识,想利用EEPROM上电进行递增0-4数字,但发现无法进行0-4之间的循环,不知道循环部分怎么写了?程序如图,

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

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

使用道具 举报

ID:883242 发表于 2023-4-13 23:35 | 显示全部楼层
TIM_10MS_Flag是在中断里面改变的吧?用个不用的GPIO把这个标志位输出出来,用示波器看。
回复

使用道具 举报

ID:973041 发表于 2023-4-14 01:37 | 显示全部楼层
你试试把 char dat = 0; 改成 int dat =0;
回复

使用道具 举报

ID:213173 发表于 2023-4-14 06:14 | 显示全部楼层
将dat约束在0-4范围
dat++;
if(dat>=5) {dat=0;}
回复

使用道具 举报

ID:460753 发表于 2023-4-14 07:51 | 显示全部楼层
dat的值,后来被从E2读出来的值覆盖,而E2的初始值,有可能是负数,自加1后一时半回还到不了0-4的范围。
试下把dat的定议为无符号数,再把此值写入E2,再读出来,接着再到你后定的程序。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1004920 发表于 2023-4-14 08:58 | 显示全部楼层
你是想上电一次e2里面的值加1吧,你把while(1)后面的程序全放在前面去,while(1);。让程序停在这里。
     你在死循环里一直加dat,程序没贴全不知道你什么时候写进e2的,数可能会跳过不是递增的。还有if(dat>=3) {dat=0;}dat的值是0-3循环。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:291668 发表于 2023-4-14 09:09 | 显示全部楼层
先把定时器中断标志去了,看看会不会循环,,按你的逻辑是0,1,2,来循环的,到不了3,和4。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1034262 发表于 2023-4-14 11:20 | 显示全部楼层
if(dat>=3) dat = 0;
因为你的程序是0、1、2循环,所以当然到不了3、4。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:706724 发表于 2023-4-15 10:23 | 显示全部楼层
Hephaestus 发表于 2023-4-13 23:35
TIM_10MS_Flag是在中断里面改变的吧?用个不用的GPIO把这个标志位输出出来,用示波器看。

,你好,看了,是10MS一个周期
回复

使用道具 举报

ID:706724 发表于 2023-4-15 10:28 | 显示全部楼层
zch5200 发表于 2023-4-14 08:58
你是想上电一次e2里面的值加1吧,你把while(1)后面的程序全放在前面去,while(1);。让程序停在这里。
   ...

你好。“不知道你什么时候写进e2的,数可能会跳过不是递增的”这句话怎么理解?没贴上的就是EEPROM的擦除,写入,读取的基本程序。这程序完全没有循环,
回复

使用道具 举报

ID:706724 发表于 2023-4-15 10:51 | 显示全部楼层
这个下载得选项是要勾选上的吧?
33333.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表