OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5447|回复: 6

基于宏定义的超强avr io口操作(向使用51单片机一样方便操作端口) 求能用的程序

[复制链接]

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2014-8-6
在线时间
3 小时
发表于 2014-12-16 19:22:25 | 显示全部楼层 |阅读模式
5金钱
 基于宏定义的超强avr io口操作(向使用51单片机一样方便操作端口)  求能用的程序
 求能用的程序
 求能用的程序
大神们
要给力!!!

最佳答案

查看完整内容[请看2#楼]

http://v.youku.com/v_show/id_XNDkwODQzMzA4.html?tpa=dW5pb25faWQ9MTAyMjEzXzEwMDAwMl8wMV8wMQ 这个视频里有讲到,参考一下
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2014-12-16 19:22:26 | 显示全部楼层
http://v.youku.com/v_show/id_XNDkwODQzMzA4.html?tpa=dW5pb25faWQ9MTAyMjEzXzEwMDAwMl8wMV8wMQ
这个视频里有讲到,参考一下
回复

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2014-8-6
在线时间
3 小时
 楼主| 发表于 2014-12-17 11:48:56 | 显示全部楼层
回复【2楼】2449164582:
---------------------------------
我看了一下,这方法好像只能用于局部变量,而且放在ATmage16好像不行吧,他头文件没有定义。现在我是想把51的宏定义 #define RX  2-7改到ATmage16去,要怎么改,他的端口一次赋值完,我思维转不过来
回复

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2014-12-17 14:44:05 | 显示全部楼层
它是通过结构体,共用体来实现端口的位操作的,并不局限于局部变量啊!!!!!!!!
回复

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2014-8-6
在线时间
3 小时
 楼主| 发表于 2014-12-27 22:00:30 | 显示全部楼层
回复【4楼】2449164582:
---------------------------------
我知道了。谢谢你了
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-11-16
在线时间
22 小时
发表于 2020-3-2 13:42:02 | 显示全部楼层
答案在此: 你的标题是我多年前写的 .哈哈


  1. ///////////////////////////////////////////////////////////////
  2. //位带操作,实现51类似的GPIO控制功能
  3. //具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
  4. //IO口操作宏定义
  5. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
  6. #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
  7. #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
  8. //IO口地址映射
  9. #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
  10. #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
  11. #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
  12. #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
  13. #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
  14. #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
  15. #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C   

  16. #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
  17. #define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
  18. #define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
  19. #define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
  20. #define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
  21. #define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
  22. #define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08
  23. ;
  24. /* shine 改进版本 */
  25. #define PIN(m,n) BIT_ADDR(GPIO##m##_BASE+8,n)       
  26. #define PORT(m,n) BIT_ADDR(GPIO##m##_BASE+12,n)       
  27. //IO口操作,只对单一的IO口!
  28. //确保n的值小于16!

  29. #define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出
  30. #define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入

  31. #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出
  32. #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入

  33. #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出
  34. #define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入

  35. #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出
  36. #define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入

  37. #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出
  38. #define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入

  39. #define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出
  40. #define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入

  41. #define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出
  42. #define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入
复制代码


  1. // ********举例说明**********
  2. //
  3. //定义输入按键:

  4. #define KEY1 PIN(C,3)
  5. #define KEY2 PIN(A,0)
  6. #define KEY3 PIN(A,1)
  7. #define KEY4 PIN(A,2)
  8. #define KEY5 PIN(A,3)

  9. //定义输出功能;
  10.         #define SDI_5460       PORT(C,2)
  11.         #define SDO_5460       PIN(A,6)
  12.         #define SCLK_5460      PORT(A,5)
  13.         #define RST_5460       PORT(C,4)
  14.         #define CS_5460        PORT(A,4)
  15.         #define CS_U1                   CS_5460
复制代码


回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-11-16
在线时间
22 小时
发表于 2020-3-2 13:46:38 | 显示全部楼层
shuxue 发表于 2014-12-17 11:48
回复【2楼】2449164582:
---------------------------------
我看了一下,这方法好像只能用于局部变量,而 ...

avr
我做过.非常给力.

基于宏定义的超强avr io口操作(向使用51单片机一样方便操作端口) - 奇手
https://www.veryarm.com/145938.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 03:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表