move HRNC, #1 ; Turn the piezoelectric horn driver on.
;; Play Middle C for one second.
move LC[1], #261 ; Outer loop counter = 261 cycles (1s * 261Hz)
middleC:
move PO0.0, #1 ; Switch output high.
move LC[0], #6839 ; Half period : (1/261Hz) / (1/3.57MHz) / 2
djnz LC[0], $ ; Decrement and jump, if not zero, to current
; instruction.
move PO0.0, #0 ; Switch output low.
move LC[0], #6839 ; Half period : (1/261Hz) / (1/3.57MHz) / 2
djnz LC[0], $ ; Decrement and jump if not zero to current
; instruction.
djnz LC[1], middleC ; Decrement and jump, if not zero, to top of loop.
#define NOTE_C 261
#define NOTE_C_SH 277
#define NOTE_D_FL 277
#define NOTE_D 294
#define NOTE_D_SH 311
#define NOTE_E_FL 311
#define NOTE_E 330
#define NOTE_F 349
#define NOTE_F_SH 370
#define NOTE_G_FL 370
#define NOTE_G 392
#define EIGHTH 1 ; 120 beats per minute, 4/4 time
#define QUARTER 2 ; 120 beats per minute, 4/4 time
#define QUARTERDOT 3 ; 120 beats per minute, 4/4 time
#define HALF 4 ; 120 beats per minute, 4/4 time
#define WHOLE 8 ; 120 beats per minute, 4/4 time
play macro note, duration
local L1, L2
move HRNC, #1
move LC[1], #(note * duration / 8)
L1:
move PO0.0, #1 ; Switch output high.
move LC[0], #(1785000 / note)
djnz LC[0], $ ; Decrement and jump, if not zero, to current
; instruction.
move PO0.0, #0 ; Switch output low.
move LC[0], #(1785000 / note)
djnz LC[0], $ ; Decrement and jump, if not zero, to current
; instruction.
djnz LC[1], L1 ; Decrement and jump, if not zero, to top of loop.
move HRNC, #1
move LC[1], #50 ; 50ms of silence
L2:
move LC[0], #3570 ; 1ms (inner loop)
djnz LC[0], $
djnz LC[1], L2
endm
;; First 8 bars of Beethoven's "Ode to Joy"
play NOTE_E, QUARTER
play NOTE_E, QUARTER
play NOTE_F, QUARTER
play NOTE_G, QUARTER
play NOTE_G, QUARTER
play NOTE_F, QUARTER
play NOTE_E, QUARTER
play NOTE_D, QUARTER
play NOTE_C, QUARTER
play NOTE_C, QUARTER
play NOTE_D, QUARTER
play NOTE_E, QUARTER
play NOTE_E, QUARTERDOT
play NOTE_D, EIGHTH
play NOTE_D, HALF
play NOTE_E, QUARTER
play NOTE_E, QUARTER
play NOTE_F, QUARTER
play NOTE_G, QUARTER
play NOTE_G, QUARTER
play NOTE_F, QUARTER
play NOTE_E, QUARTER
play NOTE_D, QUARTER
play NOTE_C, QUARTER
play NOTE_C, QUARTER
play NOTE_D, QUARTER
play NOTE_E, QUARTER
play NOTE_D, QUARTERDOT
play NOTE_C, EIGHTH
play NOTE_C, HALF