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

📄 io2acpl.lst

📁 HT46R47對AC過零信號進行檢測
💻 LST
📖 第 1 页 / 共 2 页
字号:
  90  0010  2817        	JMP		COOL_RESTART			;;yes, jump to cool restart system
  91  0011  0700     R  	MOV		A,	flag_0aah			;;check if flag2(content AAH) changed
  92  0012  0CAA        	XOR		A,	0AAH
  93  0013  390A        	SNZ		Z
  94  0014  2817        	JMP		COOL_RESTART			;;yes, jump to cool restart system
  95  0015  2066        	CALL	INIT_SPECIAL_REGISTERS	;;reset in normal operation, only reset special registers
  96  0016  2819        	JMP 	MAIN_LOOP				;;jump to main_loop
  97  0017              	
"File: IO2ACPL.ASM   Holtek Cross-Assembler  Version 2.86      Page 4

  98  0017              COOL_RESTART:						;;reset when power on
  99  0017  2066        	CALL INIT_SPECIAL_REGISTERS		;;reset special registers
 100  0018  2075        	CALL INIT_GENERAL_REGISTERS		;;reset general registers
 101  0019              	
 102  0019              MAIN_LOOP:	
 103  0019  0001        	CLR		WDT						;;clear Watching Dog Timer
 104  001A  1080     R  	SZ		second					;;if time out
 105  001B  2819        	JMP		main_loop				;;no, still waiting
 106  001C  0F01        	MOV		A,	1					;;yes, resetting ZCD interval = 1sec.
 107  001D  0080     R  	MOV		second,	A
 108  001E  3C00     R  	SZ		flag_zcd_rest			;;if need to ZCD now
 109  001F  2823            JMP		$+4						;;yes, ZCD now
 110  0020  1F14            CLR		PB						;;off all LEDs
 111  0021  3000     R      SET		flag_zcd_rest			;;no, set flag of non-ZCD period
 112  0022  2819        	JMP		MAIN_LOOP				;;jump to main loop
 113  0023  3400     R      CLR		flag_zcd_rest			;;yes, clear flag of non-ZCD period
 114  0024              									;;zero crossing detecting right now
 115  0024  3C00     R  	SZ		flag_zcd_int			;;waiting for ZCD complete
 116  0025  2824        	JMP		$-1						;;complete?, no, still waiting
 117  0026              	
 118  0026  0700     R  	MOV		A,	phase_position		;;yes, check if Power Line frequency is 50HZ
 119  0027  0080     R  	MOV		tmp_phase,	A			;;save to a temporary variant
 120  0028  1F00     R  	CLR		phase_position			;;Clear power line cycle count
 121  0029  0AA5        	SUB		A,	COUNT_50HZ + 5		;;if within COUNT_50HZ +/-5
 122  002A  3C0A        	SZ		C
 123  002B  2840        	JMP		TO_OTHER_FREQUENCY		;;no, jump to next 60hz checking
 124  002C  0700     R  	MOV		A,	tmp_phase
 125  002D  0A9B        	SUB		A,	COUNT_50HZ - 5
 126  002E  380A        	SNZ		C
 127  002F  2834        	JMP		TO_60HZ_DETECTION		;;no, jump to next 60hz checking
 128  0030  3194        	SET		Pb3						;;yes, 50HZ_LED on
 129  0031  3514        	CLR		Pb2						;;yes, 60HZ_LED off
 130  0032  1F00     R  	CLR		tmp_phase
 131  0033  2819        	JMP 	MAIN_LOOP				;;jump to main_loop
 132  0034              	
 133  0034              TO_60HZ_DETECTION:					;;Check if Power Line frequency is 60HZ
 134  0034  0700     R  	MOV		A,	tmp_phase
 135  0035  0A8A        	SUB		A,	COUNT_60HZ + 5
 136  0036  3C0A        	SZ		C
 137  0037  2840        	JMP		TO_OTHER_FREQUENCY		;;no, jump to other case handling code
 138  0038  0700     R  	MOV		A,	tmp_phase
 139  0039  0A80        	SUB		A,	COUNT_60HZ - 5
 140  003A  380A        	SNZ		C
 141  003B  2840        	JMP		TO_OTHER_FREQUENCY		;;no, jump to other case handling code
 142  003C  3594        	CLR		Pb3						;;yes, 50HZ_LED off
 143  003D  3114        	SET		Pb2						;;yes, 60HZ_LED on
 144  003E  1F00     R  	CLR		tmp_phase
 145  003F  2819        	JMP 	MAIN_LOOP				;;jump to main_loop
 146  0040              	
 147  0040              TO_OTHER_FREQUENCY:
 148  0040  1F14        	CLR		PB						;;off all LEDs
 149  0041  2819        	JMP 	MAIN_LOOP				;;jump to main_loop
 150  0042              	
 151  0042              ;;-----------end of main()---------------------------
 152  0042              	
 153  0042              ;;-----------int_isr()-------------------------------
 154  0042              INT_ISR:
 155  0042  0080     R  	MOV 	acc_stack,	A			;;save ACC data
 156  0043  070A           	MOV 	A,	Status
 157  0044  0080     R  	MOV 	status_stack,	A		;;save Status registor data
