⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asl

📁 一款智能老鼠的玩具源代码
💻 ASL
📖 第 1 页 / 共 2 页
字号:
+                     1 ;****************************************************************;
+                     2 ; MOUSE-hourse
+                     3 ; Version 1.0
+                     4 ;
+                     5 ; MCU Body: KB 89C21(89R21)
+                     6 ; ROM size: 16K Bytes
+                     7 ; RAM size: 512 Bytes
+                     8 ; Interrupt: three timer and two external interrupt
+                     9 ; Clock: Dual,Fast,Slow clock (4M, set temporarily)
+                    10 ; Operating Mode: Dual,Fast,Slow,Idle,Sleep
+                    11 ; Built-in WATCH DOG TIMER
+                    12 ; 16 bi-directional I/O pins
+                    13 ;; Written by: lixy
+                    14 ; Date: 2004-02-16 
+                    15 ; chagen by :he qingrang
+                    16 ; date: 2004-06-25
+                    17 ;****************************************************************;
+                    18 
+                    19 ;================================================================;
+                    20 ;CONSTANT AREA
+                    21 ;================================================================;
00EF                 22 c_sp		equ 	#0efh		;the sp address
00FF                 23 c_ram		equ	#0ffh		;the maximum ram size
0000                 24 c_t1h		equ	#00h		;set timer1 frequency 8KHz,(slow clock)32K/8K-1=3=0003h
0003                 25 c_t1l		equ	#03h     
0022                 26 c_t2h		equ	#22h		;set timer2 frequency 300Hz,(fast clock)4M/1.5/300-1=8888=22b8h
00B8                 27 c_t2l		equ	#0b8h
001C                 28 c_op1		equ	#00011100b	;R_OP1: bit7:DRDY, bit6:STOP, bit5:SLOW, bit4:INTE
+                    29 					;       bit3:T2E,  bit2:T1E,  bit1:Z,    bit0:C
+                    30 ;c_ier		equ	#00110b		;R_IER: bit4:TB,   bit3:INT1, bit2:T1,   bit1:T2,  bit0:INT2
0007                 31 c_ier		equ	#00111b		;R_IER: bit4:TB,   bit3:INT1, bit2:T1,   bit1:T2,  bit0:INT2
0004                 32 c_ier_en_t1	equ	#00100b		;R_IER: bit4:TB,   bit3:INT1, bit2:T1,   bit1:T2,  bit0:INT2
0002                 33 c_ier_en_t2	equ	#00010b		;R_IER: bit4:TB,   bit3:INT1, bit2:T1,   bit1:T2,  bit0:INT2
0001                 34 c_ier_en_int2	equ	#00001b		;R_IER: bit4:TB,   bit3:INT1, bit2:T1,   bit1:T2,  bit0:INT2
0003                 35 c_init_point_h	equ	#03h
00E7                 36 c_init_point_l	equ	#0e7h           ;999=03e7H
0005                 37 c_fail_loop	equ	#5		;when fail,play fail voice and lcd flash times
0078                 38 c_point_dec_intvl	equ	#120	;120/300=400ms
0006                 39 c_play_v_normal_intvl	equ	#6     ;(c_point_dec_intvl/300)*c_play_voice_intvl
0001                 40 c_play_v_fast_intvl	equ	#1
0032                 41 c_fast_voice		equ	#50	;<255 and >50,fast voice
0064                 42 c_over_sound_rum	equ	#100	;
+                    43 ;================================================================;
+                    44 ;DATA AREA
+                    45 ;================================================================;
+B 00 01

+                    46 	.area	main_var(data)
+                    47 
0000                 48 flg_new_random::	.ds	1	;the flag of generating new random number
+                    49                                         ;"0" not generate new random number
+                    50                                         ;"1" generate new random number in free movement course 
+                    51                                         ;"2" generate new random number when received IR
0001                 52 cnt_point::		.ds	2       ;point counter,it will decrease 1 each interval
0003                 53 cnt_fail_loop::		.ds	1
0004                 54 cnt_play_v_intvl::	.ds	1	;play voice interval,(c_point_dec_intvl/300)*cnt_play_v_intvl,
0005                 55 cnt_over_sound_rum::	.ds	1	;play gameover song times
+                    56 ;================================================================;
+                    57 ;CODE AREA
+                    58 ;================================================================;
+B 00 02

