[程序源码] 新手自学单片机请大家不吝赐教,谢谢

[复制链接]
3320|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 谢谢

查看全部评分

dong00520 发表于 2013-10-26 10:51 | 显示全部楼层
路过 支持下啦!

评分

参与人数 1威望 +1 收起 理由
小海豚 + 1

查看全部评分

msblast 发表于 2013-10-26 11:01 | 显示全部楼层
说别人低级,并不使得自己看起来更高级。
赞3#

评分

参与人数 1威望 +2 收起 理由
小海豚 + 2 赞一个!

查看全部评分

 楼主| 小海豚 发表于 2013-10-26 11:08 | 显示全部楼层
gx_huang 发表于 2013-10-26 10:49
问题太低级了吧?
MCLK是时钟频率,指令时间当然和时钟频率有关。

我:)刚开始学单片机还望您多多关照不吝赐教
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大值+1)- (定时时间/预分频)?
怎么不把初始值设为(定时器最大值+1)- 50ms呢?
 楼主| 小海豚 发表于 2013-10-26 11:22 | 显示全部楼层
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大值+1)- (定时时间/预分频)?
怎么不把初始值设为(定时器最大值+1)- 50ms呢?
 楼主| 小海豚 发表于 2013-10-26 11:23 | 显示全部楼层
定时器和计数器这块感觉好难懂哦,希望各位多多指教
江枫渔火 发表于 2013-10-26 11:59 | 显示全部楼层
Main Clock 的缩写~学单片机,里面会有很多缩写要习惯,一看就能懂了~

评分

参与人数 1威望 +1 收起 理由
小海豚 + 1

查看全部评分

dirtwillfly 发表于 2013-10-26 12:17 | 显示全部楼层
来晚了,看大家都回答清楚了

评分

参与人数 1威望 +1 收起 理由
小海豚 + 1

查看全部评分

 楼主| 小海豚 发表于 2013-10-26 13:38 | 显示全部楼层
dirtwillfly 发表于 2013-10-26 14:17 | 显示全部楼层
小海豚 发表于 2013-10-26 11:22
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大值+1)- (定时时间/预分频)?
怎么不把初始值设 ...

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

评分

参与人数 1威望 +1 收起 理由
小海豚 + 1

查看全部评分

黄小俊 发表于 2013-10-26 19:08 | 显示全部楼层
gx_huang 发表于 2013-10-27 07:47 | 显示全部楼层
小海豚 发表于 2013-10-26 11:08
我刚开始学单片机还望您多多关照不吝赐教
想实现50ms亮一次,50ms灭一次。
定时器的初始值=(定时器最大 ...

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

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

评分

参与人数 1威望 +1 收起 理由
小海豚 + 1

查看全部评分

dtmcp 发表于 2013-10-27 08:51 | 显示全部楼层
如果资源够的话,最好用定时器

评分

参与人数 1威望 +1 收起 理由
小海豚 + 1

查看全部评分

 楼主| 小海豚 发表于 2013-10-29 12:08 | 显示全部楼层
gx_huang 发表于 2013-10-27 07:47
不同的MCU,定时器不一样,有的是8bit=256,有的是16bit=65536。
定时器的输入时钟源也不一样,有的是系 ...

:P没关系啊,我刚开始学单片机,就是从最低级的开始学,以后我有什么不懂问题还希望您多多指导呢
生无所息1 发表于 2013-10-29 22:23 | 显示全部楼层
呵呵呵,看郭天祥十天征服单片机。

评分

参与人数 1威望 +1 收起 理由
小海豚 + 1

查看全部评分

 楼主| 小海豚 发表于 2013-11-11 09:14 | 显示全部楼层
生无所息1 发表于 2013-10-29 22:23
呵呵呵,看郭天祥十天征服单片机。

是PIC单片机的教学视频吗?您有没有他的视频,可以传给我吗?1247554814@qq.com谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

37

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部