基于C8051F021的定位和报警移动终端设计
④使能交叉开关,即XBARE=1,XBR2=0x44。因为EMIFLE=0,交叉开关译码器将不跳过P0.7、P0.6、P0.5引脚,所以按优先权交叉开关译码表进行分配。UART0具有最高优先权,故P0.0分配给TX0、P0.1分配给RX0;SMBus的SDA、SCL分别分配在P0.2、P0.3引脚;UART1的TX1、RX1分别分配在P0.4、P0.5引脚;INT0分配在P0.6引脚;INT1分配在P0.7引脚。
⑤设置UART0的TX0引脚(TX0,P0.0)、UART1的TX1引脚(TX1、P0.4)为推换输出方式,即P0MDOUT=0x11。RX0、SDA、SCL、RX1、INT0和INT1是由交叉开关分配输入的,因此与其端口配置寄存器的值无关。
⑥P2、P3作为一般I/O端口初始化输入状态,即P2MDOUT=0x00、P2=0xFF和P3MDOUT=0x00、P3=0xFF。
引脚分配如表1所列。
表1 单片机引脚分配
初始化程序如下:
void System_init(){
WDTCN=0xdeh; //禁止看门狗
WDTCN=0xadh;
EMI0CF=0x00;
XBR0=0x05; //使能UART0、SMBus
XBR1=0x14; //使能UART1,使能交叉开关和弱上拉,禁止外部寄存器低端口ALE、WR、RD由交叉开关寄存器或地址锁存器决定I/O端口配置
P0MDOUT=0x11; //TX0、TX1为推挽输出,RX0、SDA、SCL、RX1、INT0和INT1是由交叉开关分配输入的,因此与其端口配置寄存器的值无关
P2MDOUT.0=0x0; //把P2.0位初始化为输入方式,用作LCD的命令/数据的辨别
P2.0=1;
//初始化为4×4键盘接口
P1MDIN=0xFFH; //配置P1端口为数字输入模式
P1MDOUT=0x0FH; //配置P1.0~P1.3为推挽方式,P1.4~P1.7为漏极开路方式
P1|=0xF0; //P1端口低4位为输出,高4位为输入
P3MDOUT=0x00; //将P3口设置为输入方式
P3=0xFF;
IE=0x85; //使能INT0、INT1并按默认的优先权进行切换
}
;UART0初始化函数;定时器1为UART0波特率源
void UART0_init(){
SCON0=0x50; //UART工作模式为1,8位数据位,使能RX
TMOD=0x20; //定时器1工作模式2
《基于C8051F021的定位和报警移动终端设计(第2页)》