单片机
返回首页

MSP430单片机IO引脚的宏定义

2015-11-02 来源:eefocus

相信不少人都有在不同CPU间移植程序的经历,在移植过程中,对IO引脚的移植又占据了移植工作的大部分。那么,是否能在编码过程中采用一种较好的方法来减少将来移植中的工作量呢?
假设MSP430单片机的P40,P41,P42分别接在I2C的WP,SCK,SDL引脚上。通常,你可能会最先想到下面这种办法:
.H
 #define I2C_WP 1
 #define I2C_SCK 2
 #define I2C_SDA 4
 #define I2C_PDIR P4DIR
 #define I2C_POUT P4OUT
 #define I2C_PIN P4IN
.C
 I2C_PDIR |= (I2C_WP | I2C_SCK | I2C_SDA);
 I2C_POUT |= I2C_WP;
 ….

若WP是由P30经反相器接到WP脚上的,那么移植的工作量仍然是比较多,
 #define IO_I2C_WP(m) m(3, 0, Y)
 #define IO_I2C_SCK(m) m(4, 1, N)
 #define IO_I2C_SDA (m) m(4, 2, N)

 #define IO_SET(name) IO_##name(SET_)
 #define IO_SET_(port, bit, inv) IO_SET_##inv(port, bit)
 #define IO_SET_Y(port, bit) P##port##OUT &= ~(1<  #define IO_SET_N(port, bit) P##port##OUT |= (1<
 #define IO_CLR(name) IO_##name(CLR_)
 #define IO_CLR_(port, bit, inv) IO_CLR_##inv(port, bit)
 #define IO_CLR_Y(port, bit) P##port##OUT |= (1<  #define IO_CLR_N(port, bit) P##port##OUT &= ~(1<
 #define IO_DIR_O(name) IO_##name(DIR_O_)
 #define IO_DIR_I(name) IO_##name(DIR_I_)
 #define IO_DIR_O_(port, bit, inv) P##port##DIR |= (1<  #define IO_DIR_I_(port, bit, inv) P##port##DIR &=~ (1<
 #define IO_TEST(name) IO_#name(TEST_)
 #define IO_TEST_(port, bit, inv) IO_TEST_##inv(port, bit)
 #define IO_TEST_Y(port, bit) ((P##port##IN & (1<  #define IO_TEST_N(port, bit) ((P##port##IN & (1<
 #define IO_PORT(name) IO_##name(PORT_)
 #define IO_PORT_(port, bit, inv) port

 #define IO_BIT(name) IO_##name(BIT_)
 #define IO_BIT_(port, bit, inv) (1<
 #define IO_P4_MASK(m)
 (
  m(I2C_SCK)
  | m(I2C_SDA)
  )
…..
  如上所示,你可以按照上面的方式增加自己的功能。站长提示:其实不光MSP430单片机可以用这种方法,其它微处理器也可以这种方法。象8051单片机就可以这种方法来很好的实现。
进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章