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

📄 rx.asm

📁 用于遥控车控制。包括发射接受两个部分。采用台湾系列单片机
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	sbi	cntKeyPrs,	6
	bnc	keyScanEnd
	ldi	keyNum,		0001b
	ldi	cntKeyPrs,	6
	jmp	keyScanEnd
	
keyScanN:
	sbim	cntKeyPrs,	1
	bc	keyScanEnd
	ldi	cntKeyPrs,	1
	ldi	keyNum,		0000b
	ldi	keyNumBuf,	0000b
	
keyScanEnd:
	rtni
	
/////////////////////////////////////////
//	key process subroutine
///////////////////////////
KeyPro:
	lda	keyNum,		0
	baz	keyProEnd
	lda	keyNum,		0
	eor	keyNumBuf,	0
	baz	keyProEnd
	lda	keyNum,		0
	sta	keyNumBuf,	0
	sbi	keyNum,		1
	baz	keyChnScn
	jmp	keyProEnd
keyChnScn:
	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
keyProEnd:
	rtni
/////////////////////////////////////////
//	key process subroutine
///////////////////////////
OvrLoadPro:
OvrLoadProEnd:
	rtni	
/////////////////////////////////////////
//	key process subroutine
///////////////////////////
Receiver:
	rfEnbClr
	call	CntRst
//	call	TimRst
//	call	RecRst
	

	
recHedYn:
	call	RecBitPro
	lda	fTimer,		0
	ba1	recNoEnd
	lda	fRec,		0
	ba0	recDat1Yn
	baz	recHedYn
	jmp	recHedYn
recDat1Yn:
	ldi	cntRecDat,	8
	ldi	recDlrH,	0
	ldi	recDlrL,	0
recDat1Y:
	sbim	cntRecDat,	1
	bnc	recDat2Yn 
	lda	recDlrL,	0
	shr
	sta	recDlrL,	0
	lda	recDlrH,	0
	shr	
	sta	recDlrH,	0
	bnc	$+2
	orim	recDlrL,	1000b
	call	RecBitPro
	lda	fRec,		0
	ba0	recDat1Yn
	baz	recHedYn
	ba1	recDat1OneY
	ba2	recDat1ZerY
	jmp	recHedYn
recDat1OneY:
	orim	recDlrH,	1000b
	jmp	recDat1EndYn
recDat1ZerY:
	andim	recDlrH,	0111b
recDat1EndYn:

	jmp	recDat1Y
recDat2Yn:
	ldi	cntRecDat,	8
	ldi	recDgbH,	0
	ldi	recDgbL,	0
recDat2Y:
	sbim	cntRecDat,	1
	bnc	recDat2End
	lda	recDgbL,	0
	shr
	sta	recDgbL,	0
	lda	recDgbH,	0
	shr	
	sta	recDgbH,	0
	bnc	$+2
	orim	recDgbL,	1000b
	call	RecBitPro
	lda	fRec,		0
	ba0	recHedYn
	baz	recHedYn
	ba1	recDat2OneY
	ba2	recDat2ZerY
	jmp	recHedYn
	

recDat2OneY:
	orim	recDgbH,	1000b
	jmp	recDat2EndYn
recDat2ZerY:
	andim	recDgbH,	0111b
recDat2EndYn:
	jmp	recDat2Y
recDat2End:
recVrfYn:
	ldi	cntRecDat,	4
	ldi	recVrf,		0
recVrfY:
	sbim	cntRecDat,	1
	bnc	recVrfEnd
	lda	recVrf,		0
	shr
	sta	recVrf,		0
	call	RecBitPro
	lda	fRec,		0
	ba0	recHedYn
	baz	recHedYn
	ba1	recVrfOneY
	ba2	recVrfZerY
	jmp	recHedYn
	

recVrfOneY:
	orim	recVrf,		1000b
	jmp	recVrfEndYn
recVrfZerY:
	andim	recVrf,		0111b
recVrfEndYn:
	jmp	recVrfY	
recVrfEnd:
	nop			//for debug
recEnd:
	rtni
recNoEnd:
	ldi	recDlrH,	0
	ldi	recDlrL,	0
	ldi	recDgbH,	0
	ldi	recDgbL,	0
	rtni
////////////////////////////////////////////
//	receiver data process subroutine
/////////////////////////////////
RecDatPro:
	fRecErrClr
recDlrPro:
	ldi	temp,		0110b
	and	recDlrH,	0
	baz	recDlrErrYn
	ba1	$+2
	jmp	recDlrPro1
	ba2	recErr
	jmp	recDlrPro1
recDlrErrYn:
	lda	recDlrL,	0
	bnz	recErr
recDlrPro1:
	lda	recDlrH,	0
	sta	temp2,		0
	lda	recDlrL,	0
	sta	temp1,		0
	call	OddPro
	lda	temp3,		0
	baz	recErr
	lda	recDlrH,	0
	sta	temp,		0
	andim	temp,		0001b
	sbi	recDlrL,	0fh
	ldi	temp1,		1
	sbc	temp,		0
	bc	recErr
recDgbPro:
	ldi	temp,		0110b
	and	recDgbH,	0
	baz	recDgbErrYn
	ba1	$+2
	jmp	recDgbPro1
	ba2	recErr
	jmp	recDgbPro1
recDgbErrYn:
	lda	recDgbL,	0
	bnz	recErr
recDgbPro1:
	lda	recDgbH,	0
	sta	temp2,		0
	lda	recDgbL,	0
	sta	temp1,		0
	call	OddPro
	lda	temp3,		0
	baz	recErr
	lda	recDgbH,	0
	sta	temp,		0
	andim	temp,		0001b
	sbi	recDgbL,	0fh
	ldi	temp1,		1
	sbc	temp,		0
	bc	recErr
	lda	recDlrL,	0
	eor	recDlrH,	0
	eor	recDgbL,	0
	eor	recDgbH,	0
	eor	recVrf,		0
	baz	recDatProEnd

recErr:
	ldi	recDlrH,	0
	ldi	recDlrL,	0
	ldi	recDgbH,	0
	ldi	recDgbL,	0
	fRecErrSet
recDatProEnd:
	rtni

/////////////////////////////////////////
//	key process subroutine
///////////////////////////
MotPro:
	jb0fChnGet	motErrPro	//don`t get the channel,turn off the all motor

	lda	fSysErr,	0	//get the data?
	ba0	motErrPro			//no,turn off the alll motor
	jmp	motDlrProYn			//yes,process the motor
motErrPro:				//turn off the motor after 1s
	sbim	cntErr,		1
	bc	motProEnd
	ldi	cntErr,		9
	jb0fT1s1	motProEnd
	lda	t100msTem,	0
	bnz	motErrPro1
	sbi	t100ms,		2
	bc	motProEnd
	jmp	morErrStp		
motErrPro1:
	sub	t100ms,		0
	bc	motProEnd
morErrStp:
	ldi	pd0h,		0
	ldi	pd0m,		0
	ldi	pd0l,		0
	ldi	pd1h,		0
	ldi	pd1m,		0
	ldi	pd1l,		0
	motLftClr
	motRgtClr
	motGoClr
	motBakClr
	fSoftLrClr
	fSoftGbClr
	jmp	motProEnd
	
motDlrProYn:					//yes,
	ldi	cntErr,		9
	lda	t100ms,		0
	sta	t100msTem,	0
	fT1s1Clr
	lda	recDlrH,	0
	sta	pdBufM,		0
	andim	pdBufM,		0001b
	lda	recDlrL,	0
	sta	pdBufL,		0

	lda	recDlrH,	0
	ba1	motDrgtPro
	ba2	motDlftPro

motDlrStpPro:
	motLftClr
	motRgtClr
	ldi	pdBufM,		0
	ldi	pdBufL,		0
	jmp	motDlrProEnd
motDrgtPro:
	motLftClr
	jb0fSoftLr	motDrgtPro1
	motRgtSet
motDrgtPro1:
	fRgtSavSet
	jb0fLftSav	motDlrProEnd
	fLftSavClr
	jmp	motDlrStpPro

motDlftPro:
	motRgtClr
	jb0fSoftLr	motDlftPro1
	motLftSet
motDlftPro1:
	fLftSavSet
	jb0fRgtSav	motDlrProEnd
	fRgtSavClr
	jmp	motDlrStpPro
motDlrProEnd:
	lda	pdBufL,		0
	bnz	motDlrHav
	lda	pdBufM,		0
	bnz	motDlrHav
motDlrSofSet:
	motLftClr
	motRgtClr
	fSoftLrClr
	lda	t10ms,		0
	sta	t10msTem1,	0
	lda	t100ms,		0
	sta	t100msTem1,	0
	jmp	motDlrPwmGet
