D:\Program Files\Arduino\hardware\arduino\cores\arduino的wiring_digital.c文件或D:\Program Files\Arduino\hardware\arduino\cores\robot的wiring_digital.c文件
#define ARDUINO_MAIN
#include "wiring_private.h"
#include "pins_arduino.h"
void pinMode(uint8_t pin, uint8_t mode)
{
uint8_tbit = digitalPinToBitMask(pin);
uint8_tport = digitalPinToPort(pin);
volatileuint8_t *reg, *out;
if(port == NOT_A_PIN) return;
//JWS: can I let the optimizer do this?
reg= portModeRegister(port);
out= portOutputRegister(port);
if(mode == INPUT) {
uint8_toldSREG = SREG;
cli();
*reg= ~bit;
*out= ~bit;
SREG= oldSREG;
}else if (mode == INPUT_PULLUP) {
uint8_toldSREG = SREG;
cli();
*reg= ~bit;
*out|= bit;
SREG= oldSREG;
}else {
uint8_toldSREG = SREG;
cli();
*reg|= bit;
SREG= oldSREG;
}
}