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

📄 rx.asm

📁 用于遥控车控制。包括发射接受两个部分。采用台湾系列单片机
💻 ASM
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////
//filename:	rx.asm
//auther:	zzr
//purpose:	for remote control car
//date:		2005.4.13
//checksum:	41bfh	
////////////////////
list	P=69P42
romsize=3*1024


///////////////////////////////////
//	system register define
///////////////
	ORG	00H
inten		equ 	00h
intrq		equ	01h
tc0m		equ	02h
tc1m		equ	03h
tc0l		equ	04h
tc0h		equ	05h
tc1l		equ	06h
tc1h		equ	07h
pa		equ	08h
pb		equ	09h
pc		equ	0ah
pd		equ	0bh
pe		equ	0ch
//reserve	equ	0dh
tbr		equ	0eh
inx		equ	0fh
dpl		equ	10h
dpm		equ	11h
dph		equ	12h
adcnum		equ	13h
adcchn		equ	14h
addl		equ	15h
addh		equ	16h
adctim		equ	17h
pam		equ	18h
pbm		equ	19h
pcm		equ	1ah
pdm		equ	1bh
pem		equ	1ch
//reserve	equ	1dh
t0set		equ	1eh
wdtr		equ	1fh
pwm0m		equ	20h
pwm1m		equ	21h
pp0l		equ	22h	//pwm0 period
pp0m		equ	23h
pp0h		equ	24h
pd0l		equ	25h	//pwm0 duty 
pd0m		equ	26h
pd0h		equ	27h
pp1l		equ	28h	//pwm1 period
pp1m		equ	29h
pp1h		equ	2ah
pd1l		equ	2bh	//pwm1 duty
pd1m		equ	2ch
pd1h		equ	2dh
//reserve	equ	2eh
//reserve	equ	2fh

INTEN		EQU 	00H
INTRQ		EQU	01H
TC0M		EQU	02H
TC1M		EQU	03H
TC0L		EQU	04H
TC0H		EQU	05H
TC1L		EQU	06H
TC1H		EQU	07H
PA		EQU	08H
PB		EQU	09H
PC		EQU	0AH
PD		EQU	0BH
PE		EQU	0CH
//RESERVE	EQU	0DH
TBR		EQU	0EH
INX		EQU	0FH
DPL		EQU	10H
DPM		EQU	11H
DPH		EQU	12H
ADCNUM		EQU	13H
ADCCHN		EQU	14H
ADDL		EQU	15H
ADDH		EQU	16H
ADCTIM		EQU	17H
PAM		EQU	18H
PBM		EQU	19H
PCM		EQU	1AH
PDM		EQU	1BH
PEM		EQU	1CH
//RESERVE	EQU	1DH
T0SET		EQU	1EH
WDTR		EQU	1FH
PWM0M		EQU	20H
PWM1M		EQU	21H
PP0L		EQU	22H	//PWM0 PERIOD
PP0M		EQU	23H
PP0H		EQU	24H
PD0L		EQU	25H	//PWM0 DUTY 
PD0M		EQU	26H
PD0H		EQU	27H
PP1L		EQU	28H	//PWM1 PERIOD
PP1M		EQU	29H
PP1H		EQU	2AH
PD1L		EQU	2BH	//PWM1 DUTY
PD1M		EQU	2CH
PD1H		EQU	2DH
//RESERVE	EQU	2EH
//RESERVE	EQU	2FH

///////////////////////////////////
//	data variable define
////////////////////////////
aBuf		equ	30h
temp		equ	31h
t1ms		equ	32h
t10ms		equ	33h
t100ms		equ	34h
t1s		equ	35h
fTimer		equ	36h
	//fT1ms		equ	36h.0
	//fT10ms	equ	36h.1
	//fT100ms	equ	36h.2
	//fT1s		equ	36h.3
cntKeyPrs	equ	37h
keyNum		equ	38h
keyNumBuf	equ	39h
cntTem1		equ	3ah
cntTem2		equ	3bh
cntTem3		equ	3ch
fSys		equ	3dh
	//fOvrLod	equ	3dh.0
	//fChnGet	equ	3dh.1
	

recDlrH		equ	3eh
recDlrL		equ	3fh
recDgbH		equ	40h
recDgbL		equ	41h
cntRecDat	equ	42h
fRec		equ	43h
	//fRecHed	equ	43h.0
	//fRecOne	equ	43h.1
	//fRecZer	equ	43h.2
