4101|8

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

学习单片机的过程中遇到的几个问题? [复制链接]

1.在使用单片机的定时功能时,设定0.1毫秒来一次定时中断,在定时中断用一个全局变量累积了1万次,理论上是1秒时间,
  结果实际时间约1.4秒,出入比较大。确定晶振等计算无误,为什么误差怎么大?

2.是不是给I/0口输入时,一定要给先把I0口设置成1,然后才能输入0 ,那么如果我要输入1,该怎么办?

3.谁能不能该我通俗的讲讲上拉电阻是如何实现上拉的。?

4.在单片机中是不是一定要用让语句不停的空循环,发生中断时才有作用?

问题比较多,麻烦大家了,谢谢。

最新回复

补充一下 对于第一个问题 如果在晶振或者其他硬件没有关系的吧 很有可能在于多字节的操作 可能中断的时候会有错 一个C语言的操作不等于一条汇编  详情 回复 发表于 2008-11-1 17:16
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是些很好的问题。

1. 可能定时器模块本身不准;还有一种可能是某些地方禁止了中断,造成延迟。
2. 估计你描述有误,应该是配置相应口的方向寄存器吧。
3. 这个比较简单吧,电路上的东西。
4. 无限循环的目的是保证程序不跑飞。如果没有这个循环,中断还是会起作用的;但如果跑飞,系统就有很多的不确定性了。

FYI
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
1.在使用单片机的定时功能时,设定0.1毫秒来一次定时中断,在定时中断用一个全局变量累积了1万次,理论上是1秒时间,
  结果实际时间约1.4秒,出入比较大。确定晶振等计算无误,为什么误差怎么大?

LS说的是一个原因,不过如果经常是这样的话,那看看你中断响应的问题了,不知道你在中断里做了什么事



2.是不是给I/0口输入时,一定要给先把I0口设置成1,然后才能输入0 ,那么如果我要输入1,该怎么办?
要置1的时代早就过去了。。。
只有很传统的机器才用了,现在主流的机器都不用了。。

3.谁能不能该我通俗的讲讲上拉电阻是如何实现上拉的。?
你你输出0的时候,相当把输出点接到地,电流不过你的输出部分

当你输出1的时候,电流除了从IO里出来,还有VCC经上拉电阻流入你的输出部分,

以这样来达到上拉的目的

4.在单片机中是不是一定要用让语句不停的空循环,发生中断时才有作用?
循环,这个应该上升到思想层次来说明这个问题

现在实中:所有的系统都是循环,不是吗?

呵呵,所以你实现一个功能,一个系统,那也是一个循环
这就是循环的意义

循环+中断---从系统的设计理论来说,这个是前后台的系统

中断处理前台即时中断响应

循环处理后台资源调度

呵呵
应该说清楚了吧?

 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
1.累计了1万次,就相当于要执行1万条语句,执行这些语句要时间,还有定时也不一定完全准确。可以用KEIL软件里面的查看器微调时间。
2.I/O口输出时是要置1才能输入,使输出口的两个场效应管都截止,输入的数据直接读入。很难解释,好点的教材有详细解释,结合电路看下就清楚了。
3.这个问题也要结合电路看。
4.必须要使单片机处于挂起状态,也就是无限循环下。时刻等待外部信号的输入,以做相应处理。


水平不高只知道这些  希望对你有所帮助。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
1.在使用单片机的定时功能时,设定0.1毫秒来一次定时中断,在定时中断用一个全局变量累积了1万次,理论上是1秒时间,
  结果实际时间约1.4秒,出入比较大。确定晶振等计算无误,为什么误差怎么大?

全局变量的+1也要耗指令周期的咯。

2.是不是给I/0口输入时,一定要给先把I0口设置成1,然后才能输入0 ,那么如果我要输入1,该怎么办?

现在新的片子用不到这样了咯。


3.谁能不能该我通俗的讲讲上拉电阻是如何实现上拉的。?

io口内部是开漏输出的结构,没有‘上拉’--就是接VCC,那么就没有高电平---1(VCC)的来源咯。



4.在单片机中是不是一定要用让语句不停的空循环,发生中断时才有作用?

不循环的话,程序跑飞了就走不到中断那里咯。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 
4.在单片机中是不是一定要用让语句不停的空循环,发生中断时才有作用?
不是
但却有是在循环 while(){do somethings}
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
1、首先0.1毫秒定时一次中断,这0.1毫秒是准确的,但你在中断函数里有了计数器进行计数,1万次这样的执行计数,也就导致了时间的不准确。解决办法:把定时时间改成更大,还有中断执行的程序部分尽量简单。
2、似乎现在都可以直接给寄存器送“1”就好了,实在要求有上升电平,那就先“0”后“1”
3、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。
4、如果在等待中断过程中,程序没有循环或者等待,那程序不就执行到结尾,程序就退出拉,那就没法再执行中断了。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
1.中断的执行需要时间。中断次数越多,时间越不准确。另外进中断之后第一件事就重启定时器,让其开始记时。另外就是楼上说的,把定时时间加大。
2.得看是什么单片机了。
3.单片机的上拉就是当你把端口设置为输入时,如果启用上拉,则在输入端口上保持高电平,这样就不会导致可能出现的引脚上电平因受干扰而发生变化。
4.不是空循环,而是死循环,也就是main函数是不可以返回也不可以结束的。如果结束了,它又要去执行什么呢,自然就跑飞了。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 
补充一下

对于第一个问题 如果在晶振或者其他硬件没有关系的吧 很有可能在于多字节的操作 可能中断的时候会有错

一个C语言的操作不等于一条汇编
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表