"File: IO2ACPL.ASM   Holtek Cross-Assembler  Version 2.86      Page 5

 158  0045                  
 159  0045  3000     R      SET		flag_zcd_int			;;set flag of ZCD interrupt
 160  0046  3C00     R      SZ		flag_first_zcd			;;if 1st entering interrupt
 161  0047  284C            JMP		TO_2ND_INT				;;no, jump to 2nd interrupt handling code
 162  0048  1F00     R      CLR		phase_position			;;yes, clear time count within power line cycle
 163  0049  3000     R      SET		flag_first_zcd			;;set 1st entering interrupt flag
 164  004A  3212            SET		pa4						;;just for testing purpose*
 165  004B  284F            JMP		EXIT_INT_ISR			;;exit external interrupt subroutine
 166  004C                  
 167  004C              TO_2ND_INT:
 168  004C  3612        	CLR		pa4						;;just for testing purpose*
 169  004D  3400     R      CLR		flag_first_zcd			;;clear 1st entering interrupt flag
 170  004E  3400     R      CLR		flag_zcd_int			;;clear flag of ZCD interrupt
 171  004F                  
 172  004F              EXIT_INT_ISR:    
 173  004F  0700     R  	MOV 	A,	status_stack		;;restore status registor data
 174  0050  008A        	MOV 	STATUS,	A
 175  0051  0700     R  	MOV 	A,	acc_stack			;;restore ACC data
 176  0052  0004        	RETI
 177  0053              ;;-----------end of int_isr()------------------------
 178  0053              
 179  0053              ;;-----------timer_isr()-----------------------------
 180  0053              TIMER_ISR:
 181  0053  0080     R  	MOV 	acc_stack,	A			;;save ACC data
 182  0054  070A           	MOV 	A,	STATUS
 183  0055  0080     R  	MOV 	status_stack,	A    	;;save Status registor data
 184  0056              
 185  0056  3C00     R  	SZ		flag_zcd_int			;;if already openning ZCD interrupt?
 186  0057  1480     R  	INC		phase_position			;;yes, time count add one
 187  0058  1780     R  	SDZ 	us						;;us --, us == 0?
 188  0059  2862        	JMP 	EXIT_TIME_ISR			;;no, exit timer interrupt
 189  005A  0F20        	MOV 	A, 32					;;yes, reset us = 32
 190  005B  0080     R  	MOV 	us,	A	
 191  005C              	
 192  005C  1780     R  	SDZ		ms						;;ms --, ms == 0?
 193  005D  2862        	JMP 	EXIT_TIME_ISR			;;no, exit timer interrupt
 194  005E  0FFA        	MOV 	A, 250					;;yes, reset ms = 250
 195  005F  0080     R  	MOV 	ms, A
 196  0060  1080     R  	SZ		second					;;second == 0?
 197  0061  1580     R  	DEC 	second					;;no, second --
 198  0062              	
 199  0062              EXIT_TIME_ISR:
 200  0062  0700     R  	MOV 	A,	status_stack		;;restore status registor data
 201  0063  008A        	MOV 	STATUS,	A
 202  0064  0700     R  	MOV 	A,	acc_stack			;;restore ACC data
 203  0065              
 204  0065  0004        	RETI
 205  0066              ;;-----------end of timer_isr()----------------------
 206  0066              
 207  0066              ;;-----------init_special_registers()----------------
 208  0066              INIT_SPECIAL_REGISTERS:
 209  0066  0F20        	MOV		A,	00100000b			;;all PA port output besides PA5
 210  0067  0093        	MOV 	PAC,	A
 211  0068  1F15        	CLR		PBC						;;all PB port output
 212  0069  1F19        	CLR		PDC						;;all PD port output
 213  006A  1F12        	CLR		PA						;;clear all PA port
 214  006B  1F14        	CLR		PB						;;clear all PB port
 215  006C  0F9A        	MOV		A,	10011010b			;;setting timer mode, falling edge trigger, 1/4 Fsys
 216  006D  008E        	MOV		TMRC,	A				;;save to TMRC
 217  006E  0F83        	MOV		A,	131					;;timer interrupt interval: 125us=(256-131)*(1/4Mhz/4) 
