Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define PIXEL_PORT PORTB
- #define PIXEL_DDR DDRB
- #define PIXEL_BIT 4
- #define PIXEL_COUNT 16
- unsigned char r = 0;
- unsigned char g = 0;
- unsigned char b = 10;
- inline void sendByte(unsigned char b) {
- for (int i = 7; i >= 0; i--) {
- if (b & 1 << i) { // bit = 1
- asm volatile (
- "sbi %[port], %[bit] \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "cbi %[port], %[bit] \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- ::
- [port] "I" (_SFR_IO_ADDR(PIXEL_PORT)),
- [bit] "I" (PIXEL_BIT)
- );
- } else { // bit = 0
- asm volatile (
- "sbi %[port], %[bit] \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "cbi %[port], %[bit] \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- "nop \n\t"
- ::
- [port] "I" (_SFR_IO_ADDR(PIXEL_PORT)),
- [bit] "I" (PIXEL_BIT)
- );
- }
- }
- }
- void setup() {
- bitSet(PIXEL_DDR , PIXEL_BIT);
- delay(1);
- cli(); //disable interrupts
- for(int j = 0; j < PIXEL_COUNT; j++) {
- //NOTE: colors - G-R-B
- sendByte(g);
- sendByte(r);
- sendByte(b);
- }
- sei(); //enable interrupts
- delayMicroseconds(7);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement