IO输出与输入 是单片机编程最基本的逻辑控制操作,我们以N76E003为例讲解最基本的编程。

如上图,P15为IO输出,输出高电平时,LED灯亮,输出低电平时,LED灭。
P04作为输入,由于没有外部上拉,所以此处需要配置为内部上拉,配置为准双向模式,并且使能内部上拉。测试时用杜邦线将P04短接到GND模拟按键触发(P04引脚低电平时),不短接到GND就是高电平,不触发。
当P04为低电平时,LED亮;当P04为高电平时,LED灭。通过简单的例程来测试输入输出控制。

#include “N76E003.h”
#include “Function_define.h”
#include “SFR_Macro.h”
#define LEDP15//高电平亮
#define KEYP04//按键,按下为低电平
void main(void)
{
/*设置P15为输出推挽模式 */
P15_PushPull_Mode;
/* 默认灯灭*/
P15 = 0;
/* 设置P04为准双向模式 */
P04_Quasi_Mode;
/*并且输出高电平,打开内部上拉功能 */
P04 = 1;
while(1)
{
/* 如果按键按下,点亮LED灯*/
if(KEY == 0)
{
LED = 1;
}
/* 否则熄灭LED */
else
{
LED = 0;
}
}
}
00:00
以上的按键采用查询的方式,在主循环里每次循环都去扫描下P04的电平状态。
我们都知道,输入触发还可以通过中断事件来捕获,那么该怎么配置IO输入中断呢?同样我们以P04被拉低作为触发条件(从高电平到低电平,下降沿触发),当触发中断时,LED亮灭切换。
#include “typedef.h”
#include “N76E003.h”
#include “Function_define.h”
#include “SFR_Macro.h”
#define LEDP15//高电平亮
#define KEYP04//按键,按下为低电平
void PinInterrupt_ISR (void) interrupt 7
{
if(PIF == (1<<4))/* Pin4 */
{
LED = !LED;/* LED控制取反*/
}
PIF = 0x00; /* 清除中断标志 */
}
void main(void)
{
P15_PushPull_Mode;/*设置P15为输出推挽模式 */
LED = 0;/* 默认灯灭*/
P04_Quasi_Mode;/* 设置P04为准双向模式 */
P04 = 1;/*并且输出高电平,打开内部上拉功能 */
Enable_INT_Port0;/*配置P0端口 中断*/
Enable_BIT4_FallEdge_Trig;/*下降沿触发*/
PIF = 0;/* 清除中断标志*/
set_EPI;/* 使能IO输入中断*/
set_EA;/* 使能总中断 */
while(1)
{
}
}
在新唐003芯片,输入中断这里,所有IO输入中断都共享一个中断入口。进入中断里再判断是哪一个引脚触发的。
另外,不得不说,新唐挖了个坑,同一时刻 只能有一个端口使能中断,要么P0口,要么P1口,或者P2.0/P3.0引脚。所以在设计电路时特别要注意,不要将用于中断的IO布置在不同端口(输入中断唤醒功能在低功耗应用时常常用到)。切记,切记,切记!
还有P20引脚只能用作输入,并且是与RST外部复位复用的,使用时要先配置,使用时当心。
(END)
感谢观看



基本不用汇编
收藏了,感谢分享
汇编懂不,大神