|
不怎么擅长表达,一切尽在不言中[pre lang="arduino" line="1" file="PinCongfigHead"]
/*
作者:majtsdd
主题:Arduino在MSP单片机上的实现
时间:2013-10-11
备注:
盖头文件只含有函数
pinMode(Pin,Mode)
{
1.输出 OUTPUT
2.普通输入 INPUT
3.上拉输入 SETREFINPUT
4.下拉输入 CLRREFINPUT
}
digitalWrite(Pin , Mode)
digitalRead(Pin)
端口 对应系统配置端口
P1.0 0
P1.1 1
P1.2 2
P1.3 3
P1.4 4
P1.5 5
P1.6 6
P1.7 7
P2.0 8
P2.1 9
P2.2 10
P2.3 11
P2.4 12
P2.5 13
*/
#ifndef __PinModeConfig_H
#define __PinModeConfig_H
#include<msp430g2553.h>
#define OUTPUT 0
#define INPUT 1
#define SETREFINPUT 2
#define CLRREFINPUT 3
unsigned char volatile* portDIRRegister(char PinNum)
{
unsigned char volatile *Reg;
if(PinNum<8)
{
Reg=&(P1DIR);
}else
{
Reg=&(P2DIR);
}
return Reg;
}
#define HIGH 1
#define LOW 0
unsigned char volatile* portOUTPUTRegister(char PinNum)
{
unsigned char volatile *Reg;
if(PinNum<8)
{
Reg=&(P1OUT);
}else
{
Reg=&(P2OUT);
}
return Reg;
}
unsigned char volatile* portRENRegister(char PinNum)
{
unsigned char volatile *Reg;
if(PinNum<8)
{
Reg=&(P1REN);
}else
{
Reg=&(P2REN);
}
return Reg;
}
unsigned char const volatile* portINPUTRegister(char PinNum)
{
unsigned char const volatile *Reg;
if(PinNum<8)
{
Reg=&(P1IN);
}else
{
Reg=&(P2IN);
}
return Reg;
}
unsigned char portGroupNum(char PinNum)
{
return 0x01<<(PinNum%8);
}
//////////////////////////////////////////////////////////////////////////////////////
void pinMode(char PinNum,char ConfigMode)
{
unsigned char digitalPin;
unsigned char volatile *reg;
if(PinNum>13)
{
return;
}
reg=portDIRRegister(PinNum);
digitalPin=portGroupNum(PinNum);
switch(ConfigMode)
{
case INPUT:
*reg &=~digitalPin;
return;
case OUTPUT:
*reg |=digitalPin;
return;
case SETREFINPUT:
*reg &=~digitalPin;
reg=portOUTPUTRegister(PinNum);
*reg |=digitalPin;
reg=portRENRegister(PinNum);
*reg |=digitalPin;
return;
case CLRREFINPUT:
*reg &=~digitalPin;
reg=portOUTPUTRegister(PinNum);
*reg &=~digitalPin;
reg=portRENRegister(PinNum);
*reg |=digitalPin;
return;
default:return;
}
}
void digitalWrite(char PinNum,char PinState)
{
unsigned char digitalPin;
unsigned char volatile *reg;
if(PinNum>13)
{
return;
}
reg=portOUTPUTRegister(PinNum);
digitalPin=portGroupNum(PinNum);
if(PinState==LOW)
{
*reg &=~digitalPin;
}else if(PinState==HIGH)
{
*reg |=digitalPin;
}else
{
return;
}
}
char digitalRead(char PinNum)
{
unsigned char digitalPin;
unsigned char const volatile *reg;
reg=portINPUTRegister(PinNum);
digitalPin=portGroupNum(PinNum);
if(*reg&digitalPin)
{
return HIGH;
}else
{
return LOW;
}
}
#endif[/code] |
|