原创 AVR自定义的头文件

2009-8-12 19:19 3313 2 2 分类: MCU/ 嵌入式

     前几天有个朋友在学AVR的时候,觉得IO定义的时候没有51那么好用,不能直接进行位定义。让我帮他想想办法。后来我想了一会,做了一个头文件。名字叫做“IO.H”:


当要向某个端口写1的时候你可以写成:WBITA0(1);反之则可以写成WBITA0(0);


#define WBITA0(DATA) PORTA=(DATA?PORTA|0X01:PORTA&0XFE)


当需要读某一端口时,直接写成X=RBITA1就可以了,PINA的第一个端口是1则x=1;反之x=0;


#define RBITA1 ((PINA&BIT(1))>>1) 


这样就可以像操作51的IO口一样操作AVR了。但是我那位朋友还不满意,因为经常要配置方向,觉得很麻烦。于是我又想了个办法,写了一个“DDRIO.H”。


下面两个就定义了所有IO口。并且不需要配置方向。应用了连接符。


#define PORT(M,N,DATA) PORT##M=(DDR##M|=BIT(N),(DATA?PORT##M|BIT(N):PORT##M&~BIT(N)))


#define PIN(M,N) (DDR##M&=~BIT(N),(PIN##M&BIT(N)))


例如:#define w_clk(data) PORT(C,1,data)


             #define r_clk     PIN(C,1)


        虽然不需要配置方向了,但是每次读或者写都重新配置了方向,产生了很多冗余的代码。这是需要改进的地方。


https://static.assets-stash.eet-china.com/album/old-resources/2009/8/12/a94a1738-5ef6-4aca-8964-b641573be64b.rar

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /2 下一条