打印

不懂单片机内部结构是不是也可以编程?

[复制链接]
3376|21
手机看帖
扫描二维码
随时随地手机跟帖
沙发
maychang| | 2007-8-31 16:32 | 只看该作者

不懂单片机内部结构可以编程

但只能是比较简单的程序,而且是人云亦云。
单片机内部结构不必深究,知道有那些资源,各部分如何使用,差不多就够了。各部分硬件上怎么实现的,不必管它。

使用特权

评论回复
板凳
sjl2006| | 2007-8-31 16:41 | 只看该作者

光编程可以不懂单片机结构

但是如果不去研究单片机结构,对于更复杂系统的了解不利,只能做嵌入式软件而不能软硬结合

使用特权

评论回复
地板
alice84|  楼主 | 2007-8-31 16:42 | 只看该作者

今天看了下定时计数功能内容,晕

不知道单片机是否可以一边定时一边计数,这样我就可以算出频率,然后与没有车通过时的频率相比.如果有就将信号传到上位机由它控制一个P口.再通过它接故态继电器.
有没有参考咯?

使用特权

评论回复
5
maychang| | 2007-8-31 16:46 | 只看该作者

显然不能一边定时一边计数

对单片机内部时钟信号计数,是定时器。对外部信号计数,是计数器。本质都是计数器。只不过单片机时钟是已知的,所以可以定时。
要一边定时一边计数,必须占用两个定时/计数器。

使用特权

评论回复
6
alice84|  楼主 | 2007-8-31 17:04 | 只看该作者

现在要怎么做咯

我现在两个输出信号都已经接到T0/T1了.
我要是使用计数功能,可以计算出他有多少个脉冲.怎么定时?接晶体振荡器是使单片机工作,采用中断.让它在固定的时间内中断.然后算频率.
不知道怎么定时?

使用特权

评论回复
7
qjy_dali| | 2007-9-1 10:49 | 只看该作者

当然,但是可能程序很低效

使用特权

评论回复
8
stycx| | 2007-9-1 11:14 | 只看该作者

软硬兼施. 牛!

使用特权

评论回复
9
alice84|  楼主 | 2007-9-1 11:39 | 只看该作者

先贴图,等一下问

使用特权

评论回复
10
alice84|  楼主 | 2007-9-1 16:47 | 只看该作者

问问

定时/计数功能中,定时功能是将振荡器的频率12分频后,获得的脉冲信号,那它的周期是T=12/12.由楼上的图可知振荡周期1/12M,机器周期也是T=12/12,他为什么使用的是机器周期.三者怎么用?

使用特权

评论回复
11
一级菜鸟| | 2007-9-1 17:17 | 只看该作者

机器周期、时钟周期、振荡周期

对于你来说,你只需要知道你能在MCU内获得的最小周期是一个机器周期,其余频率较高的如时钟周期、振荡周期,均为MCU内部取指、执行等处理需要的时钟,这也是51系列的速度瓶颈,当然,现在有很多1/4周期的51甚至1/1周期的51,那个不在讨论之内。

先不要研究这个,你只要知道,标准51内,定时器时钟,是晶振频率的1/12就行了

使用特权

评论回复
12
一级菜鸟| | 2007-9-1 17:28 | 只看该作者

同一个定时器一边定时一边计数也不是不能做到

设定一个定时器,使用方式2自动重载方式,能得到比较精确的定时中断周期,每隔一个固定的时间,MCU将进入定时器中断,在中断处理子程序中做2件事:

1、采样你的传感器输出,如果存在与上次中断不同的电平,脉冲计数变量加一
2、定时器中断次数变量加1。

假设中断周期为100uS,在定时器中断次数到达100次时,则能从脉冲计数变量中得到10mS内出现了几次脉冲跳变。

但是,这种方法受限于MCU工作速度,无法采样高频率信号。

另一种方法:
1、将传感器输出接入MCU的外部中断引脚,在该中断处理子程序内简单的对脉冲计数变量加一,然后马上退出中断
2、设定一个定时器,每隔一段时间,检测脉冲计数变量的值,则可以知道单位时间内信号跳变的次数。

这种方法受限与MCU执行一次外部中断的最大时间,所以外部中断处理程序要越简单越好。但是比第一种要快得多。

使用特权

评论回复
13
一级菜鸟| | 2007-9-1 17:32 | 只看该作者

第3种方法

将传感器输出接一外部中断引脚

1、在外部中断发生时,设定一个定时器初值为0,并置位一个标志位
2、第2次发生中断时,将定时器当时的计数值存放到某个变量内,清除标志位

该变量的值,则为该脉冲的宽度,多次采样后处理即可

使用特权

评论回复
14
NE5532| | 2007-9-1 22:19 | 只看该作者

不懂也行,抓一个搞硬件的当拐棍。

使用特权

评论回复
15
alice84|  楼主 | 2007-9-2 19:49 | 只看该作者

回NE5532

为什么只要一根拐棍呢
21IC有那么多拐棍
谢谢各位大哥(大叔)的帮助

使用特权

评论回复
16
alice84|  楼主 | 2007-9-2 20:54 | 只看该作者

嘿嘿,灌水来了

菜鸟GG:你的第一种方法,能不能这样:我定时500us,晶振是12MHz,我选择模式0,那初值为2的13次幂-12*500/12=1e0cH.在定时的同时,外部中断引脚的电平变化,脉冲计数变量加1.定时时间到,退出中断,结束程序,那在定时这段时间内算出多少个脉冲.两者相除即可.

使用特权

评论回复
17
alice84|  楼主 | 2007-9-2 21:44 | 只看该作者

没人理,在灌

问问菜鸟GG的第三种方法.
要侧脉宽,我使定时器模式0,将传感器信号接INT0,设定GATE=1,同时TRO=1,
信号高电平时,启动定时器。否则停止。这样也是可以测试脉冲宽度。我不知道你如何根据这个测频率。

使用特权

评论回复
18
alice84|  楼主 | 2007-9-2 21:50 | 只看该作者

还没人吗?不会又晕了吧

使用特权

评论回复
19
coldra| | 2007-9-2 21:58 | 只看该作者

建议看书,理解工作原理,找例程来看

你这样靠一点一点的在网络上问,大家都很累呀,学习效率也不高呀

使用特权

评论回复
20
maychang| | 2007-9-2 23:03 | 只看该作者

17楼提到的方法可行,但不够快(执行外部中断需要时间),还要占用外部中断,所以不是很好的方法。
18楼提出的方法很好,经常用于测量高电平持续时间,但不能用于测量低电平持续时间。

使用特权

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

本版积分规则

153

主题

2855

帖子

1

粉丝