/*****************************************************************************
文件名称:PORT.H
文件标识:_PORT_H_
摘 要:AVR定时器通用IO端口定义
*****************************************************************************/
#ifndef _PORT_H_
#define _PORT_H_
#define P(X,Y) (BYPORT(X)*256+BYBIT(Y)) //合并引脚信息
#define BYPORT(X) BYPORT_##X //端口
#define BYPORT_A 0 //A口
#define BYPORT_B 1 //B口
#define BYPORT_C 2 //C口
#define BYPORT_D 3 //D口
#define BYPORT_E 4 //E口
#define BYPORT_F 5 //F口
#define BYPORT_G 6 //G口
#define BYBIT(X) BYBIT_##X //口线
#define BYBIT_0 (1 << 0) //位0
#define BYBIT_1 (1 << 1) //位1
#define BYBIT_2 (1 << 2) //位2
#define BYBIT_3 (1 << 3) //位3
#define BYBIT_4 (1 << 4) //位4
#define BYBIT_5 (1 << 5) //位5
#define BYBIT_6 (1 << 6) //位6
#define BYBIT_7 (1 << 7) //位7
#define BYBIT_H 0XF0 //高四位
#define BYBIT_L 0X0F //低四位
#define BYBIT_W 0XFF //全八位
#define BIT(X) (1 << (X)) //位X
#define SetBit(var,X) (var) |= 1<
#define ClrBit(var,X) (var) &= ~(1<
#define TogBit(var,X) (var) ^= 1<
#define TestBit(var,X) ((var) & (1<
#define SET(X) PORT(X) |= (X)%256 //置数据位
#define CLR(X) PORT(X) &= ~((X)%256) //清数据位
#define PTOG(X) PORT(X) ^= (X)%256 //取反数据位
#define OUT(X) DDR(X) |= (X)%256 //数据方向:输出
#define IN(X) DDR(X) &= ~((X)%256) //数据方向:输入
#define DTOG(X) DDR(X) ^= (X)%256 //数据方向:转换
#define READ(X) (PIN(X) & ((X)%256)) //读取数据引脚电平
#ifndef PORTA
#define PORTA (*(volatile unsigned char *)0x00)
#define DDRA (*(volatile unsigned char *)0x00)
#define PINA (*(volatile unsigned char *)0x00)
#endif
#ifndef PORTB
#define PORTB (*(volatile unsigned char *)0x00)
#define DDRB (*(volatile unsigned char *)0x00)
#define PINB (*(volatile unsigned char *)0x00)
#endif
#ifndef PORTC
#define PORTC (*(volatile unsigned char *)0x00)
#define DDRC (*(volatile unsigned char *)0x00)
#define PINC (*(volatile unsigned char *)0x00)
#endif
#ifndef PORTD
#define PORTD (*(volatile unsigned char *)0x00)
#define DDRD (*(volatile unsigned char *)0x00)
#define PIND (*(volatile unsigned char *)0x00)
#endif
#ifndef PORTE
#define PORTE (*(volatile unsigned char *)0x00)
#define DDRE (*(volatile unsigned char *)0x00)
#define PINE (*(volatile unsigned char *)0x00)
#endif
#ifndef PORTF
#define PORTF (*(volatile unsigned char *)0x00)
#define DDRF (*(volatile unsigned char *)0x00)
#define PINF (*(volatile unsigned char *)0x00)
#endif
#ifndef PORTG
#define PORTG (*(volatile unsigned char *)0x00)
#define DDRG (*(volatile unsigned char *)0x00)
#define PING (*(volatile unsigned char *)0x00)
#endif
#define ADDRESS0 (*(volatile unsigned char *)0x00)
#define PORT(X)
(*(
(X)/256 == 0 ? &PORTA :
(X)/256 == 1 ? &PORTB :
(X)/256 == 2 ? &PORTC :
(X)/256 == 3 ? &PORTD :
(X)/256 == 4 ? &PORTE :
(X)/256 == 5 ? &PORTF :
(X)/256 == 6 ? &PORTG : &ADDRESS0
))
#define DDR(X)
(*(
(X)/256 == 0 ? &DDRA :
(X)/256 == 1 ? &DDRB :
(X)/256 == 2 ? &DDRC :
(X)/256 == 3 ? &DDRD :
(X)/256 == 4 ? &DDRE :
(X)/256 == 5 ? &DDRF :
(X)/256 == 6 ? &DDRG : &ADDRESS0
))
#define PIN(X)
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』