开始进军汽车电子领域,首先要选一款单片机,当然首选飞思卡尔的这款MC9S12单片机,理由去百度吧!干货比较重要:
1.IO控制
说到这款单片机的IO控制,先说LED的控制用到的普通IO,主要是由几个寄存器控制:
1.1.数据寄存器(Px)
PORTA、PORTB、PORTE和PORTK
数据寄存器Px中的8位对应每个端口中的相应引脚,如果某端口的引脚被定义为输出时,写入数据寄存器Px中的数值,则从对应引脚输出;如果某端口的引脚被定义为输入时,可以读取数据寄存器Px对应引脚的电平值。
需要注意PORTE端口是一个特例,它的最低两位只能为输入口,所以PORTE端口的数据寄存器最低两位是只读位。
1.2.数据方向寄存器(DDRx)
PORTA、PORTB、PORTE和PORTK
DDRx决定对应引脚配置为输出口还是输入口,如果某位为“0”,则对应引脚设定为输入口;如果某位为“1”,则对应引脚设定为输出口。MCU复位后,DDRx值为0x00,引脚默认为输入口。
需要注意的是,PORTE端口是一个特例,它的最低两位只能为输入口,所以PORTE端口的数据方向寄存器最低两位是只读位,读取这两位始终返回“0”。
知道这两个寄存器就可以封装一下led的代码了:
CLED.h代码:
#ifndef _CLED_H_
#define _CLED_H_
#include <mc9s12xdp512.h>
/*IO定义区*/
#define LED_IO PORTB
typedef struct StLED{
void (*LED_Init)(void);
void (*LED_Move)(int);
}CLED;
void CLED_Init();
void CLED_LED1(int iDelayTime);
void CLED_LED2(int iDelayTime);
void CLED_LED3(int iDelayTime);
void CLED_LED4(int iDelayTime);
void CLED_LED5(int iDelayTime);
void CLED_LED6(int iDelayTime);
void CLED_LED7(int iDelayTime);
void CLED_LED8(int iDelayTime);
void CLED_LED1_LED2(int iDelayTime);