motDlrHav:
	jb1fSoftLr	motDlrHav1	
	lda	t10ms,		0
	sbi	t10msTem1,	0
	sta	temp2,		0
	das	temp2
	lda	t100ms,		0
	sbc	t100msTem1,	0
	sta	temp1,		0
	das	temp1
	sbi	temp2,		0
	ldi	temp,		2
	sbc	temp1,		0
	bc	motDlrSofOnYn
	ldi	pdBufL,		00h
	ldi	pdBufM,		00h
	motLftClr
	motRgtClr
	jmp	motDlrPwmGet
motDlrSofOnYn:
	sbi	temp2,		0
	ldi	temp,		5
	sbc	temp1,		0
	bc	motDlrHav1		
	ldi	pdBufL,		0fh
	ldi	pdBufM,		03h
	jb0fLftSav	motDrgtSoftYn
	motLftSet
	jmp	motDlrPwmGet
motDrgtSoftYn:
	jb0fRgtSav	motErrPro
	motRgtSet
	jmp	motDlrPwmGet
motDlrHav1:
	fSoftLrSet
	adim	pdBufL,		0fh
	ldi	temp,		1
	adcm	pdBufM,		0
motDlrPwmGet:
	ldi	pd0h,		0
	lda	pdBufM,		0
	sta	pd0m,		0
	lda	pdBufL,		0
	sta	pd0l,		0

////
motDgbProYn:
	lda	recDgbH,	0
	sta	pdBufM,		0
	andim	pdBufM,		0001b
	lda	recDgbL,	0
	sta	pdBufL,		0
	lda	recDgbH,	0
	ba1	motDbakPro
	ba2	motDgoPro
motDgbStpPro:
	motGoClr
	motBakClr
	ldi	pdBufM,		0
	ldi	pdBufL,		0
	
	jmp	motDgbProEnd

motDbakPro:
	motGoClr
	jb0fSoftGb	motDBakPro1
	motBakSet
motDBakPro1:
	fBakSavSet
	jb0fGoSav	motDgbProEnd
	fGoSavClr
	jmp	motDgbStpPro
motDgoPro:
	motBakClr
	jb0fSoftGb	motDGoPro1
	motGoSet
motDGoPro1:
	fGoSavSet
	jb0fBakSav	motDgbProEnd
	fBakSavClr
	jmp	motDgbStpPro
motDgbProEnd:
	lda	pdBufL,		0
	bnz	motDgbHav
	lda	pdBufM,		0
	bnz	motDgbHav
motDGbSofSet:
	fSoftGbClr
	motGoClr
	motBakClr
	lda	t10ms,		0
	sta	t10msTem2,	0
	lda	t100ms,		0
	sta	t100msTem2,	0
	jmp	motDgbPwmGet
motDgbHav:
	jb1fSoftGb	motDgbHav1	
	lda	t10ms,		0
	sub	t10msTem2,	0
	sta	temp2,		0
	das	temp2
	lda	t100ms,		0
	sbc	t100msTem2,	0
	sta	temp1,		0
	das	temp1
	sbi	temp2,		0
	ldi	temp,		2
	sbc	temp1,		0
	bc	motDgbSofOnYn
	ldi	pdBufL,		00h
	ldi	pdBufM,		00h
	motGoClr
	motBakClr
	jmp	motDgbPwmGet
motDgbSofOnYn:
	sbi	temp2,		0
	ldi	temp,		5
	sbc	temp1,		0
	bnc	$+2
	jmp	motDgbHav1		
	ldi	pdBufL,		0fh
	ldi	pdBufM,		03h
	jb0fGoSav	motDbakSoftYn
	motBakClr
	motGoSet
	jmp	motDgbPwmGet
motDbakSoftYn:
	jb0fBakSav	motErrPro
	motGoClr
	motBakSet
	jmp	motDgbPwmGet

motDgbHav1:
	fSoftGbSet
	lda	pdBufL,		0
	bnz	$+3
	lda	pdBufM,		0
	baz	$+4
	adim	pdBufL,		0fh
	ldi	temp,		1
	adcm	pdBufM,		0
motDgbPwmGet:
	ldi	pd1h,		0
	lda	pdBufM,		0
	sta	pd1m,		0
	lda	pdBufL,		0
	sta	pd1l,		0
		
motProEnd:
	rtni

////////////////////////////////////////////
///
////////////////////////////////
TimPro:

tim1sPro:
	adim	t1s,	1
	sbi	t1s,	0aH
	bnc	timProEnd
	ldi	t1s,	0
tim10sPro:
	adim	t10s,	1
	sbi	t10s,	06h
	bnc	timProEnd
	ldi	t10s,	0	
tim1mPro:
	adim	t1m,	1
	sbi	t1m,	0ah
	bnc	timProEnd
	ldi	t1m,	0
