找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1543|回复: 25
收起左侧

[已解决]奇怪,我的单片机计数器0工作1状态下只能计10299以下的数?

[复制链接]
ID:776619 发表于 2022-3-11 13:52 | 显示全部楼层 |阅读模式
工作1是16位的啊,最高可以60000多的计数量的。单片机芯片是STC516RD+的。好奇怪!
回复

使用道具 举报

ID:776619 发表于 2022-3-11 13:54 | 显示全部楼层
计数器1一样的,工作方式1也是只能计10299以下的数(包括10299)。
回复

使用道具 举报

ID:491577 发表于 2022-3-11 19:42 | 显示全部楼层
程序呢?你怎么确定只能够计数到10299?
回复

使用道具 举报

ID:624769 发表于 2022-3-11 20:14 | 显示全部楼层
10299  =>   0010 1000 0011 1011

所以,你也不用去捉摸其他有的没有的,就是你程序写错了。
回复

使用道具 举报

ID:509548 发表于 2022-3-11 23:35 | 显示全部楼层
就像楼上说的  绝对是程序的问题
回复

使用道具 举报

ID:776619 发表于 2022-3-12 11:02 | 显示全部楼层
程序是没有问题的,一个个数代进去试的,高开10299就不运行了。比如是10000的话,另一全局变量定时来就加1.满100清零,相当开一秒,延后时钟运算显示,定时10299以下一切正常,想改比如50000,全局变量满20清零,也相当于1秒,然后时钟就不跳了。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 11:09 | 显示全部楼层
本帖最后由 wolfinn 于 2022-3-12 11:19 编辑

你们也别武断的说我的程序错了,这只是改TH0和THL0=(65536-10000)/2565;THL0=(65536-10000)%2565;改这个10000这个数而已,从10000到10299都可以,再多1都不行。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 11:16 | 显示全部楼层
用定时0时TMOD为0x01,用定时1时TMOD为0x10。两定时都是在可以跳的情况下改值的,正常时秒能跳,满60秒分钟也能跳,。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 11:30 | 显示全部楼层
除了一个可能没试,就是在外面给的是10299,中断里面重装时给10300,这样应该能跳一个秒数。
回复

使用道具 举报

ID:624769 发表于 2022-3-12 16:42 | 显示全部楼层
wolfinn 发表于 2022-3-12 11:09
你们也别武断的说我的程序错了,这只是改TH0和THL0=(65536-10000)/2565;THL0=(65536-10000)%2565;改这个100 ...

说实话,我是真不知道,这样  空空而谈,对你解决问题有什么帮助么? 前面,已经把 10299 的2进制给你看了,现在,我在跟你讲几个基本原理,

首先,定时器,是计数到 65535,然后再 +1 溢出之后, 归0, 所以 TH0 和 TL0 都会计数达到 0xFF (255) 然后溢出,这个原则是不变的。
然后,所谓的13位定时器, 他是用的 TH0 的8位   和 TL0 的5位, 从这个意义上来讲, 你单纯看 TH0  和 TL0 的值,它也是会计数到 6万多的。
再然后,你说你用:
改TH0和THL0=(65536-10000)/2565;THL0=(65536-10000)%2565;
撇开, THL0 这个名称是不存在的, 2565 这个数值的奇怪之处, 都当你是论坛里的笔误。你也不是计数只能到 10299 而是 从 5万多开始计数。

至于为什么不动,基于发个贴证明你自己方法没错,都能有那么多“笔误”,我依然认为你的程序里存在着这样那样的“笔误”,这就是我说的你的程序是错的。至少,就算我可以理解你是笔误,但是编译器不会管,编译出来的程序,最终的结果,就是“错”的。
回复

使用道具 举报

ID:734017 发表于 2022-3-12 17:52 | 显示全部楼层
当你发现想不通的时候,就是程序问题。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 18:33 | 显示全部楼层
188610329 发表于 2022-3-12 16:42
说实话,我是真不知道,这样  空空而谈,对你解决问题有什么帮助么? 前面,已经把 10299 的2进制给你看 ...

