?? muic.lst
字號:
1 ;===============================
2 ;EM78P447,發音程序
3 ;===============================
4 0001 tcc == 0x01
5 0003 status == 0x03
6 0007 port7 == 0x07
7 0006 port6 == 0x06
8 000F isr == 0x0f
9 000E ioce == 0x0e
10 000F iocf == 0x0f
11 ;==================
12 000C temp == 12
13 000D songptr == 13
14 000E stack == 14
15 000F dly1 == 15
16 0010 dly2 == 16
17 0011 dly3 == 17
18 0012 status_temp== 18
19 0013 a_temp == 19
20 0000 c == 0
21 0001 dc == 1
22 0002 z == 2
23 0000 tcif == 0
24 0003 exif == 3
25 ;==================
26 org 0fffh
27 nop
28 org 0
29 jmp reset
30 org 01
31 mov a_tmep,a
32 swapa status
33 mov status_temp,a
34 ;============================
35 mov a,stack
36 mov tcc,a
37 bc irs,tcif
38 mov a,@0b00000001
39 xor potrt7,a
40 ;============================
41 swapa status_temp
42 mov stauts,a
43 swap a_temp
44 swapa a_temp
45 reti
46 ;============================
47 0000E reset:
48 mov a,@0b10000100 ;1/32
49 contw
50 mov a,@0xfe
51 iow port7
52 mov a,@0x11
53 iow ioce
54 mov a,@0x01
55 iow iocf
56 clr port7
57 ;============================
58 00017 restart:
59 clr songetr
60 00018 main_loop:
61 mov a,songetr
62 call song
63 mov temp,a
64 or a,temp
65 jbs status,z
66 jmp endsound
67 and a,@0b00001111 ;獲得音調指針
68 jbc status,z
69 jmp notone ;音調指針為0則轉向NOTONE禁止中斷
70 call tonetab ;根據音調指針獲得TCC定時初值
71 mov stack,a
72 ENI ;開中斷
73 jmp tonsing
74 ;===========================
75 00025 notone:
76 DISI ;禁止中斷
77 00026 tosing:
78 swapa temp
79 and a,@0b00001111
80 mov dly3,a
81 rlc dly3 ;(DLY3)x8
82 rlc dly3
83 rlc dly3
84 call delay
85 ;===========================2個音符間的停頓
86 DISI
87 mov a,@1
88 mov dly3,a
89 call delay
90 ;===========================完成處理下一個音符
91 inc songptr
92 jmp main_loop
93 ;===========================結束后重新開始播放
94 00033 ENDSOUND:
95 DISI
96 mov a,@50
97 mov dly3,a
98 call delay
99 jmp restart
100 ;======================================
101 ;獲得音符字節:低4位是音高,高4位為音長
102 ;======================================
103 00038 SONG:
104 M tbl
*** error A033:The macro is not defined.
105 retl 0x43 ;音符3,相對音長4
106 retl 0x43 ;音符3,相對音長4
107 retl 0x46 ;音符6,相對音長4
108 retl 0x27 ;音符7,相對音長2
109 retl 0x26 ;音符6,相對音長2
110 retl 0x86 ;音符6,相對音長8
111 retl 0x47 ;音符7,相對音長4
112 retl 0x26 ;音符6,相對音長2
113 retl 0x27 ;音符7,相對音長2
114 retl 0x25 ;音符5,相對音長2
115 retl 0x23 ;音符3,相對音長2
116 retl 0x42 ;音符2,相對音長4
117 retl 0x83 ;音符3,相對音長8
118 retl 0x00 ;一遍結束
119 ;=========================================
120 ;音高決定定時初值,定時計數值=256-定時初值
121 ;=========================================
122 TONETAB:
123 M tbl
*** error A033:The macro is not defined.
124 nop
125 retl @106 ;低音1初值106,定時值=150
126 retl @122 ;低音2定時值=134,150=134x6>2
127 retl @137 ;低音3定時值=119,134=119x6>2
128 retl @144 ;低音4定時值=112,119=112x12>2
129 retl @156 ;低音5定時值=100,112=100x6>2
130 retl @167 ;低音6定時值=89,100=89x6>2
131 retl @177 ;低音7定時值=79,89=79x6>2
132 retl @181 ;音符1定時值=75,79=75x12>2
133 retl @189 ;音符2定時值=67,75=67x6>2
134 retl @197 ;音符3定時值=59,67=59x6>2
135 retl @200 ;音符4定時值=56,59=56x12>2
136 retl @206 ;音符5定時值=50,56=50x6>2
137 retl @211 ;音符6定時值=45,50=45x6>2
138 retl @216 ;音符7定時值=40,45=40x6>2
139 retl @218 ;高音1定時值=38,40=38x12>2
140 retl @222 ;高音2定時值=34,38=34x6>2
141 retl @226 ;高音3定時值=30,34=30x6>2
142 retl @228 ;高音4定時值=28,30=28x12>2
143 retl @231 ;高音5定時值=25,28=25x6>2
144 retl @234 ;高音6定時值=22,25=22x6>2
145 retl @236 ;高音7定時值=20,22=20x6>2
146 ;============================
147 ;根據音長決定延時 20msxdly3
148 ;============================
149 DELAY:
150 mov a,@250
151 mov dly2,a
152 inner2:
153 mov a,@133
154 mov dly1,a
155 inner1:
156 djz dly1
157 jmp inner1
158 djz dly2
159 jmp inner2
160 djz dly3
161 jmp delay
162 ret
163 ;============================
164 eop
2 Error(s), 0 Warning(s), 0 User Message(s)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -