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

📄 dc082.asm

📁 风扇遥控。挡位
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	     dw   01110010b;01011110b;4
	     dw   11100011b;11010111b;5
	     dw   11100111b;11110111b;6
	     dw   01010001b;10011010b;7
	     dw   11110111b;11111111b;8
	     dw	  11110011b;11011111b;9
table_speed:
		;p54326789
	     dw	  00000000b
	     dw	  00000000b;00000000b;1节
	     dw	  00001000b;00010000b;2
	     dw   00001100b;00110000b;3
	     dw   00001110b;01110000b;4
	     dw   00001111b;11110000b;5
	     dw   00011111b;11111000b;6
	     dw   00111111b;11111100b;7
	     dw   01111111b;11111110b;8
	     dw   11111111b;11111111b;9
;table_zcf:
	     ;dw   00000010b
	     ;dw   00000010b;01010000b;1普通风风轮显示表P1、P10保持点亮
	     ;dw   00000110b;01110000b;2
	     ;dw   10000110b;01110001b;3
	     ;dw   11000110b;01110011b;4
	     ;dw   11100110b;01110111b;5
	     ;dw   11100111b;11110111b;6
	     ;     345  216
	     ;dw	   01000010b
	     ;dw	   00100100b
	     ;dw	   10000001b
	     
table_key: 
             dw       0
             dw       10;ion
             dw       30;sw
             dw       45;hum
             dw       65;time
             dw       79;mode
             dw       104;on	     
;=========================================================================	     
start:
		mov 	    	A,#07Fh			;Initial stack pointer and
   		b0mov 		STKP,A			;disable global interrupt	
		clr		PFLAG			;pflag = x,x,x,x,x,c,dc,z
		mov     	A,#00h			;Initial system mode
		b0mov   	OSCM,A
		B0BSET		p_speed_out
		B0BCLR		p_fan
		B0BCLR		p_hum_out
		call		init_IOport
		call		init_timer
		call    	ClrRAM			;Clear RAM;Clear watchdog timer	
		call		initvar
		call            init1621 
		jmp		main
;=======================================================================
init_IOport:	
 		MOV_1		P0UR,0ffh	;复位后为输入模式开启上拉
		MOV_1		P5UR,0ffh	
		mov_1		p4ur,11111101b
		MOV_1    	P5M,0ffh	;
		MOV_1		p0m,11100110b   ;p0.4为输入华、摄氏度检测
		MOV_1		P4M,00011000b
		
		mov_1		p0,01000000b
		mov_1		p4,00001000b
		mov_1		p5,00010000b
		ret
;-----------------------------------------------------------------------
init_timer:
		mov_1		t0m,01110000B	;t0 is fcpu/2 	
		mov_1		t0c,56;206;56		;初值56为100us
		mov_1		tc0m,01110100b   ;tc0 is fcpu/2初值自动装载使能 
		mov_1		tc0c,6;195;6          ;初值6为125us
		mov_1		tc0r,6;195;6
		clr		intrq		;清中断请求标志
		MOV_1  		INTEN,00110000B ;使能T0、TC0中断
     		ret
 ;-------------------------------------------------------------------------    		
ClrRAM:
		clr 		Y		 
		mov_1		z,7fh          ;Set @YZ address from 2fh

ClrRAM10:
		clr 		@YZ				;Clear @YZ content
		decms		Z   				;z = z - 1 , skip next if z=0
		jmp 		ClrRAM10 
		clr 		@YZ				;Clear address $00
		ret
;----------------------------------------------------------------------------------		
initvar:
		mov_1		r_2ms_cnt,c_2ms_cntinit
		b0bset		ftc0enb		;开启TC0
		b0bset		ft0enb 		;开启T0
		b0bset          FGIE  		;Enable global interrupt
init_f_c:		
                mov_1		wdtr,5ah
		b0bts1		p_c_f
		jmp		init_f_c10
		bclr		b_f
		jmp		init_f_c20
init_f_c10:
		bset		b_f
init_f_c20:	
		bts1		b_trigger32ms
		jmp		init_f_c
		b0bset		p0m.4          ;检测完置为输出
		mov		a,#0ffh
		b0mov		r_ledbyte1,a
		b0mov		r_ledbyte2,a
		b0mov		r_ledbyte3,a
		b0mov		r_ledbyte4,a
		b0mov		r_ledbyte5,a
		b0mov		r_ledbyte6,a
		b0mov		r_ledbyte7,a
		b0mov		r_ledbyte8,a
		b0mov		r_ledbyte9,a
		ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
int_t:
   		push
   		b0bts1		FTC0IRQ
   		JMP		INT_T0	
;------------------------------------------------------------------  		
		b0bclr  	FTC0IRQ			;Process T0 timer interrupt here
		cpjz		r_buz_time,int_tC0_10
		mov             a,#00010000b
		xor		p_buzport,a
		jmp		int_tC0_20
		
int_tC0_10:
		b0bclr		p_buz
