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

[复制链接]
4066|21
 楼主| alice84 发表于 2007-8-31 16:28 | 显示全部楼层 |阅读模式
maychang 发表于 2007-8-31 16:32 | 显示全部楼层

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

但只能是比较简单的程序,而且是人云亦云。<br />单片机内部结构不必深究,知道有那些资源,各部分如何使用,差不多就够了。各部分硬件上怎么实现的,不必管它。
sjl2006 发表于 2007-8-31 16:41 | 显示全部楼层

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

但是如果不去研究单片机结构,对于更复杂系统的了解不利,只能做嵌入式软件而不能软硬结合
 楼主| alice84 发表于 2007-8-31 16:42 | 显示全部楼层

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

不知道单片机是否可以一边定时一边计数,这样我就可以算出频率,然后与没有车通过时的频率相比.如果有就将信号传到上位机由它控制一个P口.再通过它接故态继电器.<br />有没有参考咯?
maychang 发表于 2007-8-31 16:46 | 显示全部楼层

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

对单片机内部时钟信号计数,是定时器。对外部信号计数,是计数器。本质都是计数器。只不过单片机时钟是已知的,所以可以定时。<br />要一边定时一边计数,必须占用两个定时/计数器。
 楼主| alice84 发表于 2007-8-31 17:04 | 显示全部楼层

现在要怎么做咯

我现在两个输出信号都已经接到T0/T1了.<br />我要是使用计数功能,可以计算出他有多少个脉冲.怎么定时?接晶体振荡器是使单片机工作,采用中断.让它在固定的时间内中断.然后算频率.<br />不知道怎么定时?<br />
qjy_dali 发表于 2007-9-1 10:49 | 显示全部楼层

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

  
stycx 发表于 2007-9-1 11:14 | 显示全部楼层

软硬兼施. 牛!

  
 楼主| alice84 发表于 2007-9-1 11:39 | 显示全部楼层

先贴图,等一下问

 楼主| alice84 发表于 2007-9-1 16:47 | 显示全部楼层

问问

定时/计数功能中,定时功能是将振荡器的频率12分频后,获得的脉冲信号,那它的周期是T=12/12.由楼上的图可知振荡周期1/12M,机器周期也是T=12/12,他为什么使用的是机器周期.三者怎么用?
一级菜鸟 发表于 2007-9-1 17:17 | 显示全部楼层

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

对于你来说,你只需要知道你能在MCU内获得的最小周期是一个机器周期,其余频率较高的如时钟周期、振荡周期,均为MCU内部取指、执行等处理需要的时钟,这也是51系列的速度瓶颈,当然,现在有很多1/4周期的51甚至1/1周期的51,那个不在讨论之内。<br /><br />先不要研究这个,你只要知道,标准51内,定时器时钟,是晶振频率的1/12就行了
一级菜鸟 发表于 2007-9-1 17:28 | 显示全部楼层

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

设定一个定时器,使用方式2自动重载方式,能得到比较精确的定时中断周期,每隔一个固定的时间,MCU将进入定时器中断,在中断处理子程序中做2件事:<br /><br />1、采样你的传感器输出,如果存在与上次中断不同的电平,脉冲计数变量加一<br />2、定时器中断次数变量加1。<br /><br />假设中断周期为100uS,在定时器中断次数到达100次时,则能从脉冲计数变量中得到10mS内出现了几次脉冲跳变。<br /><br />但是,这种方法受限于MCU工作速度,无法采样高频率信号。<br /><br />另一种方法:<br />1、将传感器输出接入MCU的外部中断引脚,在该中断处理子程序内简单的对脉冲计数变量加一,然后马上退出中断<br />2、设定一个定时器,每隔一段时间,检测脉冲计数变量的值,则可以知道单位时间内信号跳变的次数。<br /><br />这种方法受限与MCU执行一次外部中断的最大时间,所以外部中断处理程序要越简单越好。但是比第一种要快得多。<br /><br />
一级菜鸟 发表于 2007-9-1 17:32 | 显示全部楼层

第3种方法

将传感器输出接一外部中断引脚<br /><br />1、在外部中断发生时,设定一个定时器初值为0,并置位一个标志位<br />2、第2次发生中断时,将定时器当时的计数值存放到某个变量内,清除标志位<br /><br />该变量的值,则为该脉冲的宽度,多次采样后处理即可<br /><br />
NE5532 发表于 2007-9-1 22:19 | 显示全部楼层

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

  
 楼主| alice84 发表于 2007-9-2 19:49 | 显示全部楼层

回NE5532

为什么只要一根拐棍呢<br />21IC有那么多拐棍<br />谢谢各位大哥(大叔)的帮助<br /><br />
 楼主| alice84 发表于 2007-9-2 20:54 | 显示全部楼层

嘿嘿,灌水来了

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

没人理,在灌

问问菜鸟GG的第三种方法.<br />要侧脉宽,我使定时器模式0,将传感器信号接INT0,设定GATE=1,同时TRO=1,<br />信号高电平时,启动定时器。否则停止。这样也是可以测试脉冲宽度。我不知道你如何根据这个测频率。
 楼主| alice84 发表于 2007-9-2 21:50 | 显示全部楼层

还没人吗?不会又晕了吧

coldra 发表于 2007-9-2 21:58 | 显示全部楼层

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

你这样靠一点一点的在网络上问,大家都很累呀,学习效率也不高呀
maychang 发表于 2007-9-2 23:03 | 显示全部楼层

17楼提到的方法可行,但不够快(执行外部中断需要时间),还要占用外部中断,所以不是很好的方法。<br />18楼提出的方法很好,经常用于测量高电平持续时间,但不能用于测量低电平持续时间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

153

主题

2855

帖子

1

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