导航
  • 全部
...

单片机上电后,默认的各I/O口得输出电平

xiaohei1757 2011-08-12 09:09:08
本人新学单片机,请高手指教,我这么理解:
1、P0口要作I/O用时,必须接上拉电阻,因为P0口是集电极开路的,如果不接上拉电阻,无法输出高电平。
2、其他的三个口都是内接上拉电阻的准双向口,也就是上电后他们会输出高电平。
3、为什么我看一些教材说在使用I/O口作为输入时,要先将端口写1,举例:P1_1=1,为什么要这样呢??
4、对于定时器T0,我在主程序中使用两次,而两次需要不同的定时中断处理程序,问是否可以实现,那么应该如何实现??
谢谢
...全文
给本帖投票
4254 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
无心 2011-08-14
  • 打赏
  • 举报
回复
51单片机的P0口为准双向口,常作为数据总线用,因此是具有弱上拉的,在一般的应用中,可不接上拉电阻,但是在较特殊的应用场合,P0口的高电平驱动能力有限,则需外加上拉电阻以提高驱动能力,上拉一般取4.7k~10k,当然,一些新型的51单片机(如STC)所有的I/O都可以编程为弱上拉,输入,强上拉,开漏等4种模式,要注意的就不是上拉而是限流了。

对于先将输入口线赋值为1,则全楼上说的差不多,主是防止I/O复用时,既做输出又做输入用时,为防止不确定性所带来的影响。在应用中如果状态明确(复位后,初始差不多都为1)可不加这句P1_1=1;

定时器T0中断,主要用于程序中的定时或延时,因此可定义多个全局计数变量,每中断一次计数变量就加1,在主程序中,要用到定时或延时的时候,只需要把相应的计数变量清零,再判断计数值是否到了规定值后,调用相应的函数就行了,这相当于多个事情都可用这个T0中断了。当然通过设置标志变量,实现实时控制也是可取的
AnYidan 2011-08-14
  • 打赏
  • 举报
回复

if (INTCONbits.TMR0IE && INTCONbits.TMR0IF)
{
INTCONbits.TMR0IF = 0;

if (++Overtime > 14)
{
if (flag.Mode) flag.Mode = 0; // 手动模式 延时结束转换为 自动
else flag.Highspeed = 0; // 自动模式 延时结束 设置标志位

T0CONbits.TMR0ON = 0;
}
}


[Quote=引用 5 楼 xiaohei1757 的回复:]
引用 4 楼 anyidan 的回复:
对于定时器T0,我在主程序中使用两次,而两次需要不同的定时中断处理程序,问是否可以实现,那么应该如何实现??


首先,这个功能不能同时进行,如果一次只用一个,决不可能用另一个,设一个或找一个 flag, 可以在
中断处理程序中凭它区分是谁触发的 timer

你的意思:可以给定时器T0写两个中断处理程序,分别去做不同的事情,但是在特定的一个时……
[/Quote]
dfwxj 2011-08-13
  • 打赏
  • 举报
回复
因为端口电平是“与”关系,所以为了确保输入数据正确,要先置“1”
xiaohei1757 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 anyidan 的回复:]
对于定时器T0,我在主程序中使用两次,而两次需要不同的定时中断处理程序,问是否可以实现,那么应该如何实现??


首先,这个功能不能同时进行,如果一次只用一个,决不可能用另一个,设一个或找一个 flag, 可以在
中断处理程序中凭它区分是谁触发的 timer
[/Quote]
你的意思:可以给定时器T0写两个中断处理程序,分别去做不同的事情,但是在特定的一个时刻只能执行其中的一个中断处理程序,是这样的吗?如果是,那么当定时器触发中断后,到底该执行哪个中断处理程序呢?请您在详细解释一下:“设一个或找一个 flag, 可以在中断处理程序中凭它区分是谁触发的 timer”。
谢谢了!
AnYidan 2011-08-12
  • 打赏
  • 举报
回复 1
对于定时器T0,我在主程序中使用两次,而两次需要不同的定时中断处理程序,问是否可以实现,那么应该如何实现??


首先,这个功能不能同时进行,如果一次只用一个,决不可能用另一个,设一个或找一个 flag, 可以在
中断处理程序中凭它区分是谁触发的 timer
xiaohei1757 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhenghn2010 的回复:]
4 只能实现一次 或者先后顺序启动来实现不同功能
[/Quote]
是的,我先在主程序中初始化定时器0,在定时中断处理程序中做一些操作,当完成处理操作完成后,我不需要定时器了,于是在主程序关闭定时器0,如果我还想用这个定时器0,但是我想让他做与刚才的中断处理程序不同的操作,我想知道我是否可以在写一个定时器0的中断处理程序,如果可以这样,该如何写第二个中断处理程序呢?如果不能,为什么呢?
zhenghn2010 2011-08-12
  • 打赏
  • 举报
回复
4 只能实现一次 或者先后顺序启动来实现不同功能
zhenghn2010 2011-08-12
  • 打赏
  • 举报
回复
3 写1 可以防止输入数据有误。关闭下拉mos管,防止一直为低。
qlasam 2011-08-12
  • 打赏
  • 举报
回复
因为在使用I/O口作为输入时,你要识别是什么电平,所以你得先给它一个状态,有改变时再读它改变的状态。

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部