打印
[程序源码]

新手自学单片机请大家不吝赐教,谢谢

[复制链接]
2198|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小海豚|  楼主 | 2013-10-26 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小海豚 于 2013-10-26 13:33 编辑

#if MCLK <= 4000000
  #define delay1us()        do {Nop();} while (0)
#elif MCLK <= 8000000
  #define delay1us()        do {Nop(); Nop();} while (0)
#elif MCLK <= 12000000
  #define delay1us()        do {Nop(); Nop();Nop();} while (0)
#endif
上面这个程序同样是延时1us怎么执行的NOP()个数不一样,那个4000000和8000000和12000000是什么意思?

假设时钟周期为4MHZ,每隔50MS点亮LED,每隔50MS灭掉LED。这样的程序要如何做到呢。

这50ms如何做到.

1,得到指令周期

4MHz/4=1MHz

1/1MHz=0.0000001s=1us

2,得到预分频

定时器定时的最大时间要超过这50mS,所以预分频器要选择256

预分频X256=最大的定时时间。256X256=65536us=65.536ms 大于50ms

3, 计算定时器初始值

(定时器最大值+1)- (定时时间/预分频)=定时器的初始值。

255+1=256

50000/256=195.3125

256-195.3125=60.6875 四舍五入 定时器初始值为61.


最后这一段计算定时器初始值不懂,请各位帮忙解释下,谢谢
为什么不是65536-50000呢?


相关帖子

沙发
小海豚|  楼主 | 2013-10-26 10:28 | 只看该作者

使用特权

评论回复
板凳
diweo| | 2013-10-26 10:48 | 只看该作者
那个4000000和8000000和12000000是主时钟频率
4M的慢一点,所以执行一次NOP时间较长,12M比较快,所以执行一次NOP时间较短。
那么同样的延时,NOP的次数当然不一样了

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
小海豚 + 2 谢谢
地板
gx_huang| | 2013-10-26 10:49 | 只看该作者
问题太低级了吧?
MCLK是时钟频率,指令时间当然和时钟频率有关。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
小海豚 + 2 谢谢
5
dong00520| | 2013-10-26 10:51 | 只看该作者
路过 支持下啦!

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
6
msblast| | 2013-10-26 11:01 | 只看该作者
说别人低级,并不使得自己看起来更高级。
赞3#

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
小海豚 + 2 赞一个!
7
小海豚|  楼主 | 2013-10-26 11:08 | 只看该作者
gx_huang 发表于 2013-10-26 10:49
问题太低级了吧?
MCLK是时钟频率,指令时间当然和时钟频率有关。

我:)刚开始学单片机还望您多多关照不吝赐教
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大值+1)- (定时时间/预分频)?
怎么不把初始值设为(定时器最大值+1)- 50ms呢?

使用特权

评论回复
8
小海豚|  楼主 | 2013-10-26 11:22 | 只看该作者
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大值+1)- (定时时间/预分频)?
怎么不把初始值设为(定时器最大值+1)- 50ms呢?

使用特权

评论回复
9
小海豚|  楼主 | 2013-10-26 11:23 | 只看该作者
定时器和计数器这块感觉好难懂哦,希望各位多多指教

使用特权

评论回复
10
江枫渔火| | 2013-10-26 11:59 | 只看该作者
Main Clock 的缩写~学单片机,里面会有很多缩写要习惯,一看就能懂了~

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
11
dirtwillfly| | 2013-10-26 12:17 | 只看该作者
来晚了,看大家都回答清楚了

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
12
小海豚|  楼主 | 2013-10-26 13:38 | 只看该作者

使用特权

评论回复
13
dirtwillfly| | 2013-10-26 14:17 | 只看该作者
小海豚 发表于 2013-10-26 11:22
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大值+1)- (定时时间/预分频)?
怎么不把初始值设 ...

50ms时间太短,人眼分辨不出来。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
14
黄小俊| | 2013-10-26 19:08 | 只看该作者

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
15
gx_huang| | 2013-10-27 07:47 | 只看该作者
小海豚 发表于 2013-10-26 11:08
我刚开始学单片机还望您多多关照不吝赐教
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大 ...

不同的MCU,定时器不一样,有的是8bit=256,有的是16bit=65536。
定时器的输入时钟源也不一样,有的是系统时钟,有的是外部引脚,有些还有预分频。
有些是递增计数,有些是递减计数。
所以,具体要看这个MCU的定时器框图,必须看懂原理。

刚刚说的“太低级”,请不要见怪!
有时候有些刺激才有进步。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
16
dtmcp| | 2013-10-27 08:51 | 只看该作者
如果资源够的话,最好用定时器

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
17
小海豚|  楼主 | 2013-10-29 12:08 | 只看该作者
gx_huang 发表于 2013-10-27 07:47
不同的MCU,定时器不一样,有的是8bit=256,有的是16bit=65536。
定时器的输入时钟源也不一样,有的是系 ...

:P没关系啊,我刚开始学单片机,就是从最低级的开始学,以后我有什么不懂问题还希望您多多指导呢

使用特权

评论回复
18
生无所息1| | 2013-10-29 22:23 | 只看该作者
呵呵呵,看郭天祥十天征服单片机。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
小海豚 + 1
19
小海豚|  楼主 | 2013-11-11 09:14 | 只看该作者
生无所息1 发表于 2013-10-29 22:23
呵呵呵,看郭天祥十天征服单片机。

是PIC单片机的教学视频吗?您有没有他的视频,可以传给我吗?1247554814@qq.com谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

37

帖子

0

粉丝