Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- volatile uint8_t *port;
- uint8_t High, Low, Mask;
- uint8_t PinNumber = 2;
- uint8_t Loop = 100;
- void setup() {
- DDRD = 0x04;
- PORTD = 0x00;
- port = portOutputRegister(digitalPinToPort(PinNumber));
- Mask = digitalPinToBitMask(PinNumber);
- High = *port | Mask;
- Low = *port | ~Mask;
- pinMode(16, OUTPUT);
- }
- void loop() {
- digitalWrite(16, HIGH);
- delay(500);
- digitalWrite(16, LOW);
- delay(500);
- Loop = 100;
- asm volatile(
- "Tone: \n\t"
- "rcall S3520HZ" "\n\t"
- "dec %[Loop]" "\n\t"
- "rcall Tone" "\n\t"
- "S3520HZ:" "\n\t" //3520 Hz A7 3564 Hz
- "st %a[port], %[High]" "\n\t"
- "rcall delay7040" "\n\t"
- "st %a[port], %[Low]" "\n\t"
- "rcall delay7040" "\n\t"
- "ret" "\n\t"
- "delay7040:" "\n\t"
- "ldi r21, 16" "\n\t"
- "delay7040_1:" "\n\t"
- "rcall delay_1 \n\t"
- "dec r21 \n\t"
- "brne delay7040_1 \n\t"
- "ret \n\t"
- "delay_1:" "\n\t" //0.0625us * (2 + 32 * 2) = 4.125 us
- "ldi r20,32" "\n\t"
- "delay_11:" "\n\t"
- "nop" "\n\t"
- "dec r20" "\n\t"
- "brne delay_11 \n\t"
- "ret"
- :[port]"+e"(port)
- :[High]"r"(High),
- [Low]"r"(Low),
- [Loop]"r"(Loop)
- );
- digitalWrite(16, HIGH);
- delay(500);
- digitalWrite(16, LOW);
- delay(500);
- }
Advertisement
Add Comment
Please, Sign In to add comment