用G2231,想实现1秒级的定时中断,在中断函数里计数秒数,分钟数,小时数, 能否用内部时钟实现?
还是一定要外接32.768KHz的外部晶振啊? 哪位高人能共享一下代码,谢谢了。
如果单片机没有其他的太多任务要运行,精度要求不高,内部定时器是可以的。
至于1秒级的中断,可以用定时器达到。
可以,借助外部变量,可以在任何时钟频率下实现任意定时时长(大于等于定时器溢出周期即可)。
具体方法:定义一个字节的全局变量并先清零,定时器溢出时,在中断服务程序中对该变量进行累加操作,累加值大于等于某个预定值时,当前定时时长就是需要的时长。一个字节不够就用两个到n个进行循环累加,这样任意定时时长即可实现。控制好定时器中断服务程序的每次执行时间严格相同,同时本振足够稳定话,精度还是比较高的。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
谢谢chunyang,大过年的还给菜鸟答疑。
如果用内部震荡器“任何时钟频率下”都能实现1秒级的中断,为什么还需要外部挂接32.768K的无源晶振啊?
24小时误差个两三秒的要求算不算高啊?
你看看器件参数手册(非那种G2系列使用指导手册)中关于DCO和VLO的参数,都有频率漂移的参数,例如随温度电压等。
就DCO来说,0~85℃变化最大漂移+-3%,不知道你的使用环境。你可以计算计算。最好使用32K晶体,就是成本增加了晶体成本那么一点,占用了两个引脚
具体可以试验试验,不过不同的G2231芯片离散度好像也很大吧
本帖最后由 wangfuchong 于 2014-2-6 22:36 编辑
MCU内部的时钟是RC的,精度不高,受温度影响比较明显。
24小时的误差在2-3秒以内的精度可不算低了,用我前面所言的方法需要仔细构架程序结构,否则也无法保证。另外,晶体本身的稳定性也得够。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang