飞思卡尔单片机的普通输入输出的某一个端口同一时刻只能做输入或者输出。且需事先初始化端口寄存器。'0'为输入,‘1’为输出。同时要清空数据寄存器内容。 比方说使用PORTA_PA0口控制单个外部共阳指示灯的显示,显然为输出控制。可以这样写
/*初始化*/
DDRA=0X01;//定义方向寄存器输出,也可以写成0Xff 只是其他的7个口不用
PORTA_PA0=1;//共阳 初始化指示灯不亮
/*主函数*/
PORTA_PA0=0;//PA0端口输出0 低电平 指示灯亮
比方说使用PORTA_PA3口读取外部电平信号,显然为输入控制。可以这样写
/*初始化*/
DDRA=0X00;//定义方向寄存器输入,8个端口全为输入
/*主函数*/
unsigned char LED;
LED=PORTA_PA3;//读入端口数据
你上面的程序 我的理解是这样的,程序事先有宏定义LED_DD、 led :
LED_DD = 0x0F; //方向寄存器 高四位输入(拨码开关) 低四位输出
led = 0xFF; //给定初始值
for(;;)
{
Num = led; //读拨码开关
led = Num>>4; //送显示
delay(10);
}
单片机微控制器的工作原理是靠内部时钟晶振来执行程序的,每一个时钟周期执行一步程序。其实for循环前面的程序仅仅是完成单片机端口初始化、系统参数初始化。程序一直在for循环和中断服务程序里执行,也就是遵循扫描的原理。 没了for循环 你的程序就只能读取端口的状态一次执行到main()函数最后一条指令就停止工作了。