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

📄 oppotriangle_0225.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
 ;/subrutine name : oppotriangle.asm
;/user bady      : HE84770
;/fast clock     : 4Mhz
;/slow clock     : 32768khz
;/programer      : Alton
;|---------------------------------------------------|
;| Program:Asin ,Acos ,Atan			     |		
;| Format:					     |	
;|	ex: Asin  0.88				     |		
;| Input:					     |	
;|	Input data to OperandX			     |	
;|	call	.Asin				     |	
;|	result:	OperandZ	 		     |	
;|      Acos Atan Atan asame			     |	
;|						     |	
;|    	ps(if ErrorFlag =1 data is Error)	     |
;|---------------------------------------------------| 

;
pS0		EQU		0X00
pS1		EQU		pS0+0X0a
pS2		EQU		pS1+0X0a
pS3		EQU		pS2+0X0a
pS4		EQU		pS3+0X0a
pS5		EQU		pS4+0X0a
qS1		EQU		pS5+0X0a
qS2		EQU		qS1+0X0a
qS3		EQU		qS2+0X0a
qS4		EQU		qS3+0X0a
c_hsqrt2	EQU		qS4+0X0a
H_PI		EQU		c_hsqrt2+0X0a
Point5		EQU		H_PI+0X0A
Int2		EQU		Point5+0X0a
X		EQU		Int2+0X0a
Int1		EQU		X+0x0a
R180DivPi	EQU		Int1+0X0a
PiDiv180	EQU		R180DivPi+0X0a
Int0		EQU		PiDiv180+0X0a
Int30 		EQU		Int0+0X0a
Int60 		EQU		Int30+0X0a
Int90 		EQU		Int60+0X0a
Int45		EQU		Int90+0X0a
INT180          equ             Int45+0X0a
;;Golden added
COMBN20000      equ             0x0
COMBR24         equ             COMBN20000+0x0a
COMBR70         equ             COMBR24+0x0a

;;
Id0		EQU		0X00
Id1		EQU		Id0+0X0a
Id2		EQU		Id1+0X0a
Id3		EQU		Id2+0X0a
At0		EQU		Id3+0X0a
At1		EQU		At0+0X0a
At2		EQU		At1+0X0a
At3		EQU		At2+0X0a
At4		EQU		At3+0X0a
At5		EQU		At4+0X0a
At6		EQU		At5+0X0a
At7		EQU		At6+0X0a
At8		EQU		At7+0X0a
At9		EQU		At8+0X0a
At10		EQU		At9+0X0a
Num1		EQU		At10+0X0a
Num2		EQU		Num1+0X0a
Num3		EQU		Num2+0X0a
Num4		EQU		Num3+0X0a
Int1T		EQU		Num4+0X0a
Int2T 		EQU		Int1T+0X0a
Int1p5		EQU		Int2T+0X0a
.CmpLen		EQU		0x07
;-----------------------------------------------
		  .area	  asin_data(data,ABS)
		   .org	0xd8
.KeyC::								
.M_Data_Offset::	.ds		1
.IdFlag::		.ds		1		;ID=0,1,2,3,(4=-1)
.KeyD::
.SignXBuf:		.ds		1
.KeyCnt::
.SpecialFlag::		.ds		1
.DPBuf:: 		.ds		1

     		  .area asin_code(code)
;-----------------------------------------------
.Asin::		
		
		lda	SignX
		sta	.SignXBuf
		lda	#0h
		sta	SignX
		call	.X_trans_Buf		
		call	.CheckData
		lda	ErrorFlag
		cmpe	#01h
		brz	.ErrorDataAsin	
		call	.SpecialDegree	
		lda	.SpecialFlag
		cmpe	#0h
		brz	.NotSpeicalDegree
		cmpe	#01h
		brz	.Degree30Asin
		cmpe	#02h
		brz	.Degree90Asin
		cmpe	#03h
		brz	.Degree0Asin
		
.NotSpeicalDegree:
						
		lda	#Point5
		sta	.M_Data_Offset
		call	.InpDataToY
		call	LineUp	
		lda	#OperandX
		sta	Addr1
		lda	#OperandY
		sta	Addr2		
		lda	#.CmpLen		;06
		sta	DpCount
		call	CompareData
		lda	Temp1
		cmpe	#1h
		brz	.SinXBeyondPoint5
		call	.Buf_trans_X		;2002   7/12		
		call	.Condition1		
		br	.AddSymbols
.SinXBeyondPoint5:
		call	.Buf_trans_X		;2002   7/12
		call	.Condition2		
		br	.AddSymbols 
