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

📄 ss84b0337a.s

📁 普通三项表程序,基于NEC78F9232芯片的汇编程序
💻 S
📖 第 1 页 / 共 5 页
字号:
					MINUTE_CNTL++
					if(MINUTE_CNTL>=#60)
						MINUTE_CNTL=#0
						;BackLight10SCunt++
						;if(BackLight10SCunt>=#10)
						;	BackLight10SCunt=#0
						;	Timer_BackLightCtl=#0
						;	LCDCTRL=1
						;endif
					endif	
				endif
			endif
		
			SET1 B_MAINLOOP
			BR !MAIN_LOOP

;=====================================================================
;
;=====================================================================			

;STOPCON:					
;				IRPOWER=1							
;				PMK2=0
;				PMK0=0												
				;if_bit(B_CHUCHANG)
				;	PMK0=0
				;endif				
;STOPCON1:				
;				WDTE=#0ACH
;				NOP
;				STOP				
;				NOP												
;IRCHECK_LOOP:		
;				WDTE=#0ACH
;				if_bit(B_SEVENTY)	
;					HALT
;					NOP
;					BR $IRCHECK_LOOP					
;				endif
;				if_bit(B_UPFLAG)
					;if(Waken_Counter<#5)
						;Waken_Counter++
;						DI
;						PMK0=1
;						PMK2=1
;						BR !WAKEUP_START	
					;endif			
;				endif
;				BR $STOPCON1
				
BaudRateSet:						
			SRMK6=1 
			ASIM6=#01H								
			SWITCH(A)
			case 00:					;baudrate=1200
				CKSR6=#8
				BREAK
;			case 02:					;baudrate=300
;				CKSR6=#10
;				BREAK
;			case 04:					;baudrate=600
;				CKSR6=#9
;				BREAK
			case 16:					;baudrate=2400
				CKSR6=#7
				BREAK
			case 32:					;baudrate=4800
				CKSR6=#6
				BREAK
			case 64:					;baudrate=9600
				CKSR6=#5
				BREAK
			default:
				CKSR6=#8
			ENDS
			BRGC6=#13					;1200 baud rate
			ASIM6=#9DH					;power on,even parity,8 bits lenth ,1 stop bit
			RXE6=1
			SRMK6=0 
			RET				
;------------------------------------------------------------------------------------------                 
;设置寄存器子程序
;------------------------------------------------------------------------------------------ 
SetUpRegister:
			LVIS=#02H
			LVIM=#80H
			LSRCM=#0 		
;IniPORT
					
			if(B_UPFLAG)				
				PM4=#11111100B
				KWHPulse=0	
			else
				PMC2=#00000001B
				PM0=#11111000B
				PM2=#11110001B
				PM3=#11110111B
				PM4=#11110001B
				PU3=#00000100B
				PU4=#00000001B
				ADMK=0
				ADS=#00H				
				RESETM=1 	
			endif
			PM12=#11111110B
			IRTXD=0						
			LCDPOWER=1	
			IRPOWER=0
						                             																                                   		                                             
;IniClock			
									;8MHz FULL CLOCK RUN 			
                	PCC=#00H
			PPCC=#00H
			RET		  

;----------------------------------------------------------------
;READ_1PARA:						
;			WordAddress=AX
;			I2CRdWtCounter=#1
;			DE=#I2CRT_Buffer
;			CALLT	[TAddr_RdDataWithBkUp]	
;			RET
;-----------------------------------------------------------------
INI_CLOCK:
			
			TEMP_BUF00=#00000011B
			TEMP_BUF01=#00101000B
			I2CDeviceInd=#01
			AX=#00E0H
			WordAddress=AX
			DE=#I2CRT_Buffer
			I2CRdWtCounter=#2
			CALLT	[TAddr_WriteI2C]		
			RET
			
;---------------------------------------------------------------------- 	
SetUp_SFRFlag:		
			
			LCDCOM=#48H
			CALLT	[TAddr_LCDINI]
			
			;CALL !INI_CLOCK
		
			;WordAddress=#ClockAdjData(AX)
			;I2CRdWtCounter=#1
			;DE=#I2CRT_Buffer
			;CALLT	[TAddr_RdDataWithBkUp]		
			;if_bit(!B_CHECKSUMB)																								
			;	I2CDeviceInd=#1
			;	WordAddress=#OFFSET(AX)								
			;	CALLT	[TAddr_WriteI2C]
			;endif	
			if(!B_UPFLAG)
				DI	
								
;				SRMK6=1
;				ASIM6=#01H
;				CKSR6=#08H					
;				BRGC6=#13					;1200 baud rate
;	           		ASIM6=#9DH	
;				SRMK6=0
;				B_COMMHEADFLAG=0
;				B_COMMHEADFLAG1=0				
				TMMK000=1
				IRmodeRXD=1
				CRC00=#0
				PRM00=#00000001B
				AX=#416
				CR000=AX
				TMC00=#00001100B
				TMMK000=0												                                     
						
				IRmodeTXD=0	
				TMHMD1=#0
				TMHMD1=#00000010B
				CMP01=#105
				TMHE1=1			
				
				TOEN1=0															
				TXE6=0								
				RXE6=1					
				
				FrameRTCounter=#0	
				COMM_FLAG=#00000000B
				SET1 B_IRRecvEn
				
				EI
			endif	
			RET 
 
 
 
 
;-----------------------------------------------------------------------------------------
                  			
;POWERL_CHAN:			
			
			;DE=#I2CRT_SubBuffer0+3					;掉电时间 
			;HL=#I2CRT_Buffer+3					;上电时间			
			;LOCAL_CNT=#4
			;if_bit(B_TIMESET)						;上电时间
			;	LOCAL_CNT=#3
			;endif
			;CALLT	[TAddr_JUDGE_MAX]
			;if_bit(CY)
				;if_bit(B_TIMESET)
				;	BR $POWERL_CHANEND
				;endif
				;HL=#I2CRT_SubBuffer0+1				
				;DE=#I2CRT_SubBuffer1+1
				;LOCAL_CNT=#2
				;CALLT	[TAddr_JUDGE_MAX]										
				;if_bit(!Z)
				;	if(I2CRT_SubBuffer11!=I2CRT_SubBuffer01)(A)
				;		CLR1 B_KWHCHAN
				;	endif
				;	BR $POWERL_CHANEND				
		
				;endif	
				
				;BT  B_KWHCHAN,$POWERL_CHANEND
				;WORKER_CNT++
				;if(WORKER_CNT<#11)
				;	BR $POWERL_CHANEND
				;endif	
			;endif	
			
			;SET1 B_TIMEEVEN
			
;POWERL_CHANEND:			
			;RET
		
			
;----------------------------------------------------------------------------------------------------	 
                   	                               			 
;-------------------------------------------------------------------------------------------	
                  			 
;POWERHOUR_ADD:			
;			CALL !POWERL_CHAN
;			BT B_TIMEEVEN,$POWERHOUR_ADDEND
;			HL=#I2CRT_SubBuffer0
;			BT B_TIMESET,$ADD_DAY
;			SET1 CY
;			A=[HL]
;			ADDC A,#0
;			CALLT	[TAddr_BCDADJ]	
;			if(A>=#24H)
;ADD_DAY:
;				WDTE=#0ACH
;				AX=TIMEERR_CNT
;				AX++
;				TIMEERR_CNT=AX
;				if(AX>=#447H)					;day>=3year
;					AX=#721H
;					TIMEERR_CNT=AX				;max=five year
;					BR $POWERHOUR_ADDEND
;				ENDIF	
;				A=#0
;				CALL !TIME_BCDADJ
;				HL++
;				CALL !Judge_NumOfDays
;				HL--
;				if(A<[HL])
;					A=#1
;					CALL !TIME_BCDADJ
;					
;					if(A>=#13H)
;						A=#1
;						CALL !TIME_BCDADJ
;					endif
;				endif
;			endif			 
;			BR $POWERHOUR_ADD 
;POWERHOUR_ADDEND:			
;			B_TIMEEVEN=0
			
;			RET	
		 

;-------------------------------------------------------------------------------
Check_CopyDay:
			
			HL=#I2CRT_SubBuffer0+1				
			DE=#I2CRT_SubBuffer1+1
			LOCAL_CNT=#2
			CALLT	[TAddr_JUDGE_MAX]													
			if_bit(Z)
				if_bit(!B_KWHCHAN)							
					if(WORKER_CNT<#11)
						WORKER_CNT++
						B_ClrSvPwFlagEn=0			;B_ClrSvPwFlagEn:清电量转存标志允许位						
					endif	
				endif	
							
			else					
				if(I2CRT_SubBuffer11!=I2CRT_SubBuffer01)(A)
					B_KWHCHAN=0	
					B_ClrSvPwFlagEn=1				;允许清电量转存标志
				endif								
			endif	
			RET
;-------------------------------------------------------------------------------------------	
                  			 
POWERHOUR_ADD:	
			WDTE=#0ACH						
			DE=#I2CRT_SubBuffer0+3					;掉电时间 
			HL=#I2CRT_Buffer+3					;上电时间			
			LOCAL_CNT=#4
			CALLT	[TAddr_JUDGE_MAX]			
			if_bit(CY)				
				CALL	!Check_CopyDay															
				HL=#I2CRT_SubBuffer0			
				A=[HL]
				A+=#1
				CALLT	[TAddr_BCDADJ]	
				if(A>=#24H)
					AX=TIMEERR_CNT
					AX++
					TIMEERR_CNT=AX
					if(AX>=#447H)				;day>=3year
						AX=#721H
						TIMEERR_CNT=AX
						BR	$POWERHOUR_ADD_END	;max=five year
					endif	
					A=#0
					CALL !TIME_BCDADJ
					HL++
					CALL !Judge_NumOfDays
					HL--
					if(A<[HL])
						A=#1
						CALL !TIME_BCDADJ					
						if(A>=#13H)
							A=#1
							CALL !TIME_BCDADJ
						endif
					endif
				endif
			else
				if_bit(Z)
					CALL	!Check_CopyDay
				endif
				BR	$POWERHOUR_ADD_END
			endif	
										
			BR	$POWERHOUR_ADD					;循环比较,直到相等
						 
POWERHOUR_ADD_END:
			RET
			
			

             

;--------------------------------------------------------------------------
;判断大小  [HL+B]  [DE+B]  B
;IF HL>DE A=2 
;IF HL=DE A=4
;IF HL<DE A=1
;RETURN A	
;--------------------------------------------------------------------------
;JUDGE_MAX:
;		A=[DE]
;		CMP A,[HL]
;		BZ $JUDGE_MAX0
;		BNC $JUDGE_MAX1
;		;B=1
;		A=#2
;		RET
;JUDGE_MAX0:		
;		DE--
;		HL--
;		DBNZ LOCAL_CNT,$JUDGE_MAX
;		A=#4
;		RET
;JUDGE_MAX1:
;	
;		A=#1									
;	
;		RET
;--------------------------------------------------------------------------

		
;--------------------------------------------------------------------------
;判断大小  [HL+B]  [DE+B]  B							;2005.10.10  zjl
;if [DE]<[HL]	then	C=1	 
;if [DE]>=[HL]	then	C=0
;if [DE]=[HL]	then	Z=1
;if [DE]!=[HL]	then	Z=0	
;--------------------------------------------------------------------------
JUDGE_MAX:
		A=[DE]
		if(A!=[HL])
			RET
		endif		
		DE--
		HL--
		DBNZ LOCAL_CNT,$JUDGE_MAX										
		RET
		
;--------------------------------------------------------------------------			

;--------------------------------------------------------------------------
;按键扫描和处理子程序  	
;	B_TurnKeySts_Temp		KeyRegister0.0	;轮显键暂存状态
;	B_PrgKeySts_Temp		KeyRegister0.1	;编程键暂存状态

;	B_TurnKeyValidSts		KeyRegister1.0	;轮显键有效状态
;	B_PrgKeyValidSts		KeyRegister1.1	;编程键有效状态

;	B_PressTurnKey		KeyRegister1.6	;轮显键按下标志
;	B_PressPrgKey		KeyRegister1.7	;编程键按下标志
;----------------------------------------------------------------------
DealWithKey:					
									
			KeyRegister0&=#00000011B
			KeyRegister1&=#11000011B			
			A=#0
				if_bit(!TURNKEY)
				A.0=1
				endif
				if_bit(!PRGKEY)
				A.1=1						;当前按键状态存放在A中
				endif	
							
				if(A==KeyRegister0)			;此时A中存放当前按键状态
					KeyScanCounter++				
					if(KeyScanCounter>=#5)
						KeyScanCounter=#0
						A^=KeyRegister1			;若按键状态改变,则相应位为1
						A&=KeyRegister0			;此时KeyRegister0中存放当前按键状态
						ROR	A,1
						ROR	A,1
						A&=#11000000B			;得到按键是否按下的标志
						A|=KeyRegister0			;将当前按键状态取为有效按键状态,供下次比较用
						KeyRegister1=A
						
						if_bit(B_PressTurnKey)	
							if_bit(!B_UPFLAG)
								Timer_BackLightCtl=#0
								LCDCTRL=1
							endif
							B_LCDFLAG=1
							B_LCDCLOSE=0
							Timer_LCD=#0														
							COUN60S_CNT=#0
							if(LCDMODE_BYTE==#0)
								LCDDispCounter=#0	
							else
								LCDDispCounter++
								if(LCDDispCounter>=#7)
									LCDDispCounter=#0
								endif
								CALL !LCD_DISPLAY
							endif
							
						endif	
						;if_bit(!LVIF)
						
							if_bit(B_PressPrgKey)
								Flag0^=#10000000B		;编程允许标志位取反
								;SET1 B_LCDFLAG
								;SET1 B_LCDREF
								Timer_PrgKeyCtl=#0
							endif	
						;endif				
					endif
				else
				KeyScanCounter=#0
				KeyRegister0=A
				endif				
			
			RET
			
;------------------------------------------------------------------------------			

;RVPKWH_TIME:	
;			if_bit(B_VOLTAGEBREAKAVAIL)
;				DE=#I2CRT_Buffer
;				Universal_Buf1=#BREAKTIME(AX)
;				CALL !RVPTIME_ADD
;			endif
;			if_bit(B_RVPKWH_LCD)
;				DE=#I2CRT_Buffer
;				Universal_Buf1=#RVPKWHTIME(AX)
;				CALL !RVPTIME_ADD
;			endif	
;			RET
;-------------------------------------------------------------------------------			
;RVPTIME_ADD:			
;			WordAddress=Universal_Buf1(AX)
;			I2CRdWtCounter=#3
;			CALLT	[TAddr_RdDataWithBkUp]
;			HL=#I2CRT_Buffer
;			LOCAL_CNT=#3
;			CALL !KWH_BCDADJ
;			DE=#I2CRT_Buffer
;			WordAddress=Universal_Buf1(AX)
;			I2CRdWtCounter=#3
;			CALLT	[TAddr_WtDataWithBkUp]
;			RET
			
;--------------------------------------------------------------------------------------------------			

;RVPKWH_TIME:	
			
;			if_bit(B_VOLTAGEBREAKAVAIL)
;				WordAddress=#BREAKTIME(AX)
;				CALL !RVPTIME_ADD
;			endif
;			if_bit(B_RVPKWH_LCD)
;				WordAddress=#RVPKWHTIME(AX)
;				CALL !RVPTIME_ADD
;			endif	
;			RET
;----------------------------------------------------------------------------------------------------			
RVPTIME_ADD:	
			I2CRdWtCounter=#3
			DE=#I2CRT_Buffer		
			CALLT	[TAddr_RdDataWithBkUp]
			HL=#I2CRT_Buffer

⌨️ 快捷键说明

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