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

📄 calcmain.asl

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASL
📖 第 1 页 / 共 5 页
字号:
+                     1 ;|---------------------------------------|
+                     2 ;|Program name : CalcMain.asm		 |
+                     3 ;|Use bady: 83137			 |
+                     4 ;|Programer: Alton			 |
+                     5 ;|					 |
+                     6 ;|---------------------------------------|
+                     7 
+B 00 01

+                     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
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 
+B 00 02

+                    58 	.area	calcmain_date1(data,abs)	
+                    59 		.org	0xdd
+                    60 					
+                    61 
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	
+B 00 03

+                    74 		.area   calcmain_code(code,abs)
+                    75      	 .org   0x00            		 ;program start
0000 02 00 13        76         	br	.Main   		 	
+                    77        	 .org   0x06            		 ;interrupt 1       	 	 		  
0006 25              78         	reti
+                    79        	 .org   0x09           			 ;timer 1
0009 02 0A 4D        80        	 	br	.InterruptT1       	 
+                    81          .org   0x0c          			 ;timer 2
000C 02 0A 7F        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 00           94 		lda	#0h
0015 FC 58           95 		sta	PRT17 
0017 F3 FF           96 		lda	#0xFF
0019 FC 32           97 		sta	PRTD
001B F0 32           98 		lda	PRTD
001D CB 0C           99 		anda	#.ATTest 
001F A7 00          100 		cmpe	#0h
0021 06 0B F3       101 		brz	.ATTestMode				 		 
0024 F3 FF          102 		lda	#0ffh
0026 FC 18          103 		sta	SP
0028 20 0A 9C       104 		call	.Initial
002B 20 00 00       105 		call	ModeIcom
002E 20 0B 80       106 		call	.EI
0031 02 00 67       107 		br	.Start
0034                108 .Sleep:: 	
0034 F3 FF          109 		lda	#0ffh
0036 FC 18          110 		sta	SP		 	
0038 20 0B 48       111 		call	.IntoSleepMode		
003B F3 01          112 		lda	#01h
003D F9 00          113 		sta0	.KeyCnt		
003F 20 0B 80       114 		call	.EI						                 						
0042                115 .Wakeup:	
+                   116 				 							
0042 F5 00          117 		lda0	.KeyCnt	
0044 A7 00          118 		cmpe	#0h
0046 07 00 42       119 		brnz	.Wakeup
0049 F5 E1          120 		lda0	.KeyCodeBuf
004B A7 66          121 		cmpe	#.ON
004D 07 00 34       122 		brnz	.Sleep
0050                123 .PowerOn:						
0050 20 0B 79       124 		call	.DI
0053 20 0A D0       125 		call	.ClrData							 		
0056 20 00 00       126 		call	ModeIcom		;Disp Icom			
0059 20 0B 68       127 		call	.LcdcOn		
005C 20 0B 80       128 		call	.EI
005F F3 00          129 		lda	#>.Count
0061 FC 28          130 		sta	PP	
0063 F3 02          131 		lda	#.KeyDown	
0065 FD 00          132 		sta 	.Count	
+                   133 ;-------------------------------------------		 
0067                134 .Start:
0067 20 0B 87       135 		call	.IdleMode
006A                136 .CheckCode:	
006A F5 D3          137 		lda0	.Sec		 
006C A7 F0          138 		cmpe	#.TimeOut		;(5.3)SEC*69(45h)=368sec=6Min
006E 04 00 34       139 		brc	.Sleep			
0071 20 0B A9       140 		call	.KeyCheck		 
0074 F3 00          141 		lda	#>.Count
0076 FC 28          142 		sta	PP		
0078 F1 00          143 		lda 	.Count		
007A A7 01          144 		cmpe	#.HaveKey		
007C 06 00 9D       145 		brz 	.ScanKey														 			
007F 20 00 00       146 		call	T1chkblank		;Blankcheck			
0082 F3 00          147 		lda	#>t1count
0084 FC 28          148 		sta	PP
0086 F1 00          149 		lda	t1count
0088 A7 00          150 		cmpe	#0
008A 07 00 6A       151 		brnz	.CheckCode		 
008D 20 0B 87       152 		call	.IdleMode				
0090 F0 24          153 		lda	OP2
0092 CB 40          154 		anda	#40h
0094 06 00 6A       155 		brz	.CheckCode
0097 20 0B A0       156 		call	.NormalMode
009A 02 00 6A       157 		br	.CheckCode
+                   158 ;;;;;Show Icom and Blanking and judge have key press down		 
009D                159 .ScanKey:							  	
009D F5 E1          160 		lda0	.KeyCodeBuf	
009F A7 00          161 		cmpe	#0h
00A1 06 00 6A       162 		brz	.CheckCode 		
00A4 F9 00          163 		sta0	.KeyPos	
00A6 F3 00          164 		lda	#>.Count
00A8 FC 28          165 		sta	PP	
00AA F3 02          166 		lda	#02h
00AC FD 00          167 		sta 	.Count		
00AE F3 00          168 		lda	#>t1count
00B0 FC 28          169 		sta	PP
00B2 F3 00          170 		lda	#0h
00B4 FD 00          171 		sta	t1count		
00B6 F9 D3          172 		sta0	.Sec		;reset time out clock
00B8 20 0B 79       173 		call	.DI
+                   174 ;-------------------------------------------						
00BB                175 .InputKeyHandle:	
00BB F3 00          176 		lda	#>StateFlag
00BD FC 28          177 		sta	PP
00BF F1 00          178 		lda	StateFlag
00C1 CB 08          179 		anda	#08h
00C3 06 00 DD       180 		brz	.NormalGet
00C6 20 00 00       181 		call	BasenKeyCode		 
00C9 A7 01          182 		cmpe	#01h
00CB 06 00 DD       183 		brz	.NormalGet
00CE A7 02          184 		cmpe	#02h
00D0 06 00 E0       185 		brz	.BaseNkey
00D3 A7 03          186 		cmpe	#03h
00D5 06 00 E0       187 		brz	.BaseNkey
00D8 A7 04          188 		cmpe	#04h
00DA 06 00 DD       189 		brz	.NormalGet
00DD                190 .NormalGet:				 				
00DD 20 00 00       191 		call	.GetKeyCode								
00E0                192 .BaseNkey:		
00E0 F5 00          193 		lda0	ErrorFlag
00E2 A7 00          194 		cmpe	#0h		
00E4 07 03 BF       195 		brnz	.DispDotMatrix	
00E7 20 00 00       196 		call	BasenKeyChk		
00EA F3 00          197 		lda	#>.SetFlag
00EC FC 28          198 		sta	PP
00EE F1 00          199 		lda	StateFlag
00F0 CB 08          200 		anda	#08h
00F2 07 09 C1       201 		brnz	.BaseN
00F5                202 .NotBaseN:		
00F5 F1 00          203 		lda	.SetFlag
00F7 CB 03          204 		anda	#03h			;check	(Rnd Eng)
00F9 A7 01          205 		cmpe	#01h
00FB 06 06 07       206 		brz	.DORnd
00FE A7 02          207 		cmpe	#02h		
0100 06 06 2D       208 		brz	.SetDRG
0103                209 .EditModeInp:			
0103 F5 00          210 		lda0	.KeyPos
0105 A7 EE          211 		cmpe	#.Mode
0107 06 01 11       212 		brz	.FunctChoice
010A                213 .MemCheck:		
010A F1 00          214 		lda	.SFlag		 
010C CB 30          215 		anda	#30h
010E 07 05 57       216 		brnz	.MemoryCK												
+                   217 ;-------------------------------------------
+                   218 ;		Function Area
+                   219 ;-------------------------------------------
0111                220 .FunctChoice:							
0111 F5 00          221 		lda0	.KeyPos
0113 A7 00          222 		cmpe	#0h
0115 A7 EE          223 		cmpe	#.Mode			;Mode set
0117 06 07 E5       224 		brz	.Modeadd	
011A F5 DF          225 		lda0	.ModeFlag
011C CB F0          226 		anda	#0f0h
011E 07 03 BF       227 		brnz	.DispDotMatrix	
0121 F5 00          228 		lda0	.KeyPos
0123 A7 B5          229 		cmpe	#.MADD
0125 06 01 C9       230 		brz	.GetValue
0128 A7 DF          231 		cmpe	#.MSUB
012A 06 01 C9       232 		brz	.GetValue		
012D A7 F8          233 		cmpe	#0f8h			;drg
012F 06 06 8F       234 		brz	.DRG
0132 A7 C2          235 		cmpe	#.ENG			;eng
0134 06 03 BF       236 		brz	.DispDotMatrix
0137 A7 41          237 		cmpe	#41h		        ;shift eng 	
0139 06 03 BF       238 		brz	.DispDotMatrix
013C A7 60          239 		cmpe	#.RND
013E 06 05 D7       240 		brz	.SetRND
0141 A7 EE          241 		cmpe	#.Mode			;Mode set
0143 06 07 E5       242 		brz	.Modeadd	
0146 F5 DF          243 		lda0	.ModeFlag
0148 CB F0          244 		anda	#0f0h
014A 07 03 BF       245 		brnz	.DispDotMatrix	
014D F5 00          246 		lda0	.KeyPos
014F A7 65          247 		cmpe	#.DEL			;del
0151 06 03 BF       248 		brz	.DispDotMatrix
0154 A7 61          249 		cmpe	#.INS
0156 06 07 BD       250 		brz	.INSck			;ck ins
0159 F5 00          251 		lda0	.KeyPos
015B A7 CC          252 		cmpe	#.LEFT
015D 06 07 9B       253 		brz	.CkLR			
0160 A7 DD          254 		cmpe	#.RIGHT	
0162 06 07 9B       255 		brz	.CkLR	
0165 F3 01          256 		lda	#01h
0167 FC 28          257 		sta	PP		
0169 F1 00          258 		lda	.SetFlag
016B CB 20          259 		anda	#20h			;check	(Point Fract Dms)
016D 07 02 02       260 		brnz	.NoEquCalc		;.DislayMode		;.ModeDisp	 		
0170 02 07 AF       261 		br	.CKIns				
+                   262 ;===========================================
+                   263 ;		.CalcResoult
+                   264 ;===========================================	
+                   265 ;;;StateFlag 7	6   5	4   3	 2   1   0	
+                   266 ;;;	   Comp SD  D	R   G   (  LRMode )
0173                267 .CalcResoult:	
+                   268 					
0173 F5 00          269 		lda0	.KeyPos		 	
0175 A7 00          270 		cmpe	#0h
0177 06 03 C2       271 		brz	.EmitKeyD		
+                   272 		;call	ChkDispAns		;stop blanking  
017A F3 00          273 		lda	#>StateFlag		
017C FC 28          274 		sta	PP
017E F1 00          275 		lda	StateFlag		;c0 judge CMPE SD MODE
0180 CB C0          276 		anda	#0c0h	
0182 06 01 A6       277 		brz	.LrModeCk
0185                278 .CompSDMod:												
0185 F5 00          279 		lda0	.KeyPos					
0187 A7 77          280 		cmpe	#.PercentEqu
0189 06 01 C9       281 		brz	.GetValue
018C A7 A3          282 		cmpe	#.Enter
018E 06 01 C9       283 		brz	.GetValue
0191 A7 B5          284 		cmpe	#.DT
0193 06 01 C9       285 		brz	.GetValue
0196 A7 DF          286 		cmpe	#.CL
0198 06 01 C9       287 		brz	.GetValue
019B A7 7B          288 		cmpe	#.CalcEqu
019D 06 01 C9       289 		brz	.GetValue	
01A0 20 00 00       290 		call	ChkDispAns			
01A3 02 03 81       291 		br	.SaveInputData
+                   292 ;;.CommaFlag=0 normal calc or .CommaFlag=ff data input (for SD REG Mode)		
01A6                293 .LrModeCk:	
01A6 F5 00          294 		lda0	.CommaFlag		
01A8 A7 00          295 		cmpe	#0h		 
01AA 06 01 85       296 		brz	.CompSDMod
01AD F5 00          297 		lda0	.KeyPos					
01AF A7 B5          298 		cmpe	#.DT			;For SD REG Mode
01B1 06 01 C9       299 		brz	.GetValue
01B4 A7 DF          300 		cmpe	#.CL
01B6 06 01 C9       301 		brz	.GetValue
01B9 A7 A3          302 		cmpe	#.Enter
01BB 06 03 73       303 		brz	.EnterErr
01BE A7 77          304 		cmpe	#.PercentEqu
01C0 06 03 73       305 		brz	.EnterErr
01C3 20 00 00       306 		call	ChkDispAns		
01C6 02 03 81       307 		br	.SaveInputData 
+                   308 ;;;;;;;;;;judge press Enter or Ac or Percent Enter	

⌨️ 快捷键说明

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