temp1		equ	44h
temp2		equ	45h
temp3		equ	46h
fSysErr		equ	47h
	//fRecErr	equ	47h.0	
pdBufH		equ	48h
pdBufM		equ	49h
pdBufL		equ	4ah	
cntErr		equ 	4bh
chnNum		equ	4ch
t10s		equ	4dh
t1m		equ	4eh
t10m		equ	4fh
t1h		equ	50h
fTimer1		equ	51h
	//fT1s1		equ	51h.0
t100msTem	equ	52h	
fSoft		equ	53h
	//fSoftLr	equ	bit0
	//fSoftGb	equ	bit1
t10msTem1	equ	54h
t10msTem2	equ	55h
fDirSav		equ	56h
	//fGoSav	equ	bit0
	//fBakSav	equ	bit1
	//fLftSav	equ	bit2
	//fRgtSav	equ	bit3
t100msTem1	equ	57h
t100msTem2	equ	58h
recVrf		equ	59h

////////////////////////////////////
//	macro	set
////////////////////////////
///////////////////
//	system define macro set
PORTSET		macro
	ldi	pam,	1100b
	ldi	pa,	0
	ldi	pbm,	1111b
	ldi	pb,	0
	ldi	pcm,	1111b
	ldi	pc,	0
	ldi	pdm,	1011b
	ldi	pd,	0
	ldi	pem,	1111b
	ldi	pe,	0
	endm
TIME0SET	macro
	ldi	tc0m,		0101b
	ldi	tc0l,		06h
	ldi	tc0h,		00h
	endm
TIME1SET	macro
	ldi	tc1m,		0101b
	ldi	tc1l,		06h
	ldi	tc1h,		00h
	endm
PWM0SET		macro
	ldi	pp0h,		0
	ldi	pp0m,		03h
	ldi	pp0l,		0fh
	ldi	pd0h,		0
	ldi	pd0m,		0
	ldi	pd0l,		0
	ldi	pwm0m,		0111b
	endm
PWM1SET		macro
	ldi	pp1h,		0
	ldi	pp1m,		03h
	ldi	pp1l,		0fh
	ldi	pd1h,		0
	ldi	pd1m,		0
	ldi	pd1l,		0
	ldi	pwm1m,		0111b
	endm
	
ADCSET		macro
	endm
INTSET		macro
	ldi	intrq,		0
	endm	
wdtRstSet	macro	
	ldi	wdtr,	0011b
	endm	
/////////////////////////////////////////////
//	flag operation set 
fT1msSet	macro
	orim	fTimer,		0001b
	endm
fT1msClr	macro
	andim	fTimer,		1110b
	endm
fT10msSet	macro
	orim	fTimer,		0010b
	endm
fT10msClr	macro
	andim	fTimer,		1101b
	endm
fT100msSet	macro
	orim	fTimer,		0100b
	endm
fT100msClr	macro
	andim	fTimer,		1011b
	endm
fT1sSet		macro
	orim	fTimer,		1000b
	endm
fT1sClr		macro
	andim	fTimer,		0111b
	endm
fT1s1Set	macro
	orim	fTimer1,	0001b
	endm
fT1s1Clr	macro
	andim	fTimer1,	1110b
	endm

fRecErrSet	macro
	orim	fSysErr,	0001b
	endm
fRecErrClr	macro
	andim	fSysErr,	1110b
	endm

fOvrLodSet	macro
	orim	fSys,		0001b
	endm
fOvrLodClr	macro
	andim	fSys,		1110b
	endm	
	
fChnGetSet	macro
	orim	fSys,		0010b
	endm
fChnGetClr	macro
	andim	fSys,		1101b
	endm	

fRecBitErrSet	macro
	ldi	fRec,		0000b
	endm
fRecHedSet	macro
	ldi	fRec,		0001b
	endm
fRecOneSet	macro
	ldi	fRec,		0010b
	endm
fRecZerSet	macro
	ldi	fRec,		0100b
	endm
fSoftLrSet	macro	
	orim	fSoft,		0001b
	endm
fSoftLrClr	macro	
	andim	fSoft,		1110b
	endm
fSoftGbSet	macro	
	orim	fSoft,		0010b
	endm
fSoftGbClr	macro	
	andim	fSoft,		1101b
	endm
fGoSavSet	macro
	orim	fDirSav,	0001b
	endm