int_tC0_20:
		call		inf_rec 		;遥控接收
		decms		r_2ms_cnt
		jmp		int_end
		mov_1		r_2ms_cnt,c_2ms_cntinit
		mov_2		r_trigger_byte,r_blink_byte
		mov_2		r_trigger_byte1,r_blink_byte1
		incms    	r_blink_byte
        	jmp     	int_tC0_30
        	incms    	r_blink_byte1
        	nop
int_tC0_30:
		b0mov    	a,r_blink_byte
        	xor      	r_trigger_byte,a
       		b0mov    	a,r_blink_byte1
        	xor      	r_trigger_byte1,a
        	bts0		b_trigger4ms
        	bset		b_time_4ms
        	bts0		b_trigger8ms
        	bset		b_time_8ms
        	bts0		b_trigger16ms
        	bset		b_16ms
        	bts0		b_trigger64ms
        	bset		b_time_64ms
        	bts0		b_trigger500ms
        	bset		b_time_500ms
        	bts0		b_trigger1s
        	bset		b_time_1s
        	bts0		b_trigger32ms
        	bset		b_time_32ms
		JMP		int_end
;-----------------------------------------------------------------------------	
INT_T0:
            	b0bts1		FT0IRQ
            	jmp		int_end
            	b0bclr		FT0IRQ
            	mov_1		t0c,56;206;56		;重装初值---------------------------------------------------------
		b0bts0		p_zero
		bclr		b_zero_low
		b0bts0		p_zero
		jmp		int_end
		bts0		b_zero_low
		jmp		int_t0_20
		bset		b_zero_low
		mov_2		r_timezero,r_timezero_buf;下降沿查表得出触发时间值
int_t0_20:                
		cpjz		r_timezero,int_t0_30
                decms     	r_timezero
                nop
                b0mov     	a,r_timezero
                sub     	a,#8
                b0bts1     	fc
                b0bclr     	p_speed_out               
                b0bts0      	fc
int_t0_30:                
                b0bset     	p_speed_out;r_timezero=0关输出
int_end:
		pop					
		reti						
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4
main:
		mov_1		wdtr,5ah
		b0bclr		p_backled
		call		lcdupdata 
		bts1		b_time_1s
		jmp		main
		bclr		b_time_1s
		b0bset		p_backled
		mov_1		r_buz_time,c_buz_long
main_00:

		mov_1		wdtr,5ah
		bts1		b_time_4ms
		jmp		main_01
		bclr		b_time_4ms
		call		flash
		call		watercheck
		call		buz
		call     	read_key        ;短按键判断
       	        call     	read_keylong    ;长按键判断
       	       	call		ad_temp
       	       	call		Accept
       	       	call		Accept_long
       	       	call		swtime		;摇头时间处理
       	      	call     	clock
       	      	call		timecenter
       	       	call     	logic
       	       	call     	driver
main_01:       	       	
		bts1		b_time_32ms
		jmp		main_001
		bclr		b_time_32ms
		call		ad_deal
		call		ledkeyscan
main_001:
       	       	bts1		b_time_64ms
       	       	jmp		main_02
       	       	bclr		b_time_64ms
main_000:   
       	        call    	displaydata
       	       	call		lcdupdata
main_02:
		;bts1		b_time_125ms
		;jmp		main_03
		;bclr		b_time_125ms
		;incms		r_zcfdispay_cnt
       	       	;nop
       	       	;b0mov		a,r_zcfdispay_cnt
       	        ;cmprs		a,#3
       	       	;jmp		main_03
       	       	;clr		r_zcfdispay_cnt
main_03:
		bts1		b_time_500ms
		jmp		main_00
		bclr		b_time_500ms
		call		displaytime     ;图标显示时间处理		
		call		delay_off	;延时关机
		jmp		main_00
		
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
buz:
                cpjz     	r_buz_time,buz1 ;鸣叫时间是否为0
               	decms      	r_buz_time
              	jmp       	buz_ret
buz1:
               	cpjz     	r_buz_count,buz_ret;鸣叫次数是否为0
               	cpjnz    	r_buz_timecnt,buz_ret;鸣叫间隔时间是否到
               	decms      	r_buz_count
               	jmp		buz2
               	ret
buz2:               
               	mov_1       	r_buz_timecnt,c_buz_timecnt
               	mov_1      	r_buz_time,c_buz_short
buz_ret:
               	ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
flash:
               	cpjz    	r_buz_timecnt,flash10
               	decms      	r_buz_timecnt
               	nop
flash10:
		incms      	r_flashcnt1
		nop
               	incms      	r_flashcnt
               	nop
               	b0mov		a,r_flashcnt
               	xor		a,#128
               	b0bts1		fz
               	jmp		flash_ret
               	cpjz		r_settime,flash_ret
               	decms		r_settime
               	nop
flash_ret:               
               	ret  
;$$$$$$$$$$$$$$$$$$$$$$$$遥控接收$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
inf_rec:
               incms         R_REC_TIME
               nop
               b0bts0        p_rec
	       JMP           INT_REC_1
	       B0BTS0	     B_REC_LOW
	       JMP           inf_rec_ret
	       B0BSET	     B_REC_LOW		;低电平标志
	       CLR           R_REC_TIME
	       JMP           inf_rec_ret