+                    59 	.area	main_code(code,abs)
+                    60 	.org	0x00
0000 02 00 16        61 	br	start_initial
+                    62 	.org	0x06			;Int1(prtd.6) entry
0006 02 00 15        63 	br	int1_isr
+                    64 	.org	0x09			;Timer1 entry
0009 02 00 00        65 	br	t1_isr
+                    66 	.org	0x0c			;Timer2 entry
000C 02 00 00        67 	br	t2_isr
+                    68 	.org	0x0f			;Int2(prtd.7) entry
000F 02 00 00        69 	br	INT2_isr
+                    70 	.org	0x12			;Time base entry
0012 02 00 15        71 	br	tb_isr
+                    72 
0015                 73 int1_isr:
+                    74 ;t1_isr:
+                    75 ;t2_isr:
+                    76 ;int2_isr:
0015                 77 tb_isr:
0015 25              78 	reti
+                    79 ;----------------------------------------------------------------;
+                    80 ;Start Initial
+                    81 ;----------------------------------------------------------------;
0016                 82 start_initial:
0016 F3 EF           83 	lda	#c_sp			;set stack pointer
0018 FC 18           84 	sta	r_sp
001A F3 FF           85 	lda	#11111111b
001C FC 32           86 	sta	r_prtd			;set i/o prtd
001E F3 FF           87 	lda	#11111111b		;set prtc[0,1,2] "0" when initial, IR driver circuit worked at high level.
0020 FC 31           88 	sta	r_prtc			;set i/o prtc
0022                 89 clear_memory:				;clear sram(page0)其中包括显存(f0h-ffh)
0022 F3 00           90 	lda	#00h
0024 FC 21           91 	sta	r_dp
0026                 92 clr_m:
0026 F3 00           93 	lda	#00h
0028 FE              94 	sta	i
0029 F0 21           95 	lda	r_dp
002B A7 FF           96 	cmpe	#c_ram
002D 06 00 34        97 	brz	clr_end
0030 18              98 	incdp
0031 02 00 26        99 	br	clr_m
0034                100 clr_end:
+                   101 ;----------------------------------------------------------------;
+                   102 ;Set Timer1 Frequency Subroutine
+                   103 ;----------------------------------------------------------------;
0034 F3 00          104 	lda	#c_t1h			;set timer1
0036 FC 11          105 	sta	r_t1h
0038 F3 03          106 	lda	#c_t1l
003A FC 08          107 	sta	r_t1l
003C F3 22          108 	lda	#c_t2h			;set timer2
003E FC 14          109 	sta	r_t2h
0040 F3 B8          110 	lda	#c_t2l
0042 FC 12          111 	sta	r_t2l
+                   112 ;Initial Registor Subroutine
+                   113 ;----------------------------------------------------------------;
0044 F3 00          114 	lda	#00h
0046 FC 54          115 	sta	r_tpp
0048 FC 02          116 	sta	r_tph
004A FC 01          117 	sta	r_tpl
004C FC 28          118 	sta	r_pp
004E FC 48          119 	sta	r_voc
0050 FC 34          120 	sta	r_pwmc
0052 F3 00          121 	lda	#00000000b		;set normal mode,close int,t1,t2,tb
0054 FC 22          122 	sta	r_op1
0056 FC 24          123 	sta	r_op2
0058 F3 00          124 	lda	#00000b			;disable all interrupt
005A FC 04          125 	sta	r_ier
+                   126 ;	lda	#01h
+                   127 ;	sta	r_lcdc			;点亮LCD
005C 28             128 	clrint
005D F3 03          129   	lda	#c_init_point_h         ;lcd display initial "999"
005F FD 02          130 	sta	cnt_point+1
0061 F3 E7          131 	lda	#c_init_point_l
0063 FD 01          132 	sta	cnt_point
0065 F3 1C          133 	lda	#c_op1		;#00011100b,normal mode, open interrupt,enable timer1
0067 FC 22          134 	sta	r_op1		; R_OP1: bit7:DRDY, bit6:STOP, bit5:SLOW, bit4:INTE
0069 F3 02          135 	lda	#c_ier_en_t2		;enable timer2
006B FC 04          136 	sta	r_ier
006D DB 04          137 	ora	#c_ier_en_t1		;enable timer1
006F FC 04          138 	sta	r_ier
0071 DB 01          139 	ora	#c_ier_en_int2		;enable int2
0073 FC 04          140 	sta	r_ier
+                   141 ;----------------------------------------------------------------;
+                   142 ;Wait for nose key pressed, if nose key is pressed and released,the mouse start run
+                   143 ;----------------------------------------------------------------;
0075 20 00 00       144 	call	scan_key_start
0078                145 main:
0078 29             146 	clrwdt				;add Watch Dog function
+                   147 ;-----------------------------------------------------------------------
+                   148 ;judge if touched sign is received, if yes, the game will over
+                   149 ;-----------------------------------------------------------------------
0079 20 00 88       150 	call	if_gameover
+                   151 ;calculating the points and display it,play the sound
007C 20 00 CD       152 	call	cal_point
+                   153 ;-----------------------------------------------------------------------
+                   154 ;scan stall,nose,trap key
007F 20 00 00       155 	call	scan_key
+                   156 ;-----------------------------------------------------------------------
0082 20 00 00       157 	call	Run
0085 02 00 78       158 	br	main
+                   159 	
+                   160 ;//***********************Game Over*************************************
0088                161 if_gameover::
0088 F1 00          162 	lda	flg_rcv_touched
008A A7 01          163 	cmpe	#1			;touched the cheese 
008C 06 00 90       164 	brz	gameover
008F 24             165 	ret
0090                166 gameover:
0090 20 00 00       167 	call	select_sound_gameover
0093 F3 00          168 	lda	#0
0095 FD 05          169 	sta	cnt_over_sound_rum
0097                170 gameover_song:
0097 29             171 	clrwdt
0098 F3 FF          172   	lda	#0ffh
009A A5 00          173         cmpe	M_stopbit
009C 07 00 97       174         brnz	gameover_song
009F 20 00 00       175         call	debounce
00A2 20 00 00       176 	call	select_sound_gameover
00A5                177 gameover_song1:
00A5 29             178 	clrwdt
+                   179  ; 	lda	#0ffh
+                   180  ;      cmpe	M_stopbit
+                   181  ;      brnz	gameover_song1
00A6 F1 05          182         lda	cnt_over_sound_rum

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -