3 Simple Ways to
Share What You Make

With Instructables you can share what you make with the world — and tap into an ever-growing community of creative experts.

PhotosPhotos

Share one or more photos of a project, recipe, or whatever you've made, quickly and easily.

Step by StepStep-By-Step

Share your step-by-step photos with text instructions of what you made so others can do it too!

VideoVideo

Share your how-to video. You'll need your embed code from a video site such as YouTube.

Poor man's AVR music box

Step 3Song storage source code

START:
.INCLUDE "m16def.inc"
ldi r16, (1<out TCCR0, r16
ldi r21, 0xFF
out DDRA, r21
ldi r19, 0b00000001
clr r20
clr r23

timer1:
in r17, TIFR
cpi r17, 0b00000001
breq clr0
cpi r17, 0b00000011
breq clr0
rjmp timer1

clr0:
ldi r16, (1<out TIFR, r16


loop1:
inc r18
cp r18,r19
breq incnote
rjmp timer1


incnote: ;note# stored in r20,and r23. Note length in r19, note pitch in r22
cpi r20, 0xFF
breq incnote2
inc r20
rjmp song

incnote2: ;This allows the song to be up to 512 notes long
inc r23 ;If I used both registers in the other way, it would allow for 65k notes,
; but would increase program complexity a bit, and more importantly, execution time.
song:

clr r18

n1:
cpi r20,0x01 ;Start with some silence silence between song loops
brne n2
ldi r19, 0x40
ldi r22, 0x00
out PORTA, r22
rjmp n2

bogo2:
rjmp timer1

n2:
cpi r20,0x02 ;Start with some silence silence between song loops
brne n3
ldi r19, 0x20
ldi r22, 0x00
out PORTA, r22
rjmp n3

n3:
cpi r20,0x03 ;a3, 250msec
brne n4
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n4:
cpi r20,0x04 ;b3, 250msec
brne n5
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n5:
cpi r20,0x05 ;c4, 250msec
brne n6
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n6:
cpi r20,0x06 ;e3, 250msec
brne n7
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n7:
cpi r20,0x07 ;c4, 250msec
brne n8
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n8:
cpi r20,0x08 ;e3, 250msec
brne n9
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n9:
cpi r20,0x09 ;c4, 250msec
brne n10
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22
rjmp n10

bogo3:
rjmp bogo2

n10:
cpi r20,0x0A ;e3, 250msec
brne n11
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n11:
cpi r20,0x0B ;c4, 250msec
brne n12
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n12:
cpi r20,0x0C ;e3, 250msec
brne n13
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n13:
cpi r20,0x0D ;d4, 250msec
brne n14
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n14:
cpi r20,0x0D ;e3, 250msec
brne n15
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n15:
cpi r20,0x0E ;c4, 250msec
brne n16
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n16:
cpi r20,0x0F ;e3, 250msec
brne n17
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n17:
cpi r20,0x19 ;b3, 250msec
brne n18
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n18:
cpi r20,0x11 ;e3, 250msec
brne n19
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22
rjmp n19

bogo4:
rjmp bogo3

n19:
cpi r20,0x12 ;b3, 250msec
brne n20
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n20:
cpi r20,0x13 ;e3, 250msec
brne n21
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n21:
cpi r20,0x14 ;b3, 130msec
brne n22
ldi r19, 0x0D
ldi r22, 0b00110100
out PORTA, r22

n22:
cpi r20,0x15 ;e3, 130msec
brne n23
ldi r19, 0x0C
ldi r22, 0b00111011
out PORTA, r22

n23:
cpi r20,0x16 ;b3, 250msec
brne n24
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n24:
cpi r20,0x17 ;e3, 250msec
brne n25
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n25:
cpi r20,0x18 ;c4, 250msec
brne n26
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n26:
cpi r20,0x19 ;e3, 250msec
brne n27
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n27:
cpi r20,0x1A ;b3, 250msec
brne n28
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n28:
cpi r20,0x1B ;e3, 380msec
brne n29
ldi r19, 0x26
ldi r22, 0b00111011
out PORTA, r22

n29:
cpi r20,0x1C ;a3, 260msec
brne n30
ldi r19, 0x1A
ldi r22, 0b00110110
out PORTA, r22
rjmp n30

bogo5:
rjmp bogo4

n30:
cpi r20,0x1D ;rest, 30msec
brne n31
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n31:
cpi r20,0x1E ;a3, 20msec
brne n32
ldi r19, 0x04
ldi r22, 0b00110110
out PORTA, r22

n32:
cpi r20,0x1F ;rest, 20msec
brne n33
ldi r19, 0x04
ldi r22, 0b00000000
out PORTA, r22

n33:
cpi r20,0x20 ;b3, 30msec
brne n34
ldi r19, 0x05
ldi r22, 0b00110100
out PORTA, r22

n34:
cpi r20,0x21 ;rest, 30msec
brne n35
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n35:
cpi r20,0x22 ;a3, 280msec, two notes on decompiled midi...
brne n36
ldi r19, 0x1C
ldi r22, 0b00110110
out PORTA, r22

n36:
cpi r20,0x23 ;b3, 40msec
brne n37
ldi r19, 0x04
ldi r22, 0b00110100
out PORTA, r22

n37:
cpi r20,0x24 ;a3, 320msec, two notes on decompiled midi... now note# and row number are aligned
brne n38 ; on my spreadsheet. Before they weren't because of the two initial pauses.
ldi r19, 0x20 ; Convenient for me!
ldi r22, 0b00110110
out PORTA, r22

n38:
cpi r20,0x25 ;b3
brne n39
ldi r19, 0x07
ldi r22, 0b00110100
out PORTA, r22

n39:
cpi r20,0x26 ;a3
brne n40
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22
rjmp n40

bogo6:
rjmp bogo5

n40:
cpi r20,0x27 ;g3
brne n41
ldi r19, 0x19
ldi r22, 0b00111000
out PORTA, r22

n41:
cpi r20,0x28 ;e3
brne n42
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n42:
cpi r20,0x29 ;d3
brne n43
ldi r19, 0x19
ldi r22, 0b00111101
out PORTA, r22

n43:
cpi r20,0x2A ;e3
brne n44
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n44:
cpi r20,0x2B ;a3
brne n45
ldi r19, 0x36
ldi r22, 0b00110110
out PORTA, r22

n45:
cpi r20,0x2C ;b3
brne n46
ldi r19, 0x36
ldi r22, 0b00110100
out PORTA, r22

n46:
cpi r20,0x2D ;c4
brne n47
ldi r19, 0x26
ldi r22, 0b00110011
out PORTA, r22

n47:
cpi r20,0x2F ;e3
brne n48
ldi r19, 0x26
ldi r22, 0b00111011
out PORTA, r22

n48:
cpi r20,0x30 ;c4
brne n49
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n49:
cpi r20,0x31 ;e3
brne n50
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22
rjmp n50

bogo7:
rjmp bogo6

n50:
cpi r20,0x32 ;c4
brne n51
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n51:
cpi r20,0x33 ;e3
brne n52
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n52:
cpi r20,0x34 ;c4
brne n53
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n53:
cpi r20,0x35 ;e3
brne n54
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n54:
cpi r20,0x36 ;d4
brne n55
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n55:
cpi r20,0x37 ;e3
brne n56
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n56:
cpi r20,0x38 ;c4
brne n57
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n57:
cpi r20,0x39 ;e3
brne n58
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n58:
cpi r20,0x3A ;b3
brne n59
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n59:
cpi r20,0x3B ;e3
brne n60
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22
rjmp n60

bogo8:
rjmp bogo7

n60:
cpi r20,0x3C ;b3
brne n61
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n61:
cpi r20,0x3D ;e3
brne n62
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n62:
cpi r20,0x3E ;b3
brne n63
ldi r19, 0x0D
ldi r22, 0b00110100
out PORTA, r22

n63:
cpi r20,0x3F ;e3
brne n64
ldi r19, 0x0C
ldi r22, 0b00111011
out PORTA, r22

n64:
cpi r20,0x40 ;b3
brne n65
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n65:
cpi r20,0x41 ;null
brne n66
ldi r19, 0x06
ldi r22, 0b00000000
out PORTA, r22

n66:
cpi r20,0x42 ;e3
brne n67
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n67:
cpi r20,0x43 ;c4
brne n68
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n68:
cpi r20,0x44 ;e3
brne n69
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n69:
cpi r20,0x45 ;b3
brne n70
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22
rjmp n70

bogo9:
rjmp bogo8

n70:
cpi r20,0x46 ;e3
brne n71
ldi r19, 0x26
ldi r22, 0b00111011
out PORTA, r22

n71:
cpi r20,0x47 ;a3
brne n72
ldi r19, 0x1A
ldi r22, 0b00110110
out PORTA, r22

n72:
cpi r20,0x48 ;a3
brne n73
ldi r19, 0x04
ldi r22, 0b00110110
out PORTA, r22

n73:
cpi r20,0x49 ;b3
brne n74
ldi r19, 0x05
ldi r22, 0b00110100
out PORTA, r22

n74:
cpi r20,0x4A ;null
brne n75
ldi r19, 0x04
ldi r22, 0b00000000
out PORTA, r22

n75:
cpi r20,0x4B ;a3
brne n76
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n76:
cpi r20,0x4C ;a3
brne n77
ldi r19, 0x06
ldi r22, 0b00110110
out PORTA, r22

n77:
cpi r20,0x4D ;b3
brne n78
ldi r19, 0x06
ldi r22, 0b00110100
out PORTA, r22

n78:
cpi r20,0x4E ;a3
brne n79
ldi r19, 0x1A
ldi r22, 0b00110110
out PORTA, r22

n79:
cpi r20,0x4F ;null
brne n80
ldi r19, 0x0A
ldi r22, 0b00000000
out PORTA, r22
rjmp n80

bogo10:
rjmp bogo9

n80:
cpi r20,0x50 ;a3
brne n81
ldi r19, 0x08
ldi r22, 0b00110110
out PORTA, r22

n81:
cpi r20,0x51 ;b3
brne n82
ldi r19, 0x09
ldi r22, 0b00110100
out PORTA, r22

n82:
cpi r20,0x52 ;a3
brne n83
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n83:
cpi r20,0x53 ;g3
brne n84
ldi r19, 0x19
ldi r22, 0b00111000
out PORTA, r22

n84:
cpi r20,0x54 ;e3
brne n85
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n85:
cpi r20,0x55 ;d3
brne n86
ldi r19, 0x40
ldi r22, 0b00111101
out PORTA, r22

n86:
cpi r20,0x56 ;e3
brne n87
ldi r19, 0x40
ldi r22, 0b00111011
out PORTA, r22

n87:
cpi r20,0x57 ;a3
brne n88
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n88:
cpi r20,0x58 ;b3
brne n89
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n89:
cpi r20,0x59 ;c4
brne n90
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22
rjmp n90

bogo11:
rjmp bogo10

n90:
cpi r20,0x5A ;e3
brne n91
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n91:
cpi r20,0x5B ;c4
brne n92
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n92:
cpi r20,0x5C ;e3
brne n93
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n93:
cpi r20,0x5D ;c4
brne n93b
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n93b:
cpi r20,0x5E ;e3
brne n94
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n94:
cpi r20,0x5F ;e3
brne n95
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n95:
cpi r20,0x60 ;c4
brne n96
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n96:
cpi r20,0x61 ;e3
brne n97
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n97:
cpi r20,0x62 ;d4
brne n98
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n98:
cpi r20,0x63 ;e3
brne n99
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n99:
cpi r20,0x64 ;c4
brne n100
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22
rjmp n100

bogo12:
rjmp bogo11

n100:
cpi r20,0x65 ;e3
brne n101
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n101:
cpi r20,0x66 ;b3
brne n102
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n102:
cpi r20,0x67 ;e3
brne n103
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n103:
cpi r20,0x68 ;b3
brne n104
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n104:
cpi r20,0x69 ;e3
brne n105
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n105:
cpi r20,0x6A ;b3
brne n106
ldi r19, 0x0D
ldi r22, 0b00110100
out PORTA, r22

n106:
cpi r20,0x6B ;e3
brne n107
ldi r19, 0x0C
ldi r22, 0b00111011
out PORTA, r22

n107:
cpi r20,0x6C ;b3
brne n108
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n108:
cpi r20,0x6D ;e3
brne n109
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n109:
cpi r20,0x6E ;c4
brne n110
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22
rjmp n110

bogo13:
rjmp bogo12

n110:
cpi r20,0x6F ;e3
brne n111
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n111:
cpi r20,0x70 ;b3
brne n112
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n112:
cpi r20,0x71 ;e3
brne n113
ldi r19, 0x26
ldi r22, 0b00111011
out PORTA, r22

n113:
cpi r20,0x72 ;a3
brne n114
ldi r19, 0x1A
ldi r22, 0b00110110
out PORTA, r22

n114:
cpi r20,0x73 ;a3
brne n115
ldi r19, 0x05
ldi r22, 0b00110110
out PORTA, r22

n115:
cpi r20,0x74 ;null
brne n116
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n116:
cpi r20,0x75 ;b3
brne n117
ldi r19, 0x06
ldi r22, 0b00110100
out PORTA, r22

n117:
cpi r20,0x76 ;a3
brne n118
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n118:
cpi r20,0x77 ;a3
brne n119
ldi r19, 0x07
ldi r22, 0b00110110
out PORTA, r22

n119:
cpi r20,0x78 ;b3
brne n120
ldi r19, 0x07
ldi r22, 0b00110100
out PORTA, r22
rjmp n120

bogo14:
rjmp bogo13

n120:
cpi r20,0x79 ;a3
brne n121
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n121:
cpi r20,0x7A ;a3
brne n122
ldi r19, 0x08
ldi r22, 0b00110110
out PORTA, r22

n122:
cpi r20,0x7B ;null
brne n123
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n123:
cpi r20,0x7C ;b3
brne n124
ldi r19, 0x08
ldi r22, 0b00110100
out PORTA, r22

n124:
cpi r20,0x7D ;a3
brne n125
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n125:
cpi r20,0x7E ;g3
brne n126
ldi r19, 0x05
ldi r22, 0b00111000
out PORTA, r22

n126:
cpi r20,0x7F ;e3
brne n127
ldi r19, 0x19
ldi r22, 0b00111011
out PORTA, r22

n127:
cpi r20,0x80 ;g3
brne n128
ldi r19, 0x19
ldi r22, 0b00111000
out PORTA, r22

n128:
cpi r20,0x81 ;a3
brne n129
ldi r19, 0x4A
ldi r22, 0b00110110
out PORTA, r22

n129:
cpi r20,0x82 ;a3
brne n130
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22
rjmp n130

bogo15:
rjmp bogo14

n130:
cpi r20,0x83 ;null
brne n131
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n131:
cpi r20,0x84 ;b3
brne n132
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n132:
cpi r20,0x85 ;null
brne n133
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n133:
cpi r20,0x86 ;c4
brne n134
ldi r19, 0x4D
ldi r22, 0b00110011
out PORTA, r22

n134:
cpi r20,0x87 ;d4
brne n135
ldi r19, 0x0C
ldi r22, 0b00110001
out PORTA, r22

n135:
cpi r20,0x88 ;c4
brne n136
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n136:
cpi r20,0x89 ;b3
brne n137
ldi r19, 0x4D
ldi r22, 0b00110100
out PORTA, r22

n137:
cpi r20,0x8A ;c4
brne n138
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n138:
cpi r20,0x8B ;b3
brne n139
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n139:
cpi r20,0x8C ;a3
brne n140
ldi r19, 0x40
ldi r22, 0b00110110
out PORTA, r22
rjmp n140

bogo16:
rjmp bogo15

n140:
cpi r20,0x8D ;null
brne n141
ldi r19, 0x08
ldi r22, 0b00000000
out PORTA, r22

n141:
cpi r20,0x8E ;null
brne n142
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n142:
cpi r20,0x8F ;b3
brne n143
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n143:
cpi r20,0x90 ;a3
brne n144
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n144:
cpi r20,0x91 ;g3
brne n145
ldi r19, 0x0C
ldi r22, 0b00111000
out PORTA, r22

n145:
cpi r20,0x92 ;null
brne n146
ldi r19, 0x03
ldi r22, 0b00000000
out PORTA, r22

n146:
cpi r20,0x93 ;e3
brne n147
ldi r19, 0x4D
ldi r22, 0b00111011
out PORTA, r22

n147:
cpi r20,0x94 ;a3
brne n148
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n148:
cpi r20,0x95 ;b3
brne n149
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n149:
cpi r20,0x96 ;c4
brne n150
ldi r19, 0x33
ldi r22, 0b00110011
out PORTA, r22
rjmp n150

bogo17:
rjmp bogo16

n150:
cpi r20,0x97 ;b3
brne n151
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n151:
cpi r20,0x98 ;c4
brne n152
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n152:
cpi r20,0x99 ;d4
brne n153
ldi r19, 0x26
ldi r22, 0b00110001
out PORTA, r22

n153:
cpi r20,0x9A ;c4
brne n154
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n154:
cpi r20,0x9B ;d4
brne n155
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n155:
cpi r20,0x9C ;e4
brne n156
ldi r19, 0x26
ldi r22, 0b00101111
out PORTA, r22

n156:
cpi r20,0x9D ;a3
brne n157
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n157:
cpi r20,0x9E ;b3
brne n158
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n158:
cpi r20,0x9F ;c4
brne n159
ldi r19, 0x26
ldi r22, 0b00110011
out PORTA, r22

n159:
cpi r20,0xA0 ;d4
brne n160
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22
rjmp n160

bogo18:
rjmp bogo17

n160:
cpi r20,0xA1 ;c4
brne n161
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n161:
cpi r20,0xA2 ;b3
brne n162
ldi r19, 0x22
ldi r22, 0b00110100
out PORTA, r22

n162:
cpi r20,0xA3 ;c4
brne n163
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n163:
cpi r20,0xA4 ;b3
brne n164
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n164:
cpi r20,0xA5 ;a3
brne n165
ldi r19, 0x26
ldi r22, 0b00110110
out PORTA, r22

n165:
cpi r20,0xA6 ;null
brne n166
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n166:
cpi r20,0xA7 ;b3
brne n167
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n167:
cpi r20,0xA8 ;null
brne n168
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n168:
cpi r20,0xA9 ;a3
brne n169
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n169:
cpi r20,0xAA ;g3
brne n170
ldi r19, 0x19
ldi r22, 0b00111000
out PORTA, r22
rjmp n170

bogo19:
rjmp bogo18

n170:
cpi r20,0xAB ;e3
brne n171
ldi r19, 0x33
ldi r22, 0b00111011
out PORTA, r22

n171:
cpi r20,0xAC ;a3
brne n172
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n172:
cpi r20,0xAD ;b3
brne n173
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n173:
cpi r20,0xAE ;c4
brne n174
ldi r19, 0x26
ldi r22, 0b00110011
out PORTA, r22

n174:
cpi r20,0xAF ;d4
brne n175
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n175:
cpi r20,0xB0 ;c4
brne n176
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n176:
cpi r20,0xB1 ;b3
brne n177
ldi r19, 0x26
ldi r22, 0b00110100
out PORTA, r22

n177:
cpi r20,0xB2 ;a3
brne n178
ldi r19, 0x22
ldi r22, 0b00110110
out PORTA, r22

n178:
cpi r20,0xB3 ;null
brne n179
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n179:
cpi r20,0xB4 ;g3
brne n180
ldi r19, 0x0C
ldi r22, 0b00111000
out PORTA, r22
rjmp n180

bogo20:
rjmp bogo19

n180:
cpi r20,0xB5 ;null
brne n181
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n181:
cpi r20,0xB6 ;b3
brne n182
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n182:
cpi r20,0xB7 ;a3
brne n183
ldi r19, 0x65
ldi r22, 0b00110110
out PORTA, r22

n183:
cpi r20,0xB8 ;a3
brne n184
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n184:
cpi r20,0xB9 ;null
brne n185
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n185:
cpi r20,0xBA ;b3
brne n186
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n186:
cpi r20,0xBB ;null
brne n187
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n187:
cpi r20,0xBC ;c4
brne n188
ldi r19, 0x3E
ldi r22, 0b00110011
out PORTA, r22

n188:
cpi r20,0xBD ;null
brne n189
ldi r19, 0x14
ldi r22, 0b00000000
out PORTA, r22

n189:
cpi r20,0xBE ;d4
brne n190
ldi r19, 0x0C
ldi r22, 0b00110001
out PORTA, r22
rjmp n190

bogo21:
rjmp bogo20

n190:
cpi r20,0xBF ;null
brne n191
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n191:
cpi r20,0xC0 ;c4
brne n192
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n192:
cpi r20,0xC1 ;null
brne n193
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n193:
cpi r20,0xC2 ;b3
brne n194
ldi r19, 0x3E
ldi r22, 0b00110100
out PORTA, r22

n194:
cpi r20,0xC3 ;null
brne n195
ldi r19, 0x14
ldi r22, 0b00000000
out PORTA, r22

n195:
cpi r20,0xC4 ;c4
brne n196
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n196:
cpi r20,0xC5 ;null
brne n197
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n197:
cpi r20,0xC6 ;b3
brne n198
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n198:
cpi r20,0xC7 ;null
brne n199
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n199:
cpi r20,0xC8 ;a3
brne n200
ldi r19, 0x34
ldi r22, 0b00110110
out PORTA, r22
rjmp n200

bogo22:
rjmp bogo21

n200:
cpi r20,0xC9 ;null
brne n201
ldi r19, 0x0A
ldi r22, 0b00000000
out PORTA, r22

n201:
cpi r20,0xCA ;b3
brne n202
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n202:
cpi r20,0xCB ;a3
brne n203
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n203:
cpi r20,0xCC ;g3
brne n204
ldi r19, 0x0C
ldi r22, 0b00111000
out PORTA, r22

n204:
cpi r20,0xCD ;null
brne n205
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n205:
cpi r20,0xCE ;e3
brne n206
ldi r19, 0x3E
ldi r22, 0b00111011
out PORTA, r22

n206:
cpi r20,0xCF ;null
brne n207
ldi r19, 0x14
ldi r22, 0b00000000
out PORTA, r22

n207:
cpi r20,0xD0 ;a3
brne n208
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n208:
cpi r20,0xD1 ;null
brne n209
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n209:
cpi r20,0xD2 ;b3
brne n210
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22
rjmp n210

bogo23:
rjmp bogo22

n210:
cpi r20,0xD3 ;null
brne n211
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n211:
cpi r20,0xD4 ;c4
brne n212
ldi r19, 0x30
ldi r22, 0b00110011
out PORTA, r22

n212:
cpi r20,0xD5 ;b3
brne n213
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n213:
cpi r20,0xD6 ;c4
brne n214
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n214:
cpi r20,0xD7 ;d4
brne n215
ldi r19, 0x30
ldi r22, 0b00110001
out PORTA, r22


n215:
cpi r20,0xD8 ;c4
brne n216
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n216:
cpi r20,0xD9 ;d4
brne n217
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n217:
cpi r20,0xDA ;e4
brne n218
ldi r19, 0x65
ldi r22, 0b00101111
out PORTA, r22

n218:
cpi r20,0xDB ;a3
brne n219
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n219:
cpi r20,0xDC ;b3
brne n220
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22
rjmp n220

bogo24:
rjmp bogo23

n220:
cpi r20,0xDD ;c4
brne n221
ldi r19, 0x30
ldi r22, 0b00110011
out PORTA, r22

n221:
cpi r20,0xDE ;d4
brne n222
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n222:
cpi r20,0xDF ;c4
brne n223
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n223:
cpi r20,0xE0 ;b3
brne n224
ldi r19, 0x30
ldi r22, 0b00110100
out PORTA, r22

n224:
cpi r20,0xE1 ;c4
brne n225
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n225:
cpi r20,0xE2 ;b3
brne n226
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n226:
cpi r20,0xE3 ;a3
brne n227
ldi r19, 0x25
ldi r22, 0b00110110
out PORTA, r22

n227:
cpi r20,0xE4 ;null
brne n228
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n228:
cpi r20,0xE5 ;b3
brne n229
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n229:
cpi r20,0xE6 ;null
brne n230
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22
rjmp n230

bogo25:
rjmp bogo24

n230:
cpi r20,0xE7 ;a3
brne n231
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n231:
cpi r20,0xE8 ;g3
brne n232
ldi r19, 0x19
ldi r22, 0b00111000
out PORTA, r22

n232:
cpi r20,0xE9 ;e3
brne n233
ldi r19, 0x30
ldi r22, 0b00111011
out PORTA, r22

n233:
cpi r20,0xEA ;a3
brne n234
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n234:
cpi r20,0xEB ;b3
brne n235
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n235:
cpi r20,0xEC ;c4
brne n236
ldi r19, 0x30
ldi r22, 0b00110011
out PORTA, r22

n236:
cpi r20,0xED ;d4
brne n237
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n237:
cpi r20,0xEE ;c4
brne n238
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n238:
cpi r20,0xEF ;b3
brne n239
ldi r19, 0x30
ldi r22, 0b00110100
out PORTA, r22

n239:
cpi r20,0xF0 ;a3
brne n240
ldi r19, 0x25
ldi r22, 0b00110110
out PORTA, r22
rjmp n240

bogo26:
rjmp bogo25

n240:
cpi r20,0xF1 ;null
brne n241
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n241:
cpi r20,0xF2 ;g3
brne n242
ldi r19, 0x0C
ldi r22, 0b00111000
out PORTA, r22

n242:
cpi r20,0xF3 ;null
brne n243
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n243:
cpi r20,0xF4 ;b3
brne n244
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n244:
cpi r20,0xF5 ;a3
brne n245
ldi r19, 0x65
ldi r22, 0b00110110
out PORTA, r22

n245:
cpi r20,0xF6 ;c4
brne n246
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n246:
cpi r20,0xF7 ;null
brne n247
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n247:
cpi r20,0xF8 ;d4
brne n248
ldi r19, 0x0C
ldi r22, 0b00110001
out PORTA, r22

n248:
cpi r20,0xF9 ;e4
brne n249
ldi r19, 0x0C
ldi r22, 0b00101111
out PORTA, r22

n249:
cpi r20,0xFA ;null
brne n250
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22
rjmp n250

bogo27:
rjmp bogo26

n250:
cpi r20,0xFB ;d4
brne n251
ldi r19, 0x30
ldi r22, 0b00110001
out PORTA, r22

n251:
cpi r20,0xFC ;null
brne n252
ldi r19, 0x08
ldi r22, 0b00000000
out PORTA, r22

n252:
cpi r20,0xFD ;c4
brne n253
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n253:
cpi r20,0xFE ;d4
brne n254
ldi r19, 0x0C
ldi r22, 0b00110001
out PORTA, r22

n254:
cpi r20,0xFF ;e4
brne n255
ldi r19, 0x34
ldi r22, 0b00101111
out PORTA, r22

n255:
cpi r23,0x01 ;null, also register switch from r20 to r23 here
brne n256
ldi r19, 0x08
ldi r22, 0b00000000
out PORTA, r22

n256:
cpi r23,0x02 ;d4
brne n257
ldi r19, 0x19
ldi r22, 0b00110001
out PORTA, r22

n257:
cpi r23,0x03 ;c4
brne n258
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n258:
cpi r23,0x04 ;d4
brne n259
ldi r19, 0x0C
ldi r22, 0b00110001
out PORTA, r22

n259:
cpi r23,0x05 ;c4
brne n260
ldi r19, 0x25
ldi r22, 0b00110011
out PORTA, r22
rjmp n260

bogo28:
rjmp bogo27

n260:
cpi r23,0x06 ;b3
brne n261
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n261:
cpi r23,0x07 ;c4
brne n262
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n262:
cpi r23,0x08 ;d4
brne n263
ldi r19, 0x34
ldi r22, 0b00110001
out PORTA, r22

n263:
cpi r23,0x09 ;null
brne n264
ldi r19, 0x0D
ldi r22, 0b00000000
out PORTA, r22

n264:
cpi r23,0x0A ;c4
brne n265
ldi r19, 0x19
ldi r22, 0b00110011
out PORTA, r22

n265:
cpi r23,0x0B ;b3
brne n266
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n266:
cpi r23,0x0C ;c4
brne n267
ldi r19, 0x30
ldi r22, 0b00110011
out PORTA, r22

n267:
cpi r23,0x0D ;a3
brne n268
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n268:
cpi r23,0x0E ;b3
brne n269
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n269:
cpi r23,0x0F ;c4
brne n270
ldi r19, 0x3E
ldi r22, 0b00110011
out PORTA, r22
rjmp n270

bogo29:
rjmp bogo28

n270:
cpi r23,0x10 ;b3
brne n271
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n271:
cpi r23,0x11 ;null
brne n272
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n272:
cpi r23,0x12 ;a3
brne n273
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n273:
cpi r23,0x13 ;null
brne n274
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n274:
cpi r23,0x14 ;g3
brne n275
ldi r19, 0x50
ldi r22, 0b00111000
out PORTA, r22

n275:
cpi r23,0x15 ;null
brne n276
ldi r19, 0x18
ldi r22, 0b00000000
out PORTA, r22

n276:
cpi r23,0x16 ;a3
brne n277
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n277:
cpi r23,0x17 ;null
brne n278
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n278:
cpi r23,0x18 ;b3
brne n279
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n279:
cpi r23,0x19 ;c4
brne n280
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22
rjmp n280

bogo30:
rjmp bogo29

n280:
cpi r23,0x1A ;null
brne n281
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n281:
cpi r23,0x1B ;b3
brne n282
ldi r19, 0x25
ldi r22, 0b00110100
out PORTA, r22

n282:
cpi r23,0x1C ;null
brne n283
ldi r19, 0x0D
ldi r22, 0b00000000
out PORTA, r22

n283:
cpi r23,0x1D ;a3
brne n284
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22

n284:
cpi r23,0x1E ;c4
brne n285
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n285:
cpi r23,0x1F ;b3
brne n286
ldi r19, 0x4B
ldi r22, 0b00110100
out PORTA, r22

n286:
cpi r23,0x20 ;c4
brne n287
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n287:
cpi r23,0x21 ;null
brne n288
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n288:
cpi r23,0x22 ;b3
brne n289
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n289:
cpi r23,0x23 ;null
brne n290
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22
rjmp n290

bogo31:
rjmp bogo30

n290:
cpi r23,0x24 ;c4
brne n291
ldi r19, 0x25
ldi r22, 0b00110011
out PORTA, r22

n291:
cpi r23,0x25 ;null
brne n292
ldi r19, 0x0A
ldi r22, 0b00000000
out PORTA, r22

n292:
cpi r23,0x26 ;b3
brne n293
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

n293:
cpi r23,0x27 ;a3
brne n294
ldi r19, 0x0C
ldi r22, 0b00110110
out PORTA, r22

n294:
cpi r23,0x28 ;null
brne n295
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n295:
cpi r23,0x29 ;g3
brne n296
ldi r19, 0x19
ldi r22, 0b00111000
out PORTA, r22

n296:
cpi r23,0x2A ;null
brne n297
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n297:
cpi r23,0x2B ;e3
brne n298
ldi r19, 0x34
ldi r22, 0b00111011
out PORTA, r22

n298:
cpi r23,0x2C ;null
brne n299
ldi r19, 0x08
ldi r22, 0b00000000
out PORTA, r22

n299:
cpi r23,0x2D ;a3
brne n300
ldi r19, 0x19
ldi r22, 0b00110110
out PORTA, r22
rjmp n300

bogo32:
rjmp bogo31

n300:
cpi r23,0x2E ;b3
brne n301
ldi r19, 0x19
ldi r22, 0b00110100
out PORTA, r22

n301:
cpi r23,0x2F ;c4
brne n302
ldi r19, 0x30
ldi r22, 0b00110011
out PORTA, r22

n302:
cpi r23,0x30 ;d4
brne n303
ldi r19, 0x25
ldi r22, 0b00110001
out PORTA, r22

n303:
cpi r23,0x31 ;null
brne n304
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n304:
cpi r23,0x32 ;c4
brne n305
ldi r19, 0x0C
ldi r22, 0b00110011
out PORTA, r22

n305:
cpi r23,0x33 ;null
brne n306
ldi r19, 0x05
ldi r22, 0b00000000
out PORTA, r22

n306:
cpi r23,0x34 ;b3
brne n307
ldi r19, 0x30
ldi r22, 0b00110100
out PORTA, r22

n307:
cpi r23,0x35 ;a3
brne n308
ldi r19, 0x25
ldi r22, 0b00110110
out PORTA, r22

n308:
cpi r23,0x36 ;null
brne n309
ldi r19, 0x0A
ldi r22, 0b00000000
out PORTA, r22

n309:
cpi r23,0x37 ;g3
brne n310
ldi r19, 0x0C
ldi r22, 0b00111000
out PORTA, r22
rjmp n310

bogo33:
inc r24
cpi r24, 0b11111111 ;Timing tweak
breq bogo32
rjmp bogo33

n310:
cpi r23,0x38 ;b3
brne n312
ldi r19, 0x0C
ldi r22, 0b00110100
out PORTA, r22

;n311:
;cpi r23,0x39 ;null
;brne n312
;ldi r19, 0x05
;ldi r22, 0b00000000
;out PORTA, r22

;n312:
;cpi r23,0x3A ;a3, not necessary
;brne n313
;ldi r19, 0x4B
;ldi r22, 0b00110110
;out PORTA, r22

n312:
cpi r23, 0x3B
ldi r24, 0b00000000
brne bogo33
clr r23
clr r20
clr r17
ldi r22, 0b00000000
out PORTA, r22
rjmp bogo33

« Previous StepDownload PDFView All StepsNext Step »

Pro

Get More Out of Instructables

Already have an Account?

close

All Steps Viewing
View all steps of an Instructable on the same page when you're a Pro Member.

Upgrade to Pro today!
10
Followers
7
Author:legionlabs
I publish my failures and my successes, as my teachers have done before me. I am a member of Foulab, an independent, nonprofit research and engineering group in Montreal. Check out our webpage at...
more »