📄 plane050930v01.lst
字号:
1 000000 ;********************************************************
2 000000 ; COMPANY : CHOMP *
3 000000 ; PROJECT NAME : *
4 000000 ; Author : *
5 000000 ; VERSION : V0.0 *
6 000000 ; START DATE : 2004.12. *
7 000000 ; COMPLISH DATE: 2004.12. *
8 000000 ; Modify : 2004.12. *
9 000000 ; BODY : SN8P2602 *
10 000000 ; COMPILER : 2K *
11 000000 ; CRYSTAL : 4MHz *
12 000000 ; Modify function: *
13 000000 ; *******************************************************
14 000000
15 000000 ;//Set ICE emulation mode.Pay attention to it be reset after emulation.
16 000000 ;ICE_MODE EQU 1
17 000000 ;// Please set ICE_MODE equ 0 and recompiler before write the code into IC body
18 000000 ;//ICE_MODE EQU 0
19 000000
20 000000 chip sn8p2602a
21 000000 //{{SONIX_CODE_OPTION
22 000000 .Code_Option Noise_Filter Enable
23 000000 .Code_Option Reset_Pin P15
24 000000 .Code_Option Watch_Dog Always_On ; Watchdog still enable even in Green and Sleep mode
25 000000 .Code_Option High_Clk 12M_X'tal ; Crystal/Resonator: 10Mhz~16Mhz
26 000000 .Code_Option Fcpu #2 ; Fcpu = High_Clk/4
27 000000 .Code_Option Security Enable
28 000000
29 000000 //}}SONIX_CODE_OPTION
30 000000
31 000000 include define.asm
32 000000 .list
33 000000 .DATA
34 000000
35 000000 org 0h ;Bank 0 data section start from RAM address 0x000
36 0000 D AccBuf ds 1 ;Accumulater buffer
37 0001 D PflagBuf ds 1 ;PFLAG buffer
38 000002
39 0002 D Keyinbuf ds 1 ;按键
40 0003 D Keychkbuf ds 1
41 0004 D Keycvtbuf ds 1
42 0005 D Keyoldbuf ds 1
43 0006 D Keychat ds 1
44 000007 ; aplcode ds 1
45 0007 D csxtable ds 1 ;csx的表值
46 0008 D gearbuf ds 1 ;输出档位值
47 0009 D inputcount ds 1 ;哪一个控制脚
48 00000A
49 00000A ; wingbuf ds 1 ;左右翼档位
50 00000A ; empennagebuf ds 1 ;尾翼档位
51 00000A ; screwbuf ds 1 ;螺旋桨档位
52 00000A ; swingbuf ds 1 ;摆尾档位
53 00000A ;飞机各控制脚输出
54 00000A ;//set by carman
55 000A D wingbuf ds 1 ;控制左右翼高电平输出宽度
56 000B D wingbuf1 ds 1 ;左右翼档位1
57 000C D wingloadbuf ds 1 ;重新载入左右翼高电平控制信号
58 000D D winglowbuf ds 1 ;控制左右翼低电平输出宽度
59 00000E
60 000E D empennagebuf ds 1 ;控制尾翼高电平输出宽度
61 000F D empennagebuf1 ds 1 ;尾翼档位1
62 0010 D empennageloadbuf ds 1 ;重新载入尾翼高电平控制信号
63 0011 D empennagelowbuf ds 1 ;控制尾翼低电平输出宽度
64 000012
65 0012 D screwbuf ds 1 ;控制螺旋桨高电平输出宽度
66 0013 D screwbuf1 ds 1 ;螺旋桨档位1
67 0014 D screwloadbuf ds 1 ;重新载入螺旋桨高电平控制信号
68 0015 D screwlowbuf ds 1 ;控制螺旋桨低电平输出宽度
69 000016
70 0016 D swingbuf ds 1 ;控制摆尾高电平输出宽度
71 0017 D swingbuf1 ds 1 ;摆尾档位1
72 0018 D swingloadbuf ds 1 ;重新载入摆尾高电平控制信号
73 0019 D swinglowbuf ds 1 ;控制摆尾低电平输出宽度
74 00001A ;------
75 00001A ;可以通过设定以下RAM来改变各高电平宽度
76 00001A ;-----
77 00001A
78 00001A
79 00001A
80 00001A ; wingbuf2 ds 1 ;左右翼档位1
81 00001A ; empennagebuf2 ds 1 ;尾翼档位1
82 00001A ; screwbuf2 ds 1 ;螺旋桨档位1
83 00001A ; swingbuf2 ds 1 ;摆尾档位1
84 00001A
85 001A D samebuf1 ds 1
86 001B D samebuf2 ds 1
87 001C D samebuf3 ds 1
88 001D D samebuf4 ds 1
89 00001E
90 00001E
91 001E D leveh ds 1 ;接收信号的高电平计数值
92 001F D level ds 1 ;接收信号的低电平计数值
93 0020 D levecount ds 1 ;接受信号计数值的中间变量
94 000021 ; timerswing ds 1 ;摆尾输出振荡波形的计数值
95 000021 ; timerempennage ds 1 ;尾翼输出振荡波形的计数值
96 000021 ; timerwing ds 1 ;机翼输出振荡波形的计数值
97 000021 ; timerscrew ds 1 ;螺旋桨输出振荡波形的计数值
98 000021
99 000021
100 000021
101 0021 D tablecount ds 1 ;查表的计数值
102 000022
103 000022 ; timer1800us ds 1
104 0022 D timer5ms ds 1
105 0023 D timer500ms ds 1
106 000024
107 0024 D csxcalibratebuf ds 1 ;csx校准值
108 000025
109 000025 ; pulsecount1 ds 1 ;低电平计数
110 000025 ; pulsecount2 ds 1 ;高电平计数
111 000025
112 0025 D r1 ds 1 ;延时
113 0026 D r2 ds 1
114 000027
115 0027 D flag ds 1
116 0028 D flag1 ds 1
117 0029 D flag2 ds 1
118 002A D flag3 ds 1
119 00002B
120 00002B
121 00002B
122 00002B
123 00002B ;*************** Define flag ***************
124 00002B ;时间标志
125 00002B ; t5msflag1 equ flag.0
126 00002B ; t5msflag2 equ flag.1
127 00002B ; t5msflag3 equ flag.2
128 00002B ; t5msflag4 equ flag.3
129 00002B ; t1800usflag equ flag.4
130 00002B ; t200usflag equ flag.5
131 E 00060027 t500msflag equ flag.6
132 E 00070027 t5msflag equ flag.7
133 00002B
134 00002B
135 E 00000028 csxenbflag equ flag1.0 ;是否检测csx的信号
136 00002B ; winghighflag equ flag1.1 ;机翼是否输出振荡波的标志
137 00002B ; empennagehighflag equ flag1.2 ;尾翼是否输出振荡波的标志
138 00002B ; screwhighflag equ flag1.3 ;螺旋桨是否输出振荡波的标志
139 00002B ; swinghighflag equ flag1.4 ;摆尾是否输出振荡波的标志
140 E 00050028 errorflag equ flag1.5 ;
141 00002B ; singleflag equ flag1.6 ;遥控接收信号的中断标志
142 E 00070028 firstflag equ flag1.7 ;第一个接收信号的标志
143 00002B
144 E 00000029 keystatflag equ flag2.0
145 00002B
146 E 00010029 t18msflag equ flag2.1
147 00002B
148 00002B
149 00002B
150 00002B ;飞机各控制脚状态输出切换
151 00002B ;//set by carman
152 E 00020029 wingstatflag equ flag2.2 ;=0:high output,=1:low output
153 E 00030029 empennagestatflag equ flag2.3
154 E 00040029 screwstatflag equ flag2.4
155 E 00050029 swingstatflag equ flag2.5
156 00002B
157 00002B
158 E 00060029 chksigntableflag equ flag2.6
159 E 00070029 empenaddflag equ flag2.7 ;csx值加减标志
160 E 0000002A empensubflag equ flag3.0
161 00002B ; t0count equ #230;231
162 00002B
163 E 00000005 samecontant equ #05h ;解码得到相同的次数
164 E 000000FA lowcontant equ #250
165 E 00000021 equalcontant equ #33
166 00002B
167 00002B ;----------------------------------------------
168 00002B ;-------------constant define------------------
169 00002B
170 00002B ;*************Port define**************************
171 00002B
172 E 000000D0 singleflag equ p0.0 ;遥控接收脚
173 E 000100D1 ptwing equ p1.1 ;机翼
174 E 000000D1 ptscrew equ p1.0 ;螺旋桨
175 E 000200D1 ptempennage equ p1.2 ;尾翼
176 E 000300D1 ptswing equ p1.3 ;摆尾
177 00002B
178 E 000000D5 ptcsx1 equ p5.0 ;前后陀螺仪控制信号
179 E 000100D5 ptcsx2 equ p5.1 ;
180 E 000200D5 ptcsx3 equ p5.2 ;
181 E 000300D5 ptcsx4 equ p5.3 ;
182 E 000400D5 ptcsy1 equ p5.4 ;左右陀螺仪控制信号
183 E 000500D5 ptcsy2 equ p5.5 ;
184 E 000600D5 ptcsy3 equ p5.6 ;
185 E 000700D5 ptcsy4 equ p5.7 ;
186 00002B
187 00002B
188 00002B ;*********Micro define as following****************
189 00002B NOTBIT macro bit
190 00002B b0bts0 bit
191 00002B jmp $+3
192 00002B b0bset bit
193 00002B jmp $+2
194 00002B b0bclr bit
195 00002B endm
196 00002B
197 00002B IFLT16 expand mem1,val1,val2,adr ;mem<val val-->adr
198 00002B local flt00,flt10,flt20,flt30
199 00002B mov a,mem1+1
200 00002B cmprs a,val2
201 00002B jmp flt10
202 00002B mov a,mem1
203 00002B cmprs a,val1
204 00002B jmp flt20
205 00002B jmp flt30
206 00002B flt20:
207 00002B b0bts1 fc
208 00002B jmp adr
209 00002B jmp flt30
210 00002B flt10:
211 00002B b0bts1 fc
212 00002B jmp adr
213 00002B flt30:
214 00002B endm
215 00002B
216 00002B
217 00002B ;***********************************************
218 000000 .code
219 000000 org 0h
220 000000 8010(2) jmp start
221 000001
222 000008 org 08h
223 000008 807B(2) jmp interruptSub
224 000009
225 000010 org 10h
226 000010
227 000010 include main.asm
228 000010 ;***********************************************
229 000010 start:
230 000010 0000(1) nop
231 000011 C032(2) call PortInitial
232 000012 ; call RAMInitial
233 000012 ; call SysInitial
234 000012 C05F(2) call pdelay100ms
235 000013 C032(2) call PortInitial
236 000014 C01C(2) call RAMInitial
237 000015 C047(2) call SysInitial
238 000016
239 000016 ;***********************************************
240 000016
241 000016 mainloop:
242 000016 2D5A(1) mov a,#5ah
243 000017 1FCC(1) mov wdtr,a
244 000018 ; call mnchkrx
245 000018 C107(2) call mnint
246 000019 C1B0(2) call mnkey
247 00001A C06B(2) call mnapp
248 00001B 8016(2) jmp mainloop
249 00001C
250 00001C ;***********************************************
251 00001C RAMInitial:
252 00001C 2B84(1) clr Y ;Select bank 0
253 00001D 2D2F(1) mov A,#0x2f
254 00001E 2F83(1) b0mov Z,A ;Set @YZ address from 7fh
255 00001F
256 00001F ClrRAM10:
257 00001F 2BE7(1) clr @YZ ;Clear @YZ content
258 000020 2683(1+S) decms Z ;z = z - 1 , skip next if z=0
259 000021 801F(2) jmp ClrRAM10
260 000022 2BE7(1) clr @YZ ;Clear address 0x00
261 000023 ;--------------------set some content----------------
262 000023 ;设定各控制脚归零点
263 000023 4828(1) bset csxenbflag
264 000024 2D21(1) mov a,equalcontant;33
265 000025 2F0A(1) b0mov wingbuf,a
266 000026 2F0C(1) b0mov wingloadbuf,a
267 000027 2F0B(1) b0mov wingbuf1,a
268 000028 2F0E(1) b0mov empennagebuf,a
269 000029 2F10(1) b0mov empennageloadbuf,a
270 00002A 2F0F(1) b0mov empennagebuf1,a
271 00002B
272 00002B 2F12(1) b0mov screwbuf,a
273 00002C 2F14(1) b0mov screwloadbuf,a
274 00002D 2F13(1) b0mov screwbuf1,a
275 00002E
276 00002E 2F16(1) b0mov swingbuf,a
277 00002F 2F18(1) b0mov swingloadbuf,a
278 000030 2F17(1) b0mov swingbuf1,a
279 000031 0E00(2) ret
280 000032 ;***********************************************
281 000032 PortInitial:
282 000032 2BD0(1) clr p0
283 000033 2BD1(1) clr p1
284 000034 2BD5(1) clr p5
285 000035
286 000035 2D00(1) mov A,#00h ;//don't Pull up p5,p1,p0 port
287 000036 2FE0(1) b0mov p0ur,a
288 000037 2FE1(1) b0mov P1UR,A
289 000038 2DFF(1) mov A,#0ffh
290 000039 2FE5(1) b0mov P5UR,A
291 00003A
292 00003A 2DFE(1) mov A,#0feh
293 00003B 1FB8(1) mov p0m,a
294 00003C 2DFF(1) mov A,#0ffh
295 00003D 1FC1(1) mov P1M,A
296 00003E 2D00(1) mov A,#00h
297 00003F 1FC5(1) mov P5M,A
298 000040
299 000040 0000(1) nop
300 000041 0000(1) nop
301 000042 0000(1) nop
302 000043 2BD0(1) clr p0
303 000044 2BD1(1) clr p1
304 000045 2BD5(1) clr p5
305 000046 0E00(2) ret
306 000047 ;***********************************************
307 000047 ;**********************************************
308 000047 ;Name :SysInitial
309 000047 ;Function:
310 000047 ;Input :
311 000047 ;Output :
312 000047 ;Register Used:
313 000047 ;***********************************************
314 000047 SysInitial:
315 000047 2B86(1) clr PFLAG ;pflag = x,x,x,x,x,c,dc,z
316 000048 2D00(1) mov A,#00h ;Clear watchdog timer and initial system mode
317 000049 2FCA(1) b0mov OSCM,A
318 00004A
319 00004A 2D30(1) mov A,#00110000B
320 00004B 2FD8(1) b0mov T0M,A ; Set the T0 rate=Fcpu/64
321 00004C 2D00(1) mov A,#0h
322 00004D 2FD9(1) b0mov T0C,A
323 00004E 47D8(1) bclr FT0enb ; Enable TIMER0
324 00004F 4CC9(1) bset ft0ien ; Enable T0 interrupt
325 000050 44C8(1) bclr ft0irq ; CLEAR TIMER0 INTERRUPT FLAG
326 000051
327 000051 2D74(1) MOV A,#01110100B
328 000052 2FDA(1) B0MOV TC0M,A ;Set the TC0 rate=Fcpu/2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -