Used do..while in macros to prevent double ; warnings
Clear then conditionally set the data pin when setting high
  rather than conditionally set on high or low, MCP seems
  not to have problems with this as it only reads on corrent
  clock level