佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

12
返回列表 发新帖
楼主: georgeOYS

电子工程 -- 8051 问题~(依据版规编辑)

  [复制链接]
发表于 24-9-2011 11:59 AM | 显示全部楼层
我个人非常赞同这点(如果你是非常有恒心和耐心的去学assembly). 万事起头难, 但是学会了会德到非常好的基础及经验.
nettium 发表于 24-9-2011 11:06 AM



    这是真的。我个人认为,一个好的program必须要完全熟悉每一个细节。并且应用透彻,这样的话,才不会导致牛刀宰鸡的情况发生

http://cforum.cari.com.my/viewthread.php?tid=2224943&highlight=8051
回复

使用道具 举报


ADVERTISEMENT

发表于 1-10-2011 03:48 PM | 显示全部楼层
为什么没人回复的?我已经跟住版规一一编辑了啊~
georgeOYS 发表于 22-9-2011 09:21 PM

那个网站都已经有源码了, 其实你都有完所有的答案了。

这种电子钟只是玩玩就好。误差可能也比较大,比较值得研究的是怎样拿到准确的秒数。
WKLoh, 来挑战,你会怎样做?一样的电路, 假设电流是足够的, 时钟要怎样才会精准? 列出可能的方法。
回复

使用道具 举报

发表于 3-10-2011 12:31 PM | 显示全部楼层
那个网站都已经有源码了, 其实你都有完所有的答案了。
pic 发表于 1-10-2011 03:48 PM


赞同!如果细读的话,原作硬体设计,完全简化了程式设计流程,是无可挑剔的了。

这种电子钟只是玩玩就好。误差可能也比较大,比较值得研究的是怎样拿到准确的秒数。
WKLoh, 来挑战,你会怎样做?一样的电路, 假设电流是足够的, 时钟要怎样才会精准? 列出可能的方法。


哈哈,版主你太抬举我了!我就分享以前做8051电子钟的经验吧!以此图为例:12MHz crystal, AT89S51.。。。

电子钟最大的挑战也就是秒数的精准度,单晶片(MCU)所采用的振晶(crystal)也就是那个关键所在(累积误差)。

如果发现电子钟与现实时间慢的话,可以说是12MHz crystal所拿到的时钟源(clock source)是不足12MHz,反之超过了12MHz。
这个时候就要的一下面时间中断程式做调整了

  1. static timer0int (void) interrupt 1 using 1 {
  2. //reload timer 0 with (65536-10000)= 0x08f0 --- every 10ms trigger
  3.    TH0 = (65536-10000)>>8;//《---- 微调此处 10000数值
  4. TL0 = (65536-10000) & 0x00FF;// 《---- 微调此处 10000数值
  5.    cputick++;
  6.    time(); // update realtime clock
  7.    // P0^=0x80; // toggle P0.7 for 100 Hz timer base (100/2=50Hz)
  8.    
  9.    }
复制代码


电子钟慢,把10000给往下调,反之往上调!

这就是以前的做法!

现在直接用RTC IC就搞定了,还有 calendar的功能呢!

评分

参与人数 1积分 +50 收起 理由
pic + 50 我很赞同

查看全部评分

回复

使用道具 举报

发表于 4-10-2011 10:46 AM | 显示全部楼层
电子钟最大的挑战也就是秒数的精准度,单晶片(MCU)所采用的振晶(crystal)也就是那个关键所在(累积误差)。
wkloh 发表于 3-10-2011 12:31 PM

你说到重点了。。--》累积误差

crystal 是最关键的零件。。它的频率还会随温度变化而漂移,
一般买到的多是100ppm, 也有10ppm的。

要更精确的, 考虑用Oscillators - Temperature Controlled (TCXO)
可以去到0.5ppm, 工作温度 -40°~+85°C



另外, 程序的缺陷, 有时中断的计算,在程序中不能完美的“除尽”, divider, 这时选择适合的crystal 也是有必要的。
比如在PIC MCU, 在Timer 0, 要产生100Hz,  10ms 的tick, 用20Mhz 的crystal 是不能直接得到的, 最多是100.1Hz, 也就是9.9900099ms, 这些就会造成累积误差, 当然, 有很多手法,我们可以用程序来修正。


  1. // 20 MHz oscillator, RTCC pre-scaler 是 256,

  2. //RTCC preload = 195, 可以得到100.1 Hz的中断
  3. // RTCC interrupt rate = Fosc / (4 * rtcc pre-scaler * rtcc pre-load)
  4. //                     = 20000000 Hz / (4 * 256*195)
  5. //                     = 100.1 Hz  --》 最接近的

复制代码



但是, 如果你使用的是19.660800 MHz, 却可以完美的除尽, 没有误差, 其他的就是看零件是多少ppm 和温度漂移了。

  1. // 19.660800 MHz oscillator, RTCC pre-scaler 是 256,
  2. //RTCC preload = 192, 可以得到100 Hz的中断
  3. // RTCC interrupt rate = Fosc / (4 * rtcc pre-scaler * rtcc pre-load)
  4. //                     = 19660800 Hz / (4 * 256*192)
  5. //                     = 100 Hz --> 完美
复制代码


其实, 做时钟, 最好的就是用RTC IC 如DS1302/ DS1307 之类的
配上TXCO 如DS32Khz, + 电池, 就是完美的时钟了
一年的误差不超过 +/- 1min.  。

另外,一些户外的电子钟, 里面多是用GPS, 接收GPS 的时钟信息。
回复

使用道具 举报

 楼主| 发表于 4-10-2011 04:17 PM | 显示全部楼层
哇~楼上各位大大真的很神~给我点时间,我在看书研究,边看边refer 你们说的东西~
需要时间消化~谢谢各位大大的回复,还有info~~
回复

使用道具 举报

 楼主| 发表于 4-10-2011 04:18 PM | 显示全部楼层
哇~楼上各位大大真的很神~给我点时间,我在看书研究,边看边refer 你们说的东西~
需要时间消化~谢谢各位大大的回复,还有info~~
回复

使用道具 举报

Follow Us
发表于 24-10-2011 08:46 AM | 显示全部楼层
回复 1# georgeOYS


    final year project吗?你是melaka还是cyber?如果是melaka,有个researcher 有卖一个module,是用usb ISP的。 至少比89s51方便多。不懂cyber有没有。

assembly language的确比较麻烦,不过还是可以办得到。 想知道你熟悉8051吗?
比如所一些基本的东西在assembly, call, jmp, interrupt handler。 然后就是8051的peripheral,如何控制I/O,如何运用timer, interrupt, serial port之类的。然后是 c programming,你可以学,我相信对你不难,mmu在beta year有教c programming.
学会c,那就事半功倍。
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 28-11-2024 08:44 PM , Processed in 0.122040 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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