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

📄 calcmain.asl

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASL
📖 第 1 页 / 共 5 页
字号:
+                     1 ;|---------------------------------------|
+                     2 ;|Program name : CalcMain.asm		 |
+                     3 ;|Use bady: 83137			 |
+                     4 ;|Programer: Alton			 |
+                     5 ;|					 |
+                     6 ;|---------------------------------------|
+                     7 
+                     8 		.area	calcmain_date(data,abs)	
+                     9 		.org	0xd0
+                    10 				
000C                 11 .SetT1H		EQU	0x0c	;(32768/10)-1=0x0ccb	
00CB                 12 .SetT1L 	EQU	0xcb
0068                 13 .SetT2H		EQU	0x68		;(4M/1.5/100)-1=0x682a
002A                 14 .SetT2L		EQU	0x2a
007C                 15 .DecM		EQU	0x7c
007D                 16 .HexM		EQU	0x7d
007E                 17 .BinM		EQU	0x7e
007F                 18 .OctM		EQU	0x7f
0061                 19 .INS		EQU	0x61
0065                 20 .DEL		EQU	0x65
00EE                 21 .MODE		EQU	0xee
00CC                 22 .LEFT		EQU	0xcc
00DD                 23 .RIGHT		EQU	0xdd
0060                 24 .RND		EQU	0x60
00A2                 25 .ANS		EQU	0xa2
00C2                 26 .ENG		EQU	0xc2
00B5                 27 .MADD		EQU	0xb5
00DF                 28 .MSUB		EQU	0xdf
00DF                 29 .CL		EQU	0xdf
0014                 30 .ShiftL		EQU	0x14
0015                 31 .ShiftR		EQU	0x15
0077                 32 .PercentEqu	EQU	0x77
00B5                 33 .DT		EQU	0xb5
00A3                 34 .Enter		EQU	0xa3
00BD                 35 .DaltaX		EQU	0xbd
00BE                 36 .DaltaY		EQU	0xbe
0052                 37 .StoCode	EQU	0x52
0053                 38 .RclCode	EQU	0x53
007B                 39 .CalcEqu	EQU	0x7b
0066                 40 .ON		EQU	0x66
00F0                 41 .TimeOut	EQU	0xf0	;Time Out 6Min(69*16)/3=368sec
0032                 42 .RealseTime	EQU	0x32 
0002                 43 .KeyDown	EQU	0x02
0000                 44 .NoKey		EQU	0x00
0001                 45 .HaveKey	EQU	0x01
0008                 46 .TimeRels	EQU	0x08
00C0                 47 .KBTest		EQU	0xc0	;PRTD76
000C                 48 .ATTest		EQU	0x0c 	;PRTD32
+                    49 ;.KeyC::		.ds		1
+                    50 ;.KeyD::		.ds		1
+B 00 01
00D0                 51 .TempA::	.ds		1
00D1                 52 .PPTemp::	.ds		1
00D2                 53 .OP1Temp::	.ds		1
00D3                 54 .Sec::		.ds		1
00D4                 55 .DataDP::	.ds		1
00D5                 56 .FinFlag::	.ds		1
+                    57 
+                    58 	.area	calcmain_date1(data,abs)	
+                    59 		.org	0xdd
+                    60 					
+                    61 
+B 00 02
00DD                 62 .KeyBuf1::	.ds		1				
00DE                 63 .KeyBuf::	.ds		1
+                    64 ;.KeyCnt::	.ds		1
+                    65 ;.KeyCodeBuf::	.ds		1
00DF                 66 .ModeFlag::	.ds		1
00E0                 67 .StoFlag::	.ds		1
00E1                 68 .KeyCodeBuf::	.ds		1
00E2                 69 .KeyTimeCnt::	.ds		1
00E3                 70 .TurboCnt:: 
00E3                 71 .NumCnt::	.ds		1
00E4                 72 .FormulaDP::	.ds		1			
00E5                 73 .ForData::	.ds		1	
+                    74 		.area   calcmain_code(code,abs)
+                    75      	 .org   0x00            		 ;program start
+B 00 03
0000 02 00 13        76         	br	.Main   		 	
+                    77        	 .org   0x06            		 ;interrupt 1       	 	 		  
0006 25              78         	reti
+                    79        	 .org   0x09           			 ;timer 1
0009 02 0A 8E        80        	 	br	.InterruptT1       	 
+                    81          .org   0x0c          			 ;timer 2
000C 02 0A C0        82        		br	.InterruptT2       		 
+                    83        	 .org   0x0f         			 ;interrupt 2		 	 			     	 
000F 25              84        		reti
+                    85     	 .org   0x12          			 ;TimeBase
+                    86     	 
0012 25              87         	reti
+                    88  
+                    89 ;===========================================
+                    90 ;		.Main
+                    91 ;=========================================== 
0013                 92 .Main:: 	
+                    93 		
0013 F3 FF           94 		lda	#0ffh
0015 FC 18           95 		sta	SP
0017                 96 testcalculator:
0017 F3 00           97 	   lda 	#0	
0019 F9 00           98 	   sta0  SignX
001B F9 00           99 	   sta0 PointX
001D F3 00          100 	   lda	#0
001F F9 00          101 	   sta0 OperandX+0
0021 F9 01          102 	   sta0	OperandX+1
0023 F3 00          103            lda	 #0h
0025 F9 02          104 	   sta0	 OperandX+2
0027 F3 00          105            lda	 #0h
0029 F9 03          106 	   sta0	 OperandX+3
002B F3 00          107            lda	 #0h
002D F9 04          108 	   sta0	 OperandX+4
002F F3 00          109 	   lda	 #0h
0031 F9 05          110 	   sta0	 OperandX+5
0033 F3 01          111 	   lda	 #01h
0035 F9 06          112 	   sta0	 OperandX+6
+                   113 	   
0037 F3 00          114 	   lda 	#0	
0039 F9 00          115 	   sta0  SignY
003B F9 00          116 	   sta0 PointY
003D F3 00          117 	   lda	#0
003F F9 00          118 	   sta0 OperandY+0
0041 F9 01          119 	   sta0	OperandY+1
0043 F3 00          120            lda	 #0h
0045 F9 02          121 	   sta0	 OperandY+2
0047 F3 00          122            lda	 #0h
0049 F9 03          123 	   sta0	 OperandY+3
004B F3 00          124            lda	 #0h
004D F9 04          125 	   sta0	 OperandY+4
004F F3 00          126 	   lda	 #0h
0051 F9 05          127 	   sta0	 OperandY+5
0053 F3 01          128 	   lda	 #01h
0055 F9 06          129 	   sta0	 OperandY+6
0057 20 00 00       130 	   call  Addition
005A 00             131 	nop
005B 20 00 00       132 	call	Subtration
005E 00             133 	nop
005F 20 00 00       134 	call	Multiplation
0062 00             135 	nop
0063 20 00 00       136 	call	Division
+                   137 	
0066 02 00 17       138 	   br	testcalculator
+                   139 
+                   140 
+                   141 
+                   142 
+                   143 
+                   144 
+                   145 
+                   146 
+                   147 
+                   148 
+                   149 
+                   150 
0069 20 0A DD       151 		call	.Initial
006C 20 00 00       152 		call	ModeIcom
006F 20 0B C1       153 		call	.EI
0072 02 00 A8       154 		br	.Start
0075                155 .Sleep:: 	
0075 F3 FF          156 		lda	#0ffh
0077 FC 18          157 		sta	SP		 	
0079 20 0B 89       158 		call	.IntoSleepMode		
007C F3 01          159 		lda	#01h
007E F9 00          160 		sta0	.KeyCnt		
0080 20 0B C1       161 		call	.EI						                 						
0083                162 .Wakeup:	
+                   163 				 							
0083 F5 00          164 		lda0	.KeyCnt	
0085 A7 00          165 		cmpe	#0h
0087 07 00 83       166 		brnz	.Wakeup
008A F5 E1          167 		lda0	.KeyCodeBuf
008C A7 66          168 		cmpe	#.ON
008E 07 00 75       169 		brnz	.Sleep
0091                170 .PowerOn:						
0091 20 0B BA       171 		call	.DI
0094 20 0B 11       172 		call	.ClrData							 		
0097 20 00 00       173 		call	ModeIcom		;Disp Icom			
009A 20 0B A9       174 		call	.LcdcOn		
009D 20 0B C1       175 		call	.EI
00A0 F3 00          176 		lda	#>.Count
00A2 FC 28          177 		sta	PP	
00A4 F3 02          178 		lda	#.KeyDown	
00A6 FD 00          179 		sta 	.Count	
+                   180 ;-------------------------------------------		 
00A8                181 .Start:
00A8 20 0B C8       182 		call	.IdleMode
00AB                183 .CheckCode:	
00AB F5 D3          184 		lda0	.Sec		 
00AD A7 F0          185 		cmpe	#.TimeOut		;(5.3)SEC*69(45h)=368sec=6Min
00AF 04 00 75       186 		brc	.Sleep			
00B2 20 0B EA       187 		call	.KeyCheck		 
00B5 F3 00          188 		lda	#>.Count
00B7 FC 28          189 		sta	PP		
00B9 F1 00          190 		lda 	.Count		
00BB A7 01          191 		cmpe	#.HaveKey		
00BD 06 00 DE       192 		brz 	.ScanKey														 			
00C0 20 00 00       193 		call	T1chkblank		;Blankcheck			
00C3 F3 00          194 		lda	#>t1count
00C5 FC 28          195 		sta	PP
00C7 F1 00          196 		lda	t1count
00C9 A7 00          197 		cmpe	#0
00CB 07 00 AB       198 		brnz	.CheckCode		 
00CE 20 0B C8       199 		call	.IdleMode				
00D1 F0 24          200 		lda	OP2
00D3 CB 40          201 		anda	#40h
00D5 06 00 AB       202 		brz	.CheckCode
00D8 20 0B E1       203 		call	.NormalMode
00DB 02 00 AB       204 		br	.CheckCode
+                   205 ;;;;;Show Icom and Blanking and judge have key press down		 
00DE                206 .ScanKey:							  	
00DE F5 E1          207 		lda0	.KeyCodeBuf	
00E0 A7 00          208 		cmpe	#0h
00E2 06 00 AB       209 		brz	.CheckCode 		
00E5 F9 00          210 		sta0	.KeyPos	
00E7 F3 00          211 		lda	#>.Count
00E9 FC 28          212 		sta	PP	
00EB F3 02          213 		lda	#02h
00ED FD 00          214 		sta 	.Count		
00EF F3 00          215 		lda	#>t1count
00F1 FC 28          216 		sta	PP
00F3 F3 00          217 		lda	#0h
00F5 FD 00          218 		sta	t1count		
00F7 F9 D3          219 		sta0	.Sec		;reset time out clock
00F9 20 0B BA       220 		call	.DI
+                   221 ;-------------------------------------------						
00FC                222 .InputKeyHandle:	
00FC F3 00          223 		lda	#>StateFlag
00FE FC 28          224 		sta	PP
0100 F1 00          225 		lda	StateFlag
0102 CB 08          226 		anda	#08h
0104 06 01 1E       227 		brz	.NormalGet
0107 20 00 00       228 		call	BasenKeyCode		 
010A A7 01          229 		cmpe	#01h
010C 06 01 1E       230 		brz	.NormalGet
010F A7 02          231 		cmpe	#02h
0111 06 01 21       232 		brz	.BaseNkey
0114 A7 03          233 		cmpe	#03h
0116 06 01 21       234 		brz	.BaseNkey
0119 A7 04          235 		cmpe	#04h
011B 06 01 1E       236 		brz	.NormalGet
011E                237 .NormalGet:				 				
011E 20 00 00       238 		call	.GetKeyCode								
0121                239 .BaseNkey:		
0121 F5 00          240 		lda0	ErrorFlag
0123 A7 00          241 		cmpe	#0h		
0125 07 04 00       242 		brnz	.DispDotMatrix	
0128 20 00 00       243 		call	BasenKeyChk		
012B F3 00          244 		lda	#>.SetFlag
012D FC 28          245 		sta	PP
012F F1 00          246 		lda	StateFlag
0131 CB 08          247 		anda	#08h
0133 07 0A 02       248 		brnz	.BaseN
0136                249 .NotBaseN:		
0136 F1 00          250 		lda	.SetFlag
0138 CB 03          251 		anda	#03h			;check	(Rnd Eng)
013A A7 01          252 		cmpe	#01h
013C 06 06 48       253 		brz	.DORnd
013F A7 02          254 		cmpe	#02h		
0141 06 06 6E       255 		brz	.SetDRG
0144                256 .EditModeInp:			
0144 F5 00          257 		lda0	.KeyPos
0146 A7 EE          258 		cmpe	#.Mode
0148 06 01 52       259 		brz	.FunctChoice
014B                260 .MemCheck:		
014B F1 00          261 		lda	.SFlag		 
014D CB 30          262 		anda	#30h
014F 07 05 98       263 		brnz	.MemoryCK												
+                   264 ;-------------------------------------------
+                   265 ;		Function Area
+                   266 ;-------------------------------------------
0152                267 .FunctChoice:							
0152 F5 00          268 		lda0	.KeyPos
0154 A7 00          269 		cmpe	#0h
0156 A7 EE          270 		cmpe	#.Mode			;Mode set
0158 06 08 26       271 		brz	.Modeadd	
015B F5 DF          272 		lda0	.ModeFlag
015D CB F0          273 		anda	#0f0h
015F 07 04 00       274 		brnz	.DispDotMatrix	
0162 F5 00          275 		lda0	.KeyPos
0164 A7 B5          276 		cmpe	#.MADD
0166 06 02 0A       277 		brz	.GetValue
0169 A7 DF          278 		cmpe	#.MSUB
016B 06 02 0A       279 		brz	.GetValue		
016E A7 F8          280 		cmpe	#0f8h			;drg
0170 06 06 D0       281 		brz	.DRG
0173 A7 C2          282 		cmpe	#.ENG			;eng
0175 06 04 00       283 		brz	.DispDotMatrix
0178 A7 41          284 		cmpe	#41h		        ;shift eng 	
017A 06 04 00       285 		brz	.DispDotMatrix
017D A7 60          286 		cmpe	#.RND
017F 06 06 18       287 		brz	.SetRND
0182 A7 EE          288 		cmpe	#.Mode			;Mode set
0184 06 08 26       289 		brz	.Modeadd	
0187 F5 DF          290 		lda0	.ModeFlag
0189 CB F0          291 		anda	#0f0h
018B 07 04 00       292 		brnz	.DispDotMatrix	
018E F5 00          293 		lda0	.KeyPos
0190 A7 65          294 		cmpe	#.DEL			;del
0192 06 04 00       295 		brz	.DispDotMatrix
0195 A7 61          296 		cmpe	#.INS
0197 06 07 FE       297 		brz	.INSck			;ck ins
019A F5 00          298 		lda0	.KeyPos
019C A7 CC          299 		cmpe	#.LEFT
019E 06 07 DC       300 		brz	.CkLR			
01A1 A7 DD          301 		cmpe	#.RIGHT	
01A3 06 07 DC       302 		brz	.CkLR	
01A6 F3 01          303 		lda	#01h
01A8 FC 28          304 		sta	PP		
01AA F1 00          305 		lda	.SetFlag
01AC CB 20          306 		anda	#20h			;check	(Point Fract Dms)
01AE 07 02 43       307 		brnz	.NoEquCalc		;.DislayMode		;.ModeDisp	 		
01B1 02 07 F0       308 		br	.CKIns				
+                   309 ;===========================================

⌨️ 快捷键说明

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