"File: IO2ACPL.ASM   Holtek Cross-Assembler  Version 2.86      Page 6

 218  006F  008D        	MOV 	TMR,	A				;;save to TMR
 219  0070  1F0B        	CLR		INTC					;;disable all interrupts
 220  0071  300B        	SET		EMI						;;enable main interrrupt
 221  0072  310B        	SET		ETI						;;enable Timer interrrupt
 222  0073  308B        	SET		EEI						;;yes, need to open ZCD interrupt
 223  0074              	
 224  0074  0003        	RET
 225  0075              ;;-----------end of init_special_registers()---------
 226  0075              	
 227  0075              ;;-----------init_general_registers()----------------
 228  0075              INIT_GENERAL_REGISTERS:
 229  0075  0F40        	MOV 	A,	RAM_SIZE			;;clear all general reigstors
 230  0076  0080     R  	MOV		loop_index,	A
 231  0077  0F00     R  	MOV		A,	OFFSET status_stack	;;point to RAM first address [40H]
 232  0078  0081        	MOV		MP0,	A
 233  0079  1F00        	CLR		R0						;;clear the RAM cell content to zero
 234  007A  1481        	INC		MP0						;;point to the next one
 235  007B  1780     R  	SDZ		loop_index				;;all cells complete?
 236  007C  2879        	JMP		$-3						;;no, to clear the next RAM cell
 237  007D              	
 238  007D  0F55        	MOV		A, 055H
 239  007E  0080     R  	MOV		flag_055h,	A			;;written reset flag1 (55H)
 240  007F  0FAA        	MOV		A, 0AAH
 241  0080  0080     R  	MOV 	flag_0aah,	A			;;written reset flag2 (AAH)
 242  0081              	
 243  0081  0F20        	MOV 	A,	32
 244  0082  0080     R  	MOV		us,	A					;;let us = 32
 245  0083  0FFA        	MOV		A,	250
 246  0084  0080     R  	MOV		ms,	A					;;let ms = 250
 247  0085  0F01            MOV		A,	1					;;ZCD interval = 1sec.
 248  0086  0080     R      MOV		second,	A				;;let second = 1sec.
 249  0087                  
 250  0087  1F00     R  	CLR		phase_position			;;clear time count of ZCD
 251  0088  3400     R  	CLR		flag_first_zcd			;;clear first ZCD flag
 252  0089  3400     R  	CLR		flag_zcd_int			;;clear start-up ZCD flag
 253  008A  3000     R      SET		flag_zcd_rest			;;flag of non-ZCD period
 254  008B              	
 255  008B  0003        	RET
 256  008C              ;;-----------end of init_general_registers()---------
 257  008C              	
 258  008C              	END								;;main code ending


        0 Errors

⌨️ 快捷键说明

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