搜索
bottom↓
回复: 12

寄存器某位翻转&=,|= 一句实现?

[复制链接]

出0入0汤圆

发表于 2012-9-23 11:43:30 | 显示全部楼层 |阅读模式
BIT2=0x40;
P2OUT &= (~BIT2);        就等价于P2OUT = P2OUT & (~BIT2);,即将P2OUT寄存器的BIT2位置为0,不改变其它位的状态。
P2OUT |= BIT2;             等价于P2OUT = P2OUT | BIT2;,即将P2OUT寄存器的BIT2位置1,不改变其它位的状态。

能不能实现一条语句,第一次调用的时候置0,第二次置1,这样的直接不断翻转IO口
想了半天,脑袋都疼了。。。。请大神指教

出0入0汤圆

 楼主| 发表于 2012-9-23 11:49:44 | 显示全部楼层
没人回复?自己顶个

出0入93汤圆

发表于 2012-9-23 11:57:58 | 显示全部楼层
P2OUT ^= BIT2;

出0入0汤圆

发表于 2012-9-23 11:58:40 | 显示全部楼层
  1. #ifndef _USE_AVR_PORT_BIT_H_
  2. #define _USE_AVR_PORT_BIT_H_


  3. #define SET_BIT8_FORMAT(Addr)     (*((volatile BYTEBIT *)&Addr)) //取地址强制转换为BYTEBIT结构指针型,指针指向此地址

  4. typedef struct BYTE_BIT
  5. {
  6.     unsigned BIT0:1;
  7.     unsigned BIT1:1;
  8.     unsigned BIT2:1;
  9.     unsigned BIT3:1;
  10.     unsigned BIT4:1;
  11.     unsigned BIT5:1;
  12.     unsigned BIT6:1;
  13.     unsigned BIT7:1;
  14. }BYTEBIT;


  15. #ifdef PORTA
  16.     # define PORTA_BIT     SET_BIT8_FORMAT(PORTA)
  17. #endif
  18. #ifdef PORTB
  19.     # define PORTB_BIT     SET_BIT8_FORMAT(PORTB)
  20. #endif
  21. #ifdef PORTC
  22.     # define PORTC_BIT     SET_BIT8_FORMAT(PORTC)
  23. #endif
  24. #ifdef PORTD
  25.     # define PORTD_BIT     SET_BIT8_FORMAT(PORTD)
  26. #endif
  27. #ifdef PORTE
  28.     # define PORTE_BIT     SET_BIT8_FORMAT(PORTE)
  29. #endif
  30. #ifdef PORTF
  31.     # define PORTF_BIT     SET_BIT8_FORMAT(PORTF)
  32. #endif
  33. #ifdef PORTG
  34.     # define PORTG_BIT     SET_BIT8_FORMAT(PORTG)
  35. #endif



  36. #ifdef DDRA
  37.     # define DDRA_BIT     SET_BIT8_FORMAT(DDRA)
  38. #endif
  39. #ifdef DDRB
  40.     # define DDRB_BIT     SET_BIT8_FORMAT(DDRB)
  41. #endif
  42. #ifdef DDRC
  43.     # define DDRC_BIT     SET_BIT8_FORMAT(DDRC)
  44. #endif
  45. #ifdef DDRD
  46.     # define DDRD_BIT     SET_BIT8_FORMAT(DDRD)
  47. #endif
  48. #ifdef DDRE
  49.     # define DDRE_BIT     SET_BIT8_FORMAT(DDRE)
  50. #endif
  51. #ifdef DDRF
  52.     # define DDRF_BIT     SET_BIT8_FORMAT(DDRF)
  53. #endif
  54. #ifdef DDRG
  55.     # define DDRG_BIT     SET_BIT8_FORMAT(DDRG)
  56. #endif


  57. #ifdef PINA
  58.     # define PINA_BIT     SET_BIT8_FORMAT(PINA)
  59. #endif
  60. #ifdef PINB
  61.     # define PINB_BIT     SET_BIT8_FORMAT(PINB)
  62. #endif
  63. #ifdef PINC
  64.     # define PINC_BIT     SET_BIT8_FORMAT(PINC)
  65. #endif
  66. #ifdef PIND
  67.     # define PIND_BIT     SET_BIT8_FORMAT(PIND)
  68. #endif
  69. #ifdef PINE
  70.     # define PINE_BIT     SET_BIT8_FORMAT(PINE)
  71. #endif
  72. #ifdef PINF
  73.     # define PINF_BIT     SET_BIT8_FORMAT(PINF)
  74. #endif
  75. #ifdef PING
  76.     # define PING_BIT     SET_BIT8_FORMAT(PING)
  77. #endif


  78. #ifdef PORTA
  79.     # define PORTA_0        PORTA_BIT.BIT0
  80.     # define PORTA_1        PORTA_BIT.BIT1
  81.     # define PORTA_2        PORTA_BIT.BIT2
  82.     # define PORTA_3        PORTA_BIT.BIT3
  83.     # define PORTA_4        PORTA_BIT.BIT4
  84.     # define PORTA_5        PORTA_BIT.BIT5
  85.     # define PORTA_6        PORTA_BIT.BIT6
  86.     # define PORTA_7        PORTA_BIT.BIT7
  87. #endif
  88. #ifdef PORTB
  89.     # define PORTB_0        PORTB_BIT.BIT0
  90.     # define PORTB_1        PORTB_BIT.BIT1
  91.     # define PORTB_2        PORTB_BIT.BIT2
  92.     # define PORTB_3        PORTB_BIT.BIT3
  93.     # define PORTB_4        PORTB_BIT.BIT4
  94.     # define PORTB_5        PORTB_BIT.BIT5
  95.     # define PORTB_6        PORTB_BIT.BIT6
  96.     # define PORTB_7        PORTB_BIT.BIT7
  97. #endif
  98. #ifdef PORTC
  99.     # define PORTC_0        PORTC_BIT.BIT0
  100.     # define PORTC_1        PORTC_BIT.BIT1
  101.     # define PORTC_2        PORTC_BIT.BIT2
  102.     # define PORTC_3        PORTC_BIT.BIT3
  103.     # define PORTC_4        PORTC_BIT.BIT4
  104.     # define PORTC_5        PORTC_BIT.BIT5
  105.     # define PORTC_6        PORTC_BIT.BIT6
  106.     # define PORTC_7        PORTC_BIT.BIT7
  107. #endif
  108. #ifdef PORTD
  109.     # define PORTD_0        PORTD_BIT.BIT0
  110.     # define PORTD_1        PORTD_BIT.BIT1
  111.     # define PORTD_2        PORTD_BIT.BIT2
  112.     # define PORTD_3        PORTD_BIT.BIT3
  113.     # define PORTD_4        PORTD_BIT.BIT4
  114.     # define PORTD_5        PORTD_BIT.BIT5
  115.     # define PORTD_6        PORTD_BIT.BIT6
  116.     # define PORTD_7        PORTD_BIT.BIT7
  117. #endif
  118. #ifdef PORTE
  119.     # define PORTE_0        PORTE_BIT.BIT0
  120.     # define PORTE_1        PORTE_BIT.BIT1
  121.     # define PORTE_2        PORTE_BIT.BIT2
  122.     # define PORTE_3        PORTE_BIT.BIT3
  123.     # define PORTE_4        PORTE_BIT.BIT4
  124.     # define PORTE_5        PORTE_BIT.BIT5
  125.     # define PORTE_6        PORTE_BIT.BIT6
  126.     # define PORTE_7        PORTE_BIT.BIT7
  127. #endif
  128. #ifdef PORTF
  129.     # define PORTF_0        PORTF_BIT.BIT0
  130.     # define PORTF_1        PORTF_BIT.BIT1
  131.     # define PORTF_2        PORTF_BIT.BIT2
  132.     # define PORTF_3        PORTF_BIT.BIT3
  133.     # define PORTF_4        PORTF_BIT.BIT4
  134.     # define PORTF_5        PORTF_BIT.BIT5
  135.     # define PORTF_6        PORTF_BIT.BIT6
  136.     # define PORTF_7        PORTF_BIT.BIT7
  137. #endif
  138. #ifdef PORTG
  139.     # define PORTG_0        PORTG_BIT.BIT0
  140.     # define PORTG_1        PORTG_BIT.BIT1
  141.     # define PORTG_2        PORTG_BIT.BIT2
  142.     # define PORTG_3        PORTG_BIT.BIT3
  143.     # define PORTG_4        PORTG_BIT.BIT4

  144. #endif



  145. #ifdef DDRA
  146.     # define DDRA_0     DDRA_BIT.BIT0
  147.     # define DDRA_1     DDRA_BIT.BIT1
  148.     # define DDRA_2     DDRA_BIT.BIT2
  149.     # define DDRA_3     DDRA_BIT.BIT3
  150.     # define DDRA_4     DDRA_BIT.BIT4
  151.     # define DDRA_5     DDRA_BIT.BIT5
  152.     # define DDRA_6     DDRA_BIT.BIT6
  153.     # define DDRA_7     DDRA_BIT.BIT7
  154. #endif
  155. #ifdef DDRB
  156.     # define DDRB_0     DDRB_BIT.BIT0
  157.     # define DDRB_1     DDRB_BIT.BIT1
  158.     # define DDRB_2     DDRB_BIT.BIT2
  159.     # define DDRB_3     DDRB_BIT.BIT3
  160.     # define DDRB_4     DDRB_BIT.BIT4
  161.     # define DDRB_5     DDRB_BIT.BIT5
  162.     # define DDRB_6     DDRB_BIT.BIT6
  163.     # define DDRB_7     DDRB_BIT.BIT7
  164. #endif
  165. #ifdef DDRC
  166.     # define DDRC_0     DDRC_BIT.BIT0
  167.     # define DDRC_1     DDRC_BIT.BIT1
  168.     # define DDRC_2     DDRC_BIT.BIT2
  169.     # define DDRC_3     DDRC_BIT.BIT3
  170.     # define DDRC_4     DDRC_BIT.BIT4
  171.     # define DDRC_5     DDRC_BIT.BIT5
  172.     # define DDRC_6     DDRC_BIT.BIT6
  173.     # define DDRC_7     DDRC_BIT.BIT7
  174. #endif
  175. #ifdef DDRD
  176.     # define DDRD_0     DDRD_BIT.BIT0
  177.     # define DDRD_1     DDRD_BIT.BIT1
  178.     # define DDRD_2     DDRD_BIT.BIT2
  179.     # define DDRD_3     DDRD_BIT.BIT3
  180.     # define DDRD_4     DDRD_BIT.BIT4
  181.     # define DDRD_5     DDRD_BIT.BIT5
  182.     # define DDRD_6     DDRD_BIT.BIT6
  183.     # define DDRD_7     DDRD_BIT.BIT7
  184. #endif
  185. #ifdef DDRE
  186.     # define DDRE_0     DDRE_BIT.BIT0
  187.     # define DDRE_1     DDRE_BIT.BIT1
  188.     # define DDRE_2     DDRE_BIT.BIT2
  189.     # define DDRE_3     DDRE_BIT.BIT3
  190.     # define DDRE_4     DDRE_BIT.BIT4
  191.     # define DDRE_5     DDRE_BIT.BIT5
  192.     # define DDRE_6     DDRE_BIT.BIT6
  193.     # define DDRE_7     DDRE_BIT.BIT7
  194. #endif
  195. #ifdef DDRF
  196.     # define DDRF_0     DDRF_BIT.BIT0
  197.     # define DDRF_1     DDRF_BIT.BIT1
  198.     # define DDRF_2     DDRF_BIT.BIT2
  199.     # define DDRF_3     DDRF_BIT.BIT3
  200.     # define DDRF_4     DDRF_BIT.BIT4
  201.     # define DDRF_5     DDRF_BIT.BIT5
  202.     # define DDRF_6     DDRF_BIT.BIT6
  203.     # define DDRF_7     DDRF_BIT.BIT7
  204. #endif
  205. #ifdef DDRG
  206.     # define DDRG_0     DDRG_BIT.BIT0
  207.     # define DDRG_1     DDRG_BIT.BIT1
  208.     # define DDRG_2     DDRG_BIT.BIT2
  209.     # define DDRG_3     DDRG_BIT.BIT3
  210.     # define DDRG_4     DDRG_BIT.BIT4

  211. #endif


  212. #ifdef PINA
  213.     # define READ_PA0     PINA_BIT.BIT0
  214.     # define READ_PA1     PINA_BIT.BIT1
  215.     # define READ_PA2     PINA_BIT.BIT2
  216.     # define READ_PA3     PINA_BIT.BIT3
  217.     # define READ_PA4     PINA_BIT.BIT4
  218.     # define READ_PA5     PINA_BIT.BIT5
  219.     # define READ_PA6     PINA_BIT.BIT6
  220.     # define READ_PA7     PINA_BIT.BIT7

  221.     # define PINA_0      PINA_BIT.BIT0
  222.     # define PINA_1      PINA_BIT.BIT1
  223.     # define PINA_2      PINA_BIT.BIT2
  224.     # define PINA_3      PINA_BIT.BIT3
  225.     # define PINA_4      PINA_BIT.BIT4
  226.     # define PINA_5      PINA_BIT.BIT5
  227.     # define PINA_6      PINA_BIT.BIT6
  228.     # define PINA_7      PINA_BIT.BIT7
  229. #endif
  230. #ifdef PINB
  231.     # define READ_PB0     PINB_BIT.BIT0
  232.     # define READ_PB1     PINB_BIT.BIT1
  233.     # define READ_PB2     PINB_BIT.BIT2
  234.     # define READ_PB3     PINB_BIT.BIT3
  235.     # define READ_PB4     PINB_BIT.BIT4
  236.     # define READ_PB5     PINB_BIT.BIT5
  237.     # define READ_PB6     PINB_BIT.BIT6
  238.     # define READ_PB7     PINB_BIT.BIT7

  239.     # define PINB_0      PINB_BIT.BIT0
  240.     # define PINB_1      PINB_BIT.BIT1
  241.     # define PINB_2      PINB_BIT.BIT2
  242.     # define PINB_3      PINB_BIT.BIT3
  243.     # define PINB_4      PINB_BIT.BIT4
  244.     # define PINB_5      PINB_BIT.BIT5
  245.     # define PINB_6      PINB_BIT.BIT6
  246.     # define PINB_7      PINB_BIT.BIT7
  247. #endif
  248. #ifdef PINC
  249.     # define READ_PC0     PINC_BIT.BIT0
  250.     # define READ_PC1     PINC_BIT.BIT1
  251.     # define READ_PC2     PINC_BIT.BIT2
  252.     # define READ_PC3     PINC_BIT.BIT3
  253.     # define READ_PC4     PINC_BIT.BIT4
  254.     # define READ_PC5     PINC_BIT.BIT5
  255.     # define READ_PC6     PINC_BIT.BIT6
  256.     # define READ_PC7     PINC_BIT.BIT7

  257.     # define PINC_0      PINC_BIT.BIT0
  258.     # define PINC_1      PINC_BIT.BIT1
  259.     # define PINC_2      PINC_BIT.BIT2
  260.     # define PINC_3      PINC_BIT.BIT3
  261.     # define PINC_4      PINC_BIT.BIT4
  262.     # define PINC_5      PINC_BIT.BIT5
  263.     # define PINC_6      PINC_BIT.BIT6
  264.     # define PINC_7      PINC_BIT.BIT7
  265. #endif
  266. #ifdef PIND
  267.     # define READ_PD0     PIND_BIT.BIT0
  268.     # define READ_PD1     PIND_BIT.BIT1
  269.     # define READ_PD2     PIND_BIT.BIT2
  270.     # define READ_PD3     PIND_BIT.BIT3
  271.     # define READ_PD4     PIND_BIT.BIT4
  272.     # define READ_PD5     PIND_BIT.BIT5
  273.     # define READ_PD6     PIND_BIT.BIT6
  274.     # define READ_PD7     PIND_BIT.BIT7

  275.     # define PIND_0      PIND_BIT.BIT0
  276.     # define PIND_1      PIND_BIT.BIT1
  277.     # define PIND_2      PIND_BIT.BIT2
  278.     # define PIND_3      PIND_BIT.BIT3
  279.     # define PIND_4      PIND_BIT.BIT4
  280.     # define PIND_5      PIND_BIT.BIT5
  281.     # define PIND_6      PIND_BIT.BIT6
  282.     # define PIND_7      PIND_BIT.BIT7
  283. #endif
  284. #ifdef PINE
  285.     # define READ_PE0     PINE_BIT.BIT0
  286.     # define READ_PE1     PINE_BIT.BIT1
  287.     # define READ_PE2     PINE_BIT.BIT2
  288.     # define READ_PE3     PINE_BIT.BIT3
  289.     # define READ_PE4     PINE_BIT.BIT4
  290.     # define READ_PE5     PINE_BIT.BIT5
  291.     # define READ_PE6     PINE_BIT.BIT6
  292.     # define READ_PE7     PINE_BIT.BIT7

  293.     # define PINE_0      PINE_BIT.BIT0
  294.     # define PINE_1      PINE_BIT.BIT1
  295.     # define PINE_2      PINE_BIT.BIT2
  296.     # define PINE_3      PINE_BIT.BIT3
  297.     # define PINE_4      PINE_BIT.BIT4
  298.     # define PINE_5      PINE_BIT.BIT5
  299.     # define PINE_6      PINE_BIT.BIT6
  300.     # define PINE_7      PINE_BIT.BIT7
  301. #endif
  302. #ifdef PINF
  303.     # define READ_PF0     PINF_BIT.BIT0
  304.     # define READ_PF1     PINF_BIT.BIT1
  305.     # define READ_PF2     PINF_BIT.BIT2
  306.     # define READ_PF3     PINF_BIT.BIT3
  307.     # define READ_PF4     PINF_BIT.BIT4
  308.     # define READ_PF5     PINF_BIT.BIT5
  309.     # define READ_PF6     PINF_BIT.BIT6
  310.     # define READ_PF7     PINF_BIT.BIT7

  311.     # define PINF_0      PINF_BIT.BIT0
  312.     # define PINF_1      PINF_BIT.BIT1
  313.     # define PINF_2      PINF_BIT.BIT2
  314.     # define PINF_3      PINF_BIT.BIT3
  315.     # define PINF_4      PINF_BIT.BIT4
  316.     # define PINF_5      PINF_BIT.BIT5
  317.     # define PINF_6      PINF_BIT.BIT6
  318.     # define PINF_7      PINF_BIT.BIT7
  319. #endif
  320. #ifdef PING
  321.     # define READ_PG0     PING_BIT.BIT0
  322.     # define READ_PG1     PING_BIT.BIT1
  323.     # define READ_PG2     PING_BIT.BIT2
  324.     # define READ_PG3     PING_BIT.BIT3
  325.     # define READ_PG4     PING_BIT.BIT4

  326.     # define PING_0      PING_BIT.BIT0
  327.     # define PING_1      PING_BIT.BIT1
  328.     # define PING_2      PING_BIT.BIT2
  329.     # define PING_3      PING_BIT.BIT3
  330.     # define PING_4      PING_BIT.BIT4

  331. #endif

  332. #endif
复制代码
这样就可以位操作了。PORTD_1 = ~PORTD_1;

出0入0汤圆

发表于 2012-9-23 12:02:39 | 显示全部楼层
用IAR 直接和51一样操作

出0入0汤圆

 楼主| 发表于 2012-9-23 12:12:21 | 显示全部楼层
Tliang 发表于 2012-9-23 11:58
这样就可以位操作了。PORTD_1 = ~PORTD_1;

这位大神,没看懂,前面是AVR的头文件?PORTD_1 = ~PORTD_1;这个可以实现?感觉不太明白

出0入0汤圆

发表于 2012-9-23 12:25:09 | 显示全部楼层
takashiki 发表于 2012-9-23 11:57
P2OUT ^= BIT2;

3楼这个是最佳方法

出0入0汤圆

 楼主| 发表于 2012-9-23 13:24:26 | 显示全部楼层
takashiki 发表于 2012-9-23 11:57
P2OUT ^= BIT2;

这个可以。。。太感谢了。。。以前都没注意异或这个事情。。。

出0入0汤圆

发表于 2012-9-23 13:41:38 | 显示全部楼层
lyz1900 发表于 2012-9-23 12:12
这位大神,没看懂,前面是AVR的头文件?PORTD_1 = ~PORTD_1;这个可以实现?感觉不太明白 ...

你把他复制到一个头文件里面然后加载IO。h这个文件后加这个头文件就可以了。

出0入0汤圆

发表于 2012-9-23 13:58:39 | 显示全部楼层
P2OUT ^= BIT2; 这个不错

出0入0汤圆

发表于 2012-9-24 14:27:48 | 显示全部楼层
3楼正解.

出0入296汤圆

发表于 2012-9-25 14:12:38 | 显示全部楼层
嘿嘿……看到熟悉的东西了……

出0入0汤圆

发表于 2012-9-25 14:17:28 | 显示全部楼层
异或 ......
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 16:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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