.Degree30Asin:
		lda	#Int30
		sta	.M_Data_Offset
		call	.InpData
		call	.ClrZ
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag	
		lda	#0h
		sta	PointZ
		br	.AddSymbols
.Degree90Asin:
		lda	#Int90
		sta	.M_Data_Offset
		call	.InpData
		call	.ClrZ
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag	
		lda	#0h
		sta	PointZ
		br	.AddSymbols 	
.Degree0Asin:
		lda	#Int0
		sta	.M_Data_Offset
		call	.InpData
		call	.ClrZ
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag	
		lda	#0h
		sta	PointZ
		br	.AddSymbols 
.ErrorDataAsin:
		call	.ClrZ	
.AddSymbols:	
		lda	.IdFlag	
		cmpe	#05h
		brz	.EndDegreeAsin
		cmpe	#0ch
		brz	.EndDegreeAsin		
		call	.Degree
.EndDegreeAsin:
		lda	#0h
		sta	.IdFlag		
;Added by Golden		
		lda	.SignXBuf
		cmpe    #00h
		brz     0$
		sta     SignZ
0$:		

		ret
;-----------------------------------------------
.Acos::
                lda0     SignX
		sta0     SignT
		lda	ErrorFlag
		cmpe	#01h
		brz	.EndAcos
		call	.X_trans_Buf		;2002   7/12			
		call	.SpecialDegree	
		lda	.SpecialFlag
		cmpe	#0h
		brz	.NotSpeicalDegreeAcos
		cmpe	#01h
		brz	.Degree60Acos
		cmpe	#02h
		brz	.Degree0Acos
		cmpe	#03h
		brz	.Degree90Acos
		
.NotSpeicalDegreeAcos:	
		lda	#0ch
		sta	.IdFlag			
		call	.Asin			
		lda	ErrorFlag
		cmpe	#01h
		brz	.EndAcos	
		lda	#0h
		sta	SignZ	
		lda	.SignXBuf	
		cmpe	#00h
		brz	.XBeyond0
		lda	#H_PI
		sta	.M_Data_Offset
		call	.InpData		
		call	.Z_trans_Y
		call	Addition				
		br	.EndAcos
.Degree60Acos:
                         
		lda	#Int60
		sta	.M_Data_Offset
		call	.InpData
		lda     SignT
		ora     #0
		brnz    NegValue  
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag	
		lda	#0h
		sta	PointZ
		br	.EndAcos
.Degree0Acos:
		lda	#Int0
		sta	.M_Data_Offset
		call	.InpData
;added by golden		
		lda     SignT
		ora     #0
		brnz    NegValue  
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag	
		lda	#0h
		sta	PointZ
		br	.EndAcos
.Degree90Acos:
		lda	#Int90
		sta	.M_Data_Offset
		call	.InpData
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag	
		lda	#0h
		sta	PointZ
		br	.EndAcos
;added by golden
NegValue:
                call	.X_trans_Z
		lda	#Int180
		sta	.M_Data_Offset
		call	.InpData		
		call	.Z_trans_Y						
		call	Subtration		
        	lda	#0h
		sta	PointZ
		sta     SignZ
		br      .EndDegreeAcos
.XBeyond0:				
		lda	#H_PI
		sta	.M_Data_Offset
		call	.InpData		
		call	.Z_trans_Y						
		call	Subtration		        	
.EndAcos:		
		lda	.IdFlag
		cmpe	#05h
		brz	.EndDegreeAcos		
		call	.Degree	
.EndDegreeAcos:	
		lda	#0h
		sta	.IdFlag			
		ret
	
;------------------------------------------------
.Atan::		
		lda	ErrorFlag
		cmpe	#01h
		brz	.EndChoiceX
		lda	#0h
		sta	.IdFlag					
		lda	SignX
		sta	.SignXBuf
		lda	#0h
		sta	SignX
		call	.X_trans_Buf
		call	.ClrY
		lda	#01h
		sta0	OperandY+1
		call	Subtration
		lda0	SignZ
		cmpe	#01h
		brnz	.Put90toZ
		call	.Buf_trans_X			 	
		lda	#0h			
		sta	ErrorFlag
		call	.SpecialDegree	
		lda	.SpecialFlag
		cmpe	#0h
		brz	.NotSpeicalDegreeAtan
		cmpe	#02h
		brz	.Degree45
		cmpe	#03h
		brz	.Degree0Atan
		
.NotSpeicalDegreeAtan:		
		
		call	.ChoiceX
		call	.DoZ3
		call	.DoW3
		call	.DoS1
		call	.DoS2
		call	.DoW4
		call	.ResultAtan		
		br	.Addsymbol
