|
电子工程 -- 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 |
|
|
|
|
|
|
|
发表于 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。
这个时候就要的一下面时间中断程式做调整了
- static timer0int (void) interrupt 1 using 1 {
- //reload timer 0 with (65536-10000)= 0x08f0 --- every 10ms trigger
- TH0 = (65536-10000)>>8;//《---- 微调此处 10000数值
- TL0 = (65536-10000) & 0x00FF;// 《---- 微调此处 10000数值
- cputick++;
- time(); // update realtime clock
- // P0^=0x80; // toggle P0.7 for 100 Hz timer base (100/2=50Hz)
-
- }
复制代码
电子钟慢,把10000给往下调,反之往上调!
这就是以前的做法!
现在直接用RTC IC就搞定了,还有 calendar的功能呢! |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 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, 这些就会造成累积误差, 当然, 有很多手法,我们可以用程序来修正。
- // 20 MHz oscillator, RTCC pre-scaler 是 256,
- //RTCC preload = 195, 可以得到100.1 Hz的中断
- // RTCC interrupt rate = Fosc / (4 * rtcc pre-scaler * rtcc pre-load)
- // = 20000000 Hz / (4 * 256*195)
- // = 100.1 Hz --》 最接近的
复制代码
但是, 如果你使用的是19.660800 MHz, 却可以完美的除尽, 没有误差, 其他的就是看零件是多少ppm 和温度漂移了。
- // 19.660800 MHz oscillator, RTCC pre-scaler 是 256,
- //RTCC preload = 192, 可以得到100 Hz的中断
- // RTCC interrupt rate = Fosc / (4 * rtcc pre-scaler * rtcc pre-load)
- // = 19660800 Hz / (4 * 256*192)
- // = 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~~ |
|
|
|
|
|
|
|
发表于 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,那就事半功倍。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|