?? rx.asm
字號:
///////////////////////////////////////////////
//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 + -