11#include <stdint.h>
22#include <avr/io.h>
33#include <util/delay.h>
4- #include "constants .h"
4+ #include "Arduino .h"
55
66void delay_16ms (uint16_t count )
77{
@@ -11,38 +11,42 @@ void delay_16ms(uint16_t count)
1111}
1212
1313// shift data in after rising edge of clock, 9 cycles/bit
14- uint8_t shiftIn (uint8_t dataPin , uint8_t clockPin , uint8_t bitOrder )
14+ uint8_t shiftIn (uint8_t dataPin , uint8_t clockPin , _bitOrder bitOrder )
1515{
1616 uint8_t value ;
1717
1818 if (bitOrder == MSBFIRST ) value = 0x01 ;
1919 else value = 0x80 ;
2020
21- {
21+ { // do
2222 // use inline asm to access the carry bit (not part of C/C++)
2323 morebits :
24- PORTB |= 1 << clockPin ;
24+ //PORTB |= 1 << clockPin;
25+ digitalWrite (clockPin , HIGH );
2526 if (bitOrder == MSBFIRST ) value <<= 1 ;
2627 else value >>= 1 ;
2728
28- if (bit_is_set (PORTB , dataPin ))
29+ //if (bit_is_set(PORTB, dataPin))
30+ if (digialRead (dataPin ))
2931 {
3032 if (bitOrder == MSBFIRST ) value |= 0x01 ;
3133 else value |= 0x80 ;
3234 }
33- PORTB &= ~(1 << clockPin );
35+ //PORTB &= ~(1 << clockPin);
36+ digitalWrite (clockPin , LOW );
3437
3538 asm goto ("brcc %l[morebits]" :::: morebits );
36- }
39+ } // while (value)
3740
3841 return value ;
3942}
4043
41-
4244// clock data out, 50% duty cycle, 8 cycles/bit
4345// clock line left high after shiftOut
44- void shiftOut (uint8_t dataPin , uint8_t clockPin , uint8_t bitOrder , uint8_t value )
46+ void shiftOut (uint8_t dataPin , uint8_t clockPin , _bitOrder bitOrder , uint8_t value )
4547{
48+ check_valid_digital_pin (dataPin );
49+ check_valid_digital_pin (clockPin );
4650 const uint8_t dataMask = 1 << dataPin ;
4751 const uint8_t clkMask = 1 << clockPin ;
4852 uint8_t portbits = (PORTB & ~(dataMask | clkMask ));
@@ -57,7 +61,7 @@ void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t value
5761 value |= 0x80 ;
5862 }
5963
60- {
64+ { // do
6165 // use inline asm to access the carry bit (not part of C/C++)
6266 morebits :
6367 PORTB = portbits ; // Clock and data pin low
@@ -74,6 +78,6 @@ void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t value
7478 else value >>= 1 ;
7579 // loop until no more bits
7680 asm goto ("brne %l[morebits]" :: "r" (value ) :: morebits );
77- }
81+ } // while (value)
7882}
7983
0 commit comments