MSP430单片机IO引脚的宏定义

来源:本站
导读:目前正在解读《MSP430单片机IO引脚的宏定义》的相关信息,《MSP430单片机IO引脚的宏定义》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《MSP430单片机IO引脚的宏定义》的详细说明。
简介:相信不少人都有在不同CPU间移植程序的经历,在移植过程中,对IO引脚的移植又占据了移植工作的大部分。那么,是否能在编码过程中采用一种较好的方法来减少将来移植中的工作量呢?

相信不少人都有在不同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<<bit)

#define IO_SET_N(port, bit) P##port##OUT |= (1<<bit)

#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<<bit)

#define IO_CLR_N(port, bit) P##port##OUT &= ~(1<<bit)

#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<<bit)

#define IO_DIR_I_(port, bit, inv) P##port##DIR &=~ (1<<bit)

#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<<bit)) == 0)

#define IO_TEST_N(port, bit) ((P##port##IN & (1<<bit)) != 0)

#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<<bit)

#define IO_P4_MASK(m)

(

m(I2C_SCK)

| m(I2C_SDA)

)

…..

如上所示,你可以按照上面的方式增加自己的功能。站长提示:其实不光MSP430单片机可以用这种方法,其它微处理器也可以这种方法。象8051单片机就可以这种方法来很好的实现。

提醒:《MSP430单片机IO引脚的宏定义》最后刷新时间 2024-03-14 01:10:16,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《MSP430单片机IO引脚的宏定义》该内容的真实性请自行鉴别。