tim10mPro:
	adim	t10m,	1
	sbi	t10m,	06h
	bnc	timProEnd
	ldi	t10m,	0
	
tim1hPro:
	adim	t1h,	1
	
timProEnd:
	rtni	

///////////////////////////////////////////////
//	Timer reset subroutine
/////////////////////////////////		
TimRst:
	ldi	t1ms,		9
	ldi	t10ms,		9
	ldi	t100ms,		9
	ldi	t1s,		0
	ldi	t10s,		0
	ldi	t1m,		0
	ldi	t10m,		0
	ldi	t1h,		0
	ldi	fTimer,		0
	ldi	fTimer1,	0
timRstEnd
	rtni
///////////////////////////////////////////////
//	counter reset subroutine
/////////////////////////////////		
CntRst:
	ldi	cntTem1,	0
	ldi	cntTem2,	0
//	ldi	fTimer,		0
	ldi	cntRecDat,	0
//	ldi	cntKeyPrs,	3
cntRstEnd
	rtni

//////////////////////////////////////////////
//	receiver one bit process
//////////////////////////////	
RecBitPro:
	ldi	tc1l,		06h
	ldi	tc1h,		00h
	ldi	cntTem1,	0
	ldi	cntTem2,	0
recBitLowYn:
	jb1Data	recBitLowFin
//	lda	pd,		0
//	ba1	recBitLowFin
	adim	cntTem1,	1
	ldi	temp,		0
	adcm	cntTem2,	0
	bc	recBitProErr
	jmp	recBitLowYn	
recBitLowFin:
	lda	tc1h,		0
	sta	temp,		0
	sbi	temp,		1
	bnc	recBitProErr
recBitHigYn:
	adim	cntTem1,	1
	ldi	temp,		0
	adcm	cntTem2,	0
	bc	recBitProErr
	jb1Data	recBitHigYn
//	lda	pd,		0
//	ba1	recBitHigYn
	

recBitProFin:
	lda	tc1h,		0
	sta	temp,		0
	sbi	temp,		11
	bc	recBitProErr
	sbi	temp,		8
	bc	recHedSet
	sbi	temp,		5
	bc	recOneSet
	sbi	temp,		2
	bnc	recBitProErr
recZerSet:
	fRecZerSet
//	ldi	fRec,		0100b
	jmp	recBitProEnd
recOneSet:
	fRecOneSet
//	ldi	fRec,		0010b
	jmp	recBitProEnd
recHedSet:
	fRecHedSet
//	ldi	fRec,		0001b
	jmp	recBitProEnd
recBitProErr:
	fRecBitErrSet
//	ldi	fRec,		0000b
recBitProEnd:
	rtni
////////////////////////////////////
//
////////////////////////////
OddPro:
	lda	temp1,	0
	sta	temp,	0
	ldi	temp3,	0
oddProLow:
	lda	temp,	0
	shr	
	sta	temp,	0
	bc	oddProLow1
	ba0	oddProLow
	ba1	oddProLow
	ba2	oddProLow
	ba3	oddProLow
	jmp	oddProLowEnd
	
oddProLow1:
	eorim	temp3,	1
	jmp	oddProLow
	
oddProLowEnd:
oddProHigIni:
	lda	temp2,	0
	sta	temp,	0
oddProHig:
	lda	temp,	0
	shr	
	sta	temp,	0
	bc	oddProHig1
	ba0	oddProHig
	ba1	oddProHig
	ba2	oddProHig
	ba3	oddProHig
	jmp	oddProHigEnd
oddProHig1:
	eorim	temp3,	1
	jmp	oddProHig

oddProHigEnd:

oddProEnd:
	rtni
////////////////////////////////////
//	delay subroutine
////////////////////////
Dly600us:
	ldi	temp1,	15
	ldi	temp,	0fh
	sbim	temp,	1
	bc	$-1
	sbim	temp1,	1
	bc	$-3
Dly600usEnd:
	rtni	
////////////////////////////////////
//	delay subroutine
////////////////////////
Dly300us:
	ldi	temp1,	8
	ldi	temp,	07h
	sbim	temp,	1
	bc	$-1
	sbim	temp1,	1
	bc	$-3
Dly300usEnd:
	rtni	
/////////////////////////////////////
//	delay 100us subroutine
Dly100us:
	ldi	temp1,	02h
	ldi	temp,	0fh
	sbim	temp,	1
	bc	$-1
	sbim	temp1,	1
	bc	$-3
Dly100usEnd:
	rtni
	end

⌨️ 快捷键说明

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