.Put90toZ:
		call	.ClrZ
		lda	#90h
		sta0	OperandZ+6
		br	.SinXtoZ		
.Degree0Atan:
		lda	#Int0
		sta	.M_Data_Offset
		call	.InpData
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag	
		lda	#0h
		sta	PointZ
		br	.Addsymbol		
.Degree45:
		lda	#Int45
		sta	.M_Data_Offset
		call	.InpData
		call	.X_trans_Z
		lda	#05h
		sta	.IdFlag
		lda	#0h
		sta	PointZ	
								
.Addsymbol:								
		lda	.SignXBuf		
		cmpe	#01h
		brnz	.EndAtan		
		sta	SignZ		
.EndAtan:	
		lda	.IdFlag
		cmpe	#05h
		brz	.EndDegreeAtan
		call	.Degree	
.EndDegreeAtan:	
		lda	#0h
		sta	.IdFlag
;Added by Golden
.SinXtoZ:		
		lda	.SignXBuf
		cmpe    #00h
		brz     .1$
		sta     SignZ
.1$:		
		ret		
	
;------------------------------------------------	
.Degree::	
		lda	#0h
		sta	PP	
		call	.Z_trans_X
		lda	#R180DivPi
		sta	.M_Data_Offset
		call	.InpDataToY							
		call	Multiplation		
		ret			
;------------------------------------------------	
.Rad::		
		lda	#0h
		sta	PP
		lda	#PiDiv180
		sta	.M_Data_Offset
		call	.InpDataToY 							
		call	Multiplation		
		ret
;------------------------------------------------
.Gpercent::		
		call	.ClrY
		lda	#09h
		sta0	OperandY+6
		lda	#01h
		sta0	PointY
		lda     #0h
		sta     PP 
		call    Multiplation
		ret		
;------------------------------------------------		
.PI::		
		lda	#0h
		sta	PP	
		lda	#H_PI
		sta	.M_Data_Offset
		call	.InpData
		call	.X_trans_Z
		ret								
;------------------------------------------------		
.SpecialDegree:		
		lda	#00h
		sta	.SpecialFlag	
		lda	#Point5
		sta	.M_Data_Offset
		call	.InpDataToY
		call	LineUp	
		lda	#OperandX
		sta	Addr1
		lda	#OperandY
		sta	Addr2		
		lda	#.CmpLen		;06	2002.2.21
		sta	DpCount
		call	CompareData
		call	.Buf_trans_X		;2002   7/12
		lda	Temp1
		cmpe	#0h
		brz	.Point5
		
		lda	#Int1
		sta	.M_Data_Offset
		call	.InpDataToY
		call	LineUp	
		lda	#OperandX
		sta	Addr1
		lda	#OperandY
		sta	Addr2		
		lda	#.CmpLen		;2002.02.21
		sta	DpCount
		call	CompareData
		call	.Buf_trans_X		;2002   7/12
		lda	Temp1
		cmpe	#0h
		brz	.Int1
		
		lda	#Int0
		sta	.M_Data_Offset
		call	.InpDataToY
		call	LineUp			;adjust point site
		lda	#OperandX
		sta	Addr1
		lda	#OperandY
		sta	Addr2		
		lda	#.CmpLen			;shift addr size2002.02.21
		sta	DpCount
		call	CompareData
		call	.Buf_trans_X		;2002   7/12
		lda	Temp1
		cmpe	#0h
		brz	.Int0
		br	.EndSpecialDegree
.Point5:
		lda	#01h
		sta	.SpecialFlag
		br	.EndSpecialDegree
.Int1:
		lda	#02h
		sta	.SpecialFlag
		br	.EndSpecialDegree		
.Int0:
		lda	#03h
		sta	.SpecialFlag
		br	.EndSpecialDegree		
		
		
.EndSpecialDegree:
		ret
					
;------------------------------------------------		
.CheckData:				
		lda	#0h	
		sta	.SpecialFlag		
		sta	ErrorFlag		
			
		lda	#Int1
		sta	.M_Data_Offset
		call	.InpDataToY
		call	LineUp	
		lda	#OperandX
		sta	Addr1
		lda	#OperandY
		sta	Addr2		
		lda	#.CmpLen		;2002.02.21	06
		sta	DpCount		
		call	CompareData
		lda	Temp1
		cmpe	#01h
		brz	.DataError
		br	.EndCheckData			
		
.DataError:
		lda	#01h
		sta	ErrorFlag
					
.EndCheckData:
		
		ret
											
;------------------------------------------------------		

⌨️ 快捷键说明

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