/*****************************************************************************
文件名称: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<<(X) //置位
#define ClrBit(var,X) (var) &= ~(1<<(X)) //清零
#define TogBit(var,X) (var) ^= 1<<(X) //取反
#define TestBit(var,X) ((var) & (1<<(X))) //测试
#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)
(*(
上一篇:TimerMode.h头文件下载-AVR定时器工作模式名称定义
下一篇:ICC AVR软件Table键一次缩进四个空格的设置
推荐阅读最新更新时间:2024-11-13 10:37
设计资源 培训 开发板 精华推荐
- 下载有礼|是德科技电子书 《通过了解测试精度的基础知识, 提高良率并降低风险》,不做“差不多先生”
- 有奖直播:助力AI算力,下一代GPU服务器中卡缘高速互连解决方案哪里找?
- 双 11 拯救行动:用开发板治愈单身狗之忧桑
- 免费送:英国Aim TTi 最新数字信号发生器和热销电流探头【社区重磅福利】
- 了解ADI电网管理、能源计量方案,答题赢Kindle、《新概念模拟电路》【世健的ADI之路主题游 能源站】
- VISHAY新能源主题月,幸运闯关赢大奖!
- 直播已结束【基于迈来芯第二代位置传感器优化设计的新一代产品】
- 有奖直播:TI 超低功耗 MCU 在触摸及智能化工业网关中的应用
- 有奖直播:新科技、新课堂、新学期~ ADI软件定义无线电ADALM-Pluto入门实战
- [年末调查]工程师年末大盘点,你被点名了!