fGoSavClr	macro
	andim	fDirSav,	1110b
	endm
fBakSavSet	macro
	orim	fDirSav,	0010b
	endm
fBakSavClr	macro
	andim	fDirSav,	1101b
	endm
fLftSavSet	macro
	orim	fDirSav,	0100b
	endm
fLftSavClr	macro
	andim	fDirSav,	1011b
	endm
fRgtSavSet	macro
	orim	fDirSav,	1000b
	endm
fRgtSavClr	macro
	andim	fDirSav,	0111b
	endm
		
/////////////////////////////////////////////////
//	system operation macro set
//////////////////////////
motGoSet	macro
	orim	pb,		0100b
	endm
motGoClr	macro
	andim	pb,		1011b
	endm
motBakSet	macro
	orim	pb,		1000b
	endm
motBakClr	macro
	andim	pb,		0111b
	endm
motLftSet	macro
	orim	pd,		0001b
	endm
motLftClr	macro
	andim	pd,		1110b
	endm
motRgtSet	macro
	orim	pd,		0010b
	endm
motRgtClr	macro
	andim	pd,		1101b
	endm

getSet		macro
	orim	pc,		1000b
	endm
getClr		macro	
	andim	pc,		0111b
	endm
	
rfEnbSet	macro
	orim	pc,		0010b
	endm
rfEnbClr	macro	
	andim	pc,		1101b
	endm	
//////////////////////////////////////////////////
////	bit test jmp macro set
//////////////////////////////
jb0fT100ms 	macro	symbol
	lda	fTimer,		0
	ba2	$+2
	jmp	symbol
	endm
jb1fT100ms 	macro	symbol
	lda	fTimer,		0
	ba2	symbol
	endm
jb0fT10ms	macro	symbol
	lda	fTimer,		0
	ba1	$+2
	jmp	symbol
	endm
jb1fT10ms	macro	symbol
	lda	fTimer,		0
	ba1	symbol
	endm		
jb0fT1s1	macro	symbol
	lda	fTimer1,	0
	ba0	$+2
	jmp	symbol
	endm
jb1fT1s1	macro	symbol
	lda	fTimer1,	0
	ba0	symbol
	endm		
	
jb0fChnGet	macro	symbol
	lda	fSys,		0
	ba1	$+2
	jmp	symbol
	endm
jb1fChnGet	macro	symbol
	lda	fSys,		0
	ba1	symbol
	endm		
	
jb0fRecErr	macro	symbol
	lda	fSysErr,	0
	ba0	$+2
	jmp	symbol
	endm
	
jb1fRecErr	macro	symbol
	lda	fSysErr,	0
	ba0	symbol
	endm		

jb1Data		macro	symbol
	lda	pd,		0
	ba2	symbol
	endm
jb1fSoftLr	macro	symbol
	lda	fSoft,		0
	ba0	symbol
	endm
jb0fSoftLr	macro	symbol
	lda	fSoft,		0
	ba0	$+2
	jmp	symbol
	endm
jb1fSoftGb	macro	symbol
	lda	fSoft,		0
	ba1	symbol
	endm
jb0fSoftGb	macro	symbol
	lda	fSoft,		0
	ba1	$+2
	jmp	symbol
	endm
jb0fGoSav	macro	symbol
	lda	fDirSav,	0
	ba0	$+2
	jmp	symbol
	endm
jb1fGoSav	macro	symbol
	lda	fDirSav,	0
	ba0	symbol
	endm
jb0fBakSav	macro	symbol
	lda	fDirSav,	0
	ba1	$+2
	jmp	symbol
	endm
jb1fBakSav	macro	symbol
	lda	fDirSav,	0
	ba1	symbol
	endm
jb0fLftSav	macro	symbol
	lda	fDirSav,	0
	ba2	$+2
	jmp	symbol
	endm
jb1fLftSav	macro	symbol
	lda	fDirSav,	0
	ba2	symbol
	endm
jb0fRgtSav	macro	symbol
	lda	fDirSav,	0
	ba3	$+2
	jmp	symbol
	endm
jb1fRgtSav	macro	symbol
	lda	fDirSav,	0
	ba3	symbol
	endm

///////////////////////////////////
//	mcu port define
//////////////////////
//overload	equ	pa.0
//verify	equ	pa.1
//go		equ	pb.2
//back		equ	pb.3
//enable	equ	pc.1
//pwm0		equ	pc.2
//get		equ	pc.3
//left		equ	pd.0
//right		equ	pd.1
//data		equ	pd.2
//pwm1		equ	pd.3
//d0		equ	pe.0
//d1		equ	pe.1
//d2		equ	pe.2
//d3		equ	pe.3