INT_REC_1:	
	       B0MOV	     A,R_REC_TIME
	       SUB           A,#40		;高电平大于5MS时完成一帧
	       B0BTS0	     FC
	       JMP           INT_REC_ERROR
	       B0BTS1	     B_REC_LOW
	       JMP           inf_rec_ret
	       B0BCLR        B_REC_LOW		;清低电平标志
	       B0MOV	     A,R_REC_TIME
	       SUB           A,#16		;低电平大于2ms时出错
	       B0BTS0	     FC
	       JMP           INT_REC_ERROR
	       B0MOV         A,R_REC_TIME
	       SUB           A,#07		;低电平小于0.875ms时为0
	       RLCM	     r_data_low
	       RLCM          r_data_hig
	       DECMS         R_REC_CNT
	       JMP	     inf_rec_ret
	       B0MOV	     A,r_data_hig
	       CMPRS	     A,#00001101B
	       JMP           INT_REC_ERROR
	       B0MOV	     A,r_data_low
	       B0MOV	     R_REC_CODE,A
	       B0BSET	     B_REC_FINISH
	       CLR           R_REC_REPEAT_CNT
	       b0mov         a,r_remote_cnt   ;长按键记数
               sub           a,#150
               b0bts1        fc               ;大于50=1s不加
               incms         r_remote_cnt
               nop
	       JMP           inf_rec_ret
INT_REC_ERROR:
	       MOV           A,#12		;重新接收12个数据
	       B0MOV	     R_REC_CNT,A
	       CLR           r_data_low
inf_rec_ret:
      
              ret   
;$$$$$$$$$$$$$$$$$$$$$取遥控键值$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Accept:
		INCMS	        R_REC_REPEAT_CNT
                NOP
                B0MOV	        A,R_REC_REPEAT_CNT
                SUB	        A,#25
                B0BTS1	        FC
                jMP	        CODE_5104_10
                B0BCLR	        B_REC_REPEAT
	        b0bclr		b_keylong1
	        clr		r_remote_cnt
CODE_5104_10:
	        B0BTS1	        B_REC_FINISH
	        JMP	        accept90
	        B0BCLR	        B_REC_FINISH
	        B0BTS0	        B_REC_REPEAT
	        JMP	        accept90
	        B0BSET	        B_REC_REPEAT

	        mov    		a,#10100000b;00100011b
      		xor    		a,R_REC_CODE
      		b0bts0		fz
      		jmp		deal_keyonoff 		    ;k4

      		mov    		a,#10000001b;00000011b
      		xor    		a,R_REC_CODE
      		b0bts0		fz
      		jmp		deal_keyhum		
accept100:
      		bts1   		b_run
                jmp		accept90 
      		mov    		a,#10010000b;00010011b
      		xor  		a,R_REC_CODE
      		b0bts0		fz
      		jmp    		deal_keymode	 	    ;k5 timer
	
      		mov    		a,#10000010b;00000011b
      		xor    		a,R_REC_CODE
      		b0bts0		fz
      		jmp		deal_keysw		    ;k2 swing
      		
      		mov    		a,#10001000b;00000011b
      		xor    		a,R_REC_CODE
      		b0bts0		fz
      		jmp		deal_keyflz

      		mov    		a,#10000100b;01000011b	;K3
      		xor 		a,R_REC_CODE
      		b0bts0		fz
      		jmp    		deal_keytime           ;on/off

accept70:
	        B0BCLR	        B_REC_REPEAT          ;接收码错误,重接           
accept90:
      		ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Accept_long:
                b0mov           a,r_remote_cnt
                sub             a,#70;150   ;第一次按键时间大于3S=150*20(每一帧码接收完需要20ms)
                b0bts1          fc
                jmp             Accept_longret
		mov		a,#10000100b
		xor		a,R_REC_CODE
		b0bts1		fz
		jmp		Accept_long10
		bset            b_keylong1 ;遥控长按标志
		mov_1		r_remote_cnt,60
		jmp		deal_keytime 
Accept_long10:  
		b0mov           a,r_remote_cnt
                sub             a,#150   ;第一次按键时间大于3S=150*20(每一帧码接收完需要20ms)
                b0bts1          fc
		jmp		Accept_longret
                mov             a,#10100000b;是否关机键
                xor             a,R_REC_CODE
                b0bts1          fz
                jmp		Accept_longret
                bset            b_keylong1
                mov_1		r_remote_cnt,151
                jmp		read_keylong20
Accept_longret:
		ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
watercheck:
		bts1		p_waterkeyline;低电平为正常
		jmp		watercheck10
		clr		r_waterkeycnt1
		incms           r_waterkeycnt ;缺水时waterkeycnt加1 
		nop
		bts1		r_waterkeycnt.7
		jmp		watercheck_ret
		mov_1		r_waterkeycnt,01111111b
		bset		b_waterkey_err
		jmp		watercheck_ret
watercheck10:
		clr		r_waterkeycnt
		incms           r_waterkeycnt1  
		nop

⌨️ 快捷键说明

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