编辑: 捷安特680 | 2013-04-13 |
eeworld.com.cn 讲座专家:EEWORLD 专家――老练 工作单位:南京华岳电子(www.njhuayue.com) 更多讲座内容,详见(http://bbs.eeworld.com.cn/thread-66169-1-1.html ) 第一讲 单片机 IO 口的使用 单片机的 IO 口控制是单片机初学者最为关心的问题,如何快速学会使用 IO 是初学者 最为困难的地方. 众多的教科书上面介绍了很多 IO 的原理, 这些长篇大论让很多初学者看起来难以理解, 同时也会止步于单片机门外.我们现在所要学习的使用 IO 就是很简单的使用就可以了,IO 无非就是
4 种状态,输出为高、输出为低、输入为高、输入为低. 我们只要把握这四个方面就可以了,先看看我们的单片机接口,单片机共有
32 个io. 分别为 P
0、P
1、P
2、P3 口,P0 口如果当作 IO 来使用时,必须要使用上拉电阻,因为
51 单片机内部没有上拉这一功能. 在这个学习板上面,大家可以看到
40 个io 对应的位置,并且在数码管下面就增加了上 拉电阻,使得 io 可以实现. 现在我们以 P1 口接的 led 指示灯来说明输出高低电平的功能,当我们使用汇编程序: ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV P1,#00H JMP MAIN END 这样,P1 口的 led 就会变亮,因为 P1 口赋值#00h 以后,就是将 led 的所有 io 都设置为 低电平了. 如果将 MOV P1,#00H 改成 MOV P1,#0FFH,那么 io 就设置成了高电平,led 就会被熄 灭.当然 C51 中也比较简单. #include Main() { P1=#00H;
www.eeworld.com.cn While(1) {;
} } 这个同样的道理,如果 P1=#0FFH,就是熄灭 led. 当我们对键盘的程序如下图解释: 这个就是我们板子上面的键盘的接线图,当我们单独使用键盘的时候,我们要将 P3.4 置低电平,此时,我们也是根据前面 led 设置 io 的方式进行设置. 如下程序: ORG 0000H JMP MAIN ORG 0100H MAIN: CLR P3.4 MOV P1,#0FFH JNB P2.7, MAIN MOV P1,#00H JMP MAIN END C51 中: #include Main() { P3^4=0;
While(1) { P1=0x0FF;
while(P2^7==0) { P1=0x00;
} } www.eeworld.com.cn } 从这
2 个程序都可以看出 io 为低电平和高电平的效果. 第二讲 单片机外部中断使用 很多人都知道
51 单片机中中断的重要性,但是书中的长篇累牍让我们一下子理解有点 很不适应.所以我们尽可能简化
51 单片机的中断,目前我们是要学会单片机中断的使用就 可以了,而不是从原理基本说起. 在51 单片机中有
2 个外部中断,这两个外部中断口处于低电平的时候开始触发中断信 号,使得程序可以进入中断处理中断部分的程序. 我们还是老规矩,先看看硬件电路: 在图上的单片机原理图中,S0,S1 分别接的是单片机的外部中断
1 和外部中断 2,我们特意 将两个发光二极管放在上面进行指示, 以便我们可以看到中断运行的情况, 此时我们可以设 置中断程序的要求:
1、 指示灯平时没有中断按下的时候不进行工作,保持原有状态;
2、 当外部中断
0 响应的时候, 我们就点亮 D0, 让外部中断
0 响应的条件就是按下 S0 按键. 下面就是汇编程序: ORG 0000H LJMP MAIN ;
主程序 ORG 0003H LJMP W_INT0 ;
进入中断子程序 ORG 0100H MAIN:MOV SP, #50H ;
设置堆栈指针 SETB EA ;
CPU 所有中断开(IE 最高位 MSB) SETB EX0 ;
INT0 中断开 CLR IT0 ;
INT0 低电平触发(为1则为下降沿触发) MOV P1, #0FFH JMP $ www.eeworld.com.cn W_INT0:CLR P1.0 RETI END 如下是 c51 的程序: #include //重定义 I/0 引脚名称 sbit led1=P1^0;