/////////////////////////////////////
//	code area
///////////////////////
	org 	0000h
	jmp	reset
	nop
	nop
	jmp	intT0
intT0:			//t0 timer
	sta	aBuf,	0
	sbim	t1ms,	1
	bc	intT0End
	ldi	t1ms,	9
	fT10msSet
	sbim	t10ms,	1
	bc	intT0End
	ldi	t10ms,	9
	fT100msSet
	sbim	t100ms,	1
	bc	intT0End
	ldi	t100ms,	9
	fT1sSet
	fT1s1Set
//	adim	t1s,	1
intT0End:
	ldi	intrq,	0
	ldi	inten,	0100b
	lda	aBuf
	rtni
	
///////////////////////////////////////
//	reset area 
////////////////////////////
reset:
	ldi	inten,		0
	call	ClrRam
	call	SysInit
	call	SysTest
	call	TimRst
	call	CntRst
//	fChnGetSet
//	ldi	chnNum,		10
//	sta	pe,		0
	ldi	inten,		0100b
	fChnGetClr
	ldi	chnNum,		10
	call	TimRst
	ldi	pd0h,		0
	ldi	pd0m,		0
	ldi	pd0l,		0
	ldi	pd1h,		0
	ldi	pd1m,		0
	ldi	pd1l,		0
	motLftClr
	motRgtClr
	motGoClr
	motBakClr
main:
	jb0fT10ms	main1
	fT10msClr
	wdtRstSet
	
	call	KeyScan
	call	KeyPro
	call	OvrLoadPro
main1:
	jb1fChnGet	main2
	lda	chnNum,		0
	sta	pe,		0
	
	
main2:
	call	Receiver	//receiver?
	call	RecDatPro	//process the receive data  
	jb1fChnGet	rfChnChgEnd
	jb1fRecErr	rfChnChgYn
rfChnChkEnd:
	fChnGetSet
	getSet
	jmp	main3
rfChnChgYn:
	jb0fT100ms	main3
	fT100msClr
	sbi	t100ms,		0
	baz	rfChnChgY
	jmp	rfChnChgEnd
	
rfChnChgY:
	
	
	sbi	t10s,	2
	bc	rfChnNoEnd
	lda	t1s,		0
	ba0	rfChnChgEnd
	adim	chnNum,		1
	sbi	chnNum,		11
	bnc	$+2
	ldi	chnNum,		1
rfChnChgEnd:


main3:
	
	call	MotPro		//moto process
	lda	fTimer,		0
	ba3	$+2
	jmp	main
	fT1sClr
	call	TimPro
	jmp	main
rfChnNoEnd:
	ldi	chnNum,		10
	sta	pe,		0
	getClr
	fChnGetSet
	jmp	main3
///////////////////////////////////
//	clear the ram 
/////////////////////////
ClrRam:
	ldi	dpl,	0fh	;clear the ram from 30h-bfh
	ldi	dpm,	03h
	ldi	dph,	01h
clrRam1:
	sbi	dpl,	00h
	ldi	temp,	03h
	sbc	dpm
	ldi	temp,	00h
	sbc	dph
	bnc	portInit
	ldi	inx,	00
	sbim	dpl,	01h
	bc	clrRam1
	sbim	dpm,	01h
	bc	clrRam1
	sbim	dph,	01h
	bc	clrRam1
clrRamEnd:
	rtni

///////////////////////////////////
//	system initial
////////////////////////
SysInit:
portInit:
	PORTSET
adcInit:
	ADCSET
timeInit:
	TIME0SET	
	TIME1SET
intInit:
	INTSET
pwmInit:
	PWM0SET
	PWM1SET
sysRun:
	ldi	inten,		0100b
	orim	tc0m,		1000b
sysInitEnd:
	rtni

/////////////////////////////////////
//	system test subroutine
//////////////////////////
SysTest:
sysTestEnd:
	rtni
/////////////////////////////////////////
//	key scan subroutine
///////////////////////////
KeyScan:
	orim	pa,		0010b
	lda	pa,	0	//key press?
	ba1	keyScanN		
keyScanY:
	adim	cntKeyPrs,	1	//yes

⌨️ 快捷键说明

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