别说我错了,我只改四处10000这个值,先50000,40000,30000,10000,多次改,最后发现10000处可以动。然后为了找这个值。500加,300加,然后几十加,10300以下从没有出现过不动的。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 18:35 | 显示全部楼层
10299的二进制我也会算,一般不算出来,用公式让机器去做,这样知道是多少定时值。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 18:38 | 显示全部楼层
现在是改四处10299就马上行,10300马上不行。你别说我用的是方式1,方式1的最大值是8192,16进制是0x2000
回复

使用道具 举报

ID:884147 发表于 2022-3-12 19:23 | 显示全部楼层
如果程序没错,那一定就是芯片错了!
回复

使用道具 举报

ID:879809 发表于 2022-3-12 19:35 | 显示全部楼层
编译器在预编译阶段运算THL0=(65536-10000)/2565;THL0=(65536-10000)%2565;溢出了。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 19:39 | 显示全部楼层
mtdzok 发表于 2022-3-12 19:23
如果程序没错,那一定就是芯片错了!

终于有人说句象样的话了,我只说一个现象,不放程序上来不是让人来解决问题的。那样我觉得学不到东西。对别人也是种折磨。有空我找找看,以前我买过几个真AT89C52的,换个芯片试试。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 19:41 | 显示全部楼层
用10000的值跑7个多小时,做的时钟没问题。就改这四个10000的数,看在什么地方定时器会停。,
回复

使用道具 举报

ID:776619 发表于 2022-3-12 19:42 | 显示全部楼层
发表于 2022-3-12 19:35
编译器在预编译阶段运算THL0=(65536-10000)/2565;THL0=(65536-10000)%2565;溢出了。

真正程序没错的,在论坛打多了个5.
回复

使用道具 举报

ID:776619 发表于 2022-3-12 20:04 | 显示全部楼层
我也直接写入换算出来的值,还是不运行。现在是10300可以运行了。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 20:13 | 显示全部楼层
最新消息,现在是10305不行,10304可以。哈哈,奇怪的芯片。
回复

使用道具 举报

ID:776619 发表于 2022-3-12 20:24 | 显示全部楼层
发表于 2022-3-12 19:35
编译器在预编译阶段运算THL0=(65536-10000)/2565;THL0=(65536-10000)%2565;溢出了。

讨论一下,这是常量运算,不会溢出吧?最多是得0,运行一次就停止了。
回复

使用道具 举报

ID:401564 发表于 2022-3-12 23:25 | 显示全部楼层
在通常情况下,99%是代码的问题,你这个问题,99.99%是你代码的问题
整了两天,你就只说不行,它怎么个不行?你怎么知道它不行?为什么不把代码上传一下?
你把代码上传一下,基本就能解决问题
在很多情况下,是代码的问题,你这芯片还能下载,基本就是好的
回复

使用道具 举报

ID:776619 发表于 2022-3-13 07:04 | 显示全部楼层
问题解决。找到我旧的AT89S52芯片,换个实验版烧进去,故障一样的。查了下程序,原来我把定时器0初始化语句放WHILE(1)大循环里了,放前面OK。
回复

使用道具 举报

ID:776619 发表于 2022-3-13 07:07 | 显示全部楼层
本帖最后由 wolfinn 于 2022-3-13 09:31 编辑

又来了新问题,普中5的实验板,烧不了AT89S52的芯片。用别的板子WIN7 64位又不认USBaSP驱动。下载几个据说是WIN7 64位USBaSP的都不行。又有得搞。装了个XP系统才能烧。
回复

使用道具 举报

ID:776619 发表于 2022-3-13 10:23 | 显示全部楼层
万能的某一个宝,找了家卖USBASP下载线的商户,从商品描述里找到了一个21.3M的驱动下载地址,下完装入OK。现在是STC的51芯片只能用STC的软件下载。AT89S52的只能用AVR_fighter来下载,两者不能互用。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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