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

📄 decoder.asm

📁 ht6221遥控解码,汇编程序!!可以用到ht48r30a里
💻 ASM
字号:
	include	ht48r30a-1.inc
; ***********************************************
; * Filename 		: 6221RECEIVER.asm       	*
; * Function 		: DECODER HT6221	      	*
; * Microprocessor  	: HT48R30A-1             	*
; * Crystal : 4MHz                              *
; ***********************************************
data	.section	'data'

card_no0		equ	 [060h]		;
card_no1           	equ     [061h]
card_no2          	equ     [062h]
card_no3           	equ     [063h]		;记录最终的数据

temp			equ		[07eh]
cint			db	?			;记录收数据bit个数的变量
count			db	?				
count_buf		db	?
int_acc		db	?			;中断保护变量
right_tou		dbit
y_bit			dbit
;-----------------------------------------
code	.section	at 0000 'code'
	org 	00h

	jmp		start
	org		04h			;中断入口地址
	jmp		do_wai
	org		08h
	jmp		do_tmr			;有time中断发生

	org		20h	
start:
	set		pgc			;中断口设为输入状态
	call		init
	mov		a, 81h			;fsys/4 1M
	mov		tmrc, a
	mov		a, 56
	mov		tmr, a			;200?s中断一次
	mov		a, 6
	mov		intc, a
	set		tmrc.4
;------------------------------------------------------
sleep:
	set		intc.0
	snz		y_bit			;判断是否有外部中断发生?
	jmp		sleep			;没有外部中断发生则继续等待
	call		decode_1		;解码
	snz		right_tou		;解码不正确,返回重来
	jmp		start           	
	mov		a, cint			
	sub		a, 32			;准备收数据的bit个数
	snz		c			;判断数据是否已收完
	jmp		sleep           	
                                	
	clr		tmrc			;收码完毕
	clr		intc
	cpla		card_no2
	xor		a, card_no3		;校验所收码是否正确
	snz		z
	jmp		error1
	jmp		start			;正确
error1:
	jmp		start			;错误
;---------------------------------
do_wai :
	clr		tmrc.4
	clr		intc.0
	mov		int_acc, a		;入中断保护,push acc值暂存
	mov		a, count
	mov		count_buf, a
	clr		count
	set		y_bit
over_int:
	mov		a, 56
	mov		tmr, a
	mov		a, int_acc		;pop acc值
	set		tmrc.4
	set		intc.0
	reti
;----------------------
do_tmr:
	inc		count
	reti
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
decode_1 proc
	clr		intc.0
	clr		y_bit
	snz		right_tou
	jmp		judge_touma
	mov		a, count_buf
	sub		a, 4
	snz		c
	jmp		error			;data值小于200?s*4=800?s判断错误
	mov		a, count_buf		
	sub		a, 13
	sz		c
	jmp		error			;data值大于200?s*13=2.6ms判断错误
	mov		a, count_buf		;data值大于200?s*8=1.6ms
	sub		a, 8			;c=1, data=1
		;data值小于200?s*8=1.6ms  c=0, data=0
	rrc		card_no3
	rrc		card_no2
	rrc		card_no1
	rrc		card_no0
	inc		cint			;记录收到的BIT位数
	ret
error:
	clr		count
	clr		right_tou
	ret	
judge_touma:
	clr		right_tou		;头码判断13.50ms 
	mov		a, count_buf
	sub		a, 70			;200*70=14ms
	sz		c
	ret					;头码大于14ms判断错误
	mov		a, count_buf
	sub		a, 63			;63*200=12.6ms
	snz		c
	ret					;头码小于12.6ms判断错误
	set		right_tou
	ret
decode_1 endp
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Function :	init
;Purpose  :	clear ram value
;Parameter:	
;Return   :
;Modified :	acc, status
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
init proc
	clr		intc			;清中断
	mov		a, 20h
	mov		mp0, a
	mov		a, 5fh
	mov		temp, a
ram_clr:					;清RAM
	clr		r0
	inc		mp0
	sdz		temp
	jmp		ram_clr
	ret
init endp

⌨️ 快捷键说明

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