极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 27420|回复: 7

Arduino在MSP单片机上的实现

[复制链接]
发表于 2013-10-11 11:24:23 | 显示全部楼层 |阅读模式
不怎么擅长表达,一切尽在不言中[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]
回复

使用道具 举报

 楼主| 发表于 2013-10-11 11:25:10 | 显示全部楼层
没事自己赞一个
回复 支持 反对

使用道具 举报

发表于 2013-10-11 13:12:48 | 显示全部楼层
430的库文件?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-11 14:07:00 | 显示全部楼层
今天做项目的时候发现用Arduino写代码的方法思路比较清晰,就穿上来了,就一个头文件
回复 支持 反对

使用道具 举报

发表于 2013-10-11 17:09:51 | 显示全部楼层
majtsdd 发表于 2013-10-11 14:07
今天做项目的时候发现用Arduino写代码的方法思路比较清晰,就穿上来了,就一个头文件

不错 和arduino ide怎么通信呢 移植bootloader?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-28 10:30:40 | 显示全部楼层
不知道啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-28 10:31:15 | 显示全部楼层
我还是新手……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-19 11:15 , Processed in 0.046042 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表