mewl_hayabusa

Test

Sep 1st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.43 KB | None | 0 0
  1. volatile uint8_t *port;
  2. uint8_t High, Low, Mask;
  3. uint8_t PinNumber = 2;
  4. uint8_t Loop = 100;
  5.  
  6.  
  7. void setup() {
  8.  
  9.   DDRD  = 0x04;
  10.   PORTD = 0x00;
  11.  
  12.   port = portOutputRegister(digitalPinToPort(PinNumber));
  13.   Mask = digitalPinToBitMask(PinNumber);
  14.   High = *port |  Mask;
  15.   Low  = *port | ~Mask;
  16.  
  17.   pinMode(16, OUTPUT);
  18. }
  19.  
  20. void loop() {
  21.   digitalWrite(16, HIGH);
  22.   delay(500);
  23.   digitalWrite(16, LOW);
  24.   delay(500);
  25.   Loop = 100;
  26.   asm volatile(
  27.     "Tone: \n\t"
  28.       "rcall S3520HZ"        "\n\t"
  29.       "dec %[Loop]"       "\n\t"
  30.     "rcall Tone"         "\n\t"
  31.    
  32.     "S3520HZ:"                 "\n\t"  //3520 Hz A7 3564 Hz
  33.       "st %a[port], %[High]"  "\n\t"
  34.       "rcall delay7040"      "\n\t"
  35.       "st %a[port], %[Low]"   "\n\t"
  36.       "rcall delay7040"      "\n\t"
  37.     "ret"                     "\n\t"
  38.    
  39.     "delay7040:" "\n\t"
  40.       "ldi r21, 16" "\n\t"
  41.       "delay7040_1:" "\n\t"
  42.         "rcall delay_1 \n\t"
  43.         "dec r21 \n\t"
  44.       "brne delay7040_1 \n\t"
  45.     "ret \n\t"
  46.  
  47.     "delay_1:"            "\n\t"  //0.0625us * (2 + 32 * 2) = 4.125 us
  48.       "ldi r20,32"      "\n\t"
  49.       "delay_11:"        "\n\t"
  50.         "nop"           "\n\t"
  51.         "dec r20"       "\n\t"
  52.       "brne delay_11 \n\t"
  53.     "ret"
  54.     :[port]"+e"(port)
  55.     :[High]"r"(High),
  56.      [Low]"r"(Low),
  57.      [Loop]"r"(Loop)
  58.   );
  59.    
  60.   digitalWrite(16, HIGH);
  61.   delay(500);
  62.   digitalWrite(16, LOW);
  63.   delay(500);
  64. }
Advertisement
Add Comment
Please, Sign In to add comment