avr端口访问简化处理
来源:互联网 发布:股票盯盘系统公式源码 编辑:程序博客网 时间:2024/04/29 02:16
用标准的api非常麻烦,DDRX,PORTX,PINX,这3个端口寄存器的X必须对应,硬件发生变化的时候,可能会从A变到B,修改起来非常费劲,下面给出一种解决方案,当然并非完美,因为是有时间损耗的,不过端口变化的情况下,可以自如处理,思路是:把所有端口统一编号,不再重复,如同basic stamp单片机,之后再修改这三组寄存器的时候,接口就能统一了,在执行时,再归到不同的寄存器内。欢迎拍砖
#define UPA0 0
#define UPA1 1
#define UPA2 2
#define UPA3 3
#define UPA4 4
#define UPA5 5
#define UPA6 6
#define UPA7 7
#define UPB0 (0+8)
#define UPB1 (1+8)
#define UPB2 (2+8)
#define UPB3 (3+8)
#define UPB4 (4+8)
#define UPB5 (5+8)
#define UPB6 (6+8)
#define UPB7 (7+8)
#define UPC0 (0+16)
#define UPC1 (1+16)
#define UPC2 (2+16)
#define UPC3 (3+16)
#define UPC4 (4+16)
#define UPC5 (5+16)
#define UPC6 (6+16)
#define UPC7 (7+16)
#define UPD0 (0+24)
#define UPD1 (1+24)
#define UPD2 (2+24)
#define UPD3 (3+24)
#define UPD4 (4+24)
#define UPD5 (5+24)
#define UPD6 (6+24)
#define UPD7 (7+24)
void seUPort(char uport)
{
switch(uport/8)
{
case 0:
PORTA|=(1<<(uport&7));
break;
case 1:
PORTB|=(1<<(uport&7));
break;
case 2:
PORTC|=(1<<(uport&7));
break;
case 3:
PORTD|=(1<<(uport&7));
break;
}
}
void clUPort(char uport)
{
switch(uport/8)
{
case 0:
PORTA&=~(1<<(uport&7));
break;
case 1:
PORTB&=~(1<<(uport&7));
break;
case 2:
PORTC&=~(1<<(uport&7));
break;
case 3:
PORTD&=~(1<<(uport&7));
break;
}
}
void outUPort(char uport)
{
switch(uport/8)
{
case 0:
DDRA|=(1<<(uport&7));
break;
case 1:
DDRB|=(1<<(uport&7));
break;
case 2:
DDRC|=(1<<(uport&7));
break;
case 3:
DDRD|=(1<<(uport&7));
break;
}
}
void inUport(char uport)
{
switch(uport/8)
{
case 0:
DDRA&=~(1<<(uport&7));
break;
case 1:
DDRB&=~(1<<(uport&7));
break;
case 2:
DDRC&=~(1<<(uport&7));
break;
case 3:
DDRD&=~(1<<(uport&7));
break;
}
}
char getUPort(char uport)
{
unsigned char v = 0;
switch(uport/8)
{
case 0:
v = (PINA&(1<<(uport&7)));
break;
case 1:
v = (PINB&(1<<(uport&7)));
break;
case 2:
v = (PINC&(1<<(uport&7)));
break;
case 3:
v = (PIND&(1<<(uport&7)));
break;
}
return v!=0;
}
- avr端口访问简化处理
- AVR单片机端口设置
- AVR端口结构与分析
- AVR 端口宏定义技巧
- AVR 学习笔记------AVR的I/O端口及其使用
- AVR单片机端口和XMEM调试
- AVR的IO端口特性与应用
- AVR的IO端口特性与应用
- AVR-GCC的I/O端口API
- AVR 的 IO 端口特性与应用
- 简化页面访问路径
- frame访问、设置简化
- AVR
- 43_ajax简化处理
- CLOB处理的处理简化
- 处理AVR 微控制器的NC引脚
- 处理AVR 微控制器的NC引脚
- 透析avr-gcc的中断处理原理
- servlet 总结2
- 工具栏小结
- 设计模式观察-Singleton
- 最近些傻事
- DosBox的Windows下的编译与其字体绘制实现
- avr端口访问简化处理
- basic stamp里SHIFTIN在avr下的替代实现
- 面试非技术经验or注意事项总结...
- 定点c程序之一:定标
- 面试——前3分钟定终身
- 实习的一些收获1
- 【STM32 .Net MF开发板学习-12】跳动的音符(PWM合成)
- BCG使用注意事项
- 2010-08-18