前几天有个朋友在学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
文章评论(0条评论)
登录后参与讨论