当前位置:   article > 正文

Arduino代码机制-引脚读写_digitalpintobitmask

digitalpintobitmask

在写arduino代码时,pinMode, digitalWrite, digitalRead这些函数用起来是不是非常顺手呢?有了这些函数,我们就不用关心AVR单片机的那些令人头疼寄存器了。我们向函数传入引脚在Arduino开发板上的引脚号,就能对这个引脚进行读写和设置操作了。这些函数是如何实现的呢?

以上这三个函数,最终还是要通过设置PORT,PIN和DDR三个寄存器实现,要设置某个引脚,就必须知道这个引脚在哪个端口上,还必须知道在这个端口的哪一位上,这样就能通过设置寄存器来读写和设置引脚了。

宏 digitalPinToPort(P)

#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
  • 1

Arduino将端口定义为整形,后面将会领略到这样定义的妙处

#define PA 1
#define PB 2
#define PC 3
#define PD 4
#define PE 5
#define PF 6
#define PG 7
#define PH 8
#define PJ 10
#define PK 11
#define PL 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

再将每个引脚在哪个端口保存为数组,放在Flash中,通过查表得到引脚所在的端口。关于如何将数据放在Flash中这方面内容可以看我的上一篇博客。

const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
// PORTLIST     
// -------------------------------------------      
PE  , // PE 0 ** 0 ** USART0_RX 
PE  , // PE 1 ** 1 ** USART0_TX 
PE  , // PE 4 ** 2 ** PWM2  
PE  , // PE 5 ** 3 ** PWM3  
PG  , // PG 5 ** 4 ** PWM4  
PE  , // PE 3 ** 5 ** PWM5  
PH  , // PH 3 ** 6 ** PWM6  
PH  , // PH 4 ** 7 ** PWM7  
PH  , // PH 5 ** 8 ** PWM8  
PH  , // PH 6 ** 9 ** PWM9  
PB  , // PB 4 ** 10 ** PWM10    
PB  , // PB 5 ** 11 ** PWM11    
PB  , // PB 6 ** 12 ** PWM12    
PB  , // PB 7 ** 13 ** PWM13    
PJ  , // PJ 1 ** 14 ** USART3_TX    
PJ  , // PJ 0 ** 15 ** USART3_RX    
PH  , // PH 1 ** 16 ** USART2_TX    
PH  , // PH 0 ** 17 ** USART2_RX    
PD  , // PD 3 ** 18 ** USART1_TX    
PD  , // PD 2 ** 19 ** USART1_RX    
PD  , // PD 1 ** 20 ** I2C_SDA  
PD  , // PD 0 ** 21 ** I2C_SCL  
PA  , // PA 0 ** 22 ** D22  
PA  , // PA 1 ** 23 ** D23  
PA  , // PA 2 ** 24 ** D24  
PA  , // PA 3 ** 25 ** D25  
PA  , // PA 4 ** 26 ** D26  
PA  , // PA 5 ** 27 ** D27  
PA  , // PA 6 ** 28 ** D28  
PA  , // PA 7 ** 29 ** D29  
PC  , // PC 7 ** 30 ** D30  
PC  , // PC 6 ** 31 ** D31  
PC  , // PC 5 ** 32 ** D32  
PC  , // PC 4 **
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/67630
推荐阅读
相关标签
  

闽ICP备14008679号