📄 sensor.asm
字号:
;
; Security System/Sensor Module/Remote Control sensor/
; /1.1.1/sensor test program
;======================================================
REGBASE equ $0000
RAMBASE equ $3800
INITRM equ $0010 ; RAM Position
INITRG EQU $0011 ; Register position
SYNR equ $34
REFDV equ $35
CRGFLG equ $37
CLKSEL equ $39
PLLCTL equ $3A
COPCTL equ $3c
PORTT equ $0240
DDRT equ $0242
PTRX equ $01 ;PORTTinput pin from IR
PTRX2 equ $02 ;PT0 and PT1
EN equ $04 ;PORTToutput pin to HBridge
A1 equ $08
A2 equ $10
A3 equ $20
A4 equ $40
SCIBDH equ $00C8
SCIBDL equ $00C9
SCICR1 equ $00CA
SCICR2 equ $00CB
SCISR1 equ $00CC
SCISR2 equ $00CD
SCIDRH equ $00CE
SCIDRL equ $00CF
org $3800
COUNT rmb 1
org $8000 ; start of program memory
BadInt ; handle UNexpected interrupts...
rti
startup_code
sei ; Disable interrupts
movb #$00,INITRG ; set registers to $0000
movb #$39, INITRM ; init RAM ($3800 - $3fff)
lds #$3fce ; init stack
cli ; enable interrupts
bclr CLKSEL, #$80 ; disengage PLL to system
bset PLLCTL, #$40 ; turn on PLL
movb #$2, SYNR ; set PLL multiplier
movb #$0, REFDV ; set PLL divider
nop
nop
brclr CRGFLG, #$08, >*+0 ; while (!(crg.crgflg.bit.lock==1))
bset CLKSEL, #$80 ; engage PLL to system
movb #$40, COPCTL ; COP off; RTI and COP stopped in BDM-mode
movb #$FC, DDRT ;make port T I/O port
;0=input, 1=output
LDX #$009C ;SET SCI
STX SCIBDH
LDAA #$0C
STAA SCICR2 ;TE and RE enabled
;------------------------------------------------------------------
; User Program
bset PORTT,EN
START:
brclr SCISR1,$20,START
LDAA SCIDRL
CMPA #$20
BEQ USER_START
BRA START
USER_START:
Bclr SCISR1,$20
brclr SCISR1,$20,INI
LDAA SCIDRL
CMPA #$20
BEQ START
BRA INI
INI:
LDAA #$00
LDAB #$00
CHECK_STARTBIT:
BRSET PORTT,#PTRX,CHECK_STARTBIT
JSR d_1ms
BRCLR PORTT,#PTRX,inccount1
JMP inccount0
inccount1:
INCA
LDAB #$31
JSR TX
CMPA #13
BEQ DONE
stay1: BRSET PORTT,#PTRX,CHECK_STARTBIT
bra stay1
inccount0:
INCA
LDAB #$30
JSR TX
CMPA #13
BEQ DONE
stay2: BRSET PORTT,#PTRX,CHECK_STARTBIT
bra stay2
DONE:
LDAB #$20
JSR TX
JSR d_200ms
JMP USER_START
TX: brclr SCISR1,$80,TX ; TX VIA RS232
STAB SCIDRL
rts
;==========================================================
d_100us: ldab #100 ; delay 100 us
jmp dly2
d_80us: ldab #80 ; delay 80 us
jmp dly2
d_190us: ldab #180
jmp dly2
d_200us: ldab #200
jmp dly2
dly2: ldy #6 ; (6 = 1us @ 24,000 cycles)
dly3: dey ; 1 cycle
bne dly3 ; 3 cycles
decb
bne dly2
rts
d_1ms: ldab #1 ; delay 1 ms
jmp dly1
d_2ms: ldab #2 ; delay 1 ms
jmp dly1
d_50ms: ldab #50 ; delay 50ms
jmp dly1
d_200ms: ldab #200 ; delay 200ms
jmp dly1
dly1: ldy #6000 ; (6000 = 1ms @ 24,000 cycles)
dly: dey ; 1 cycle
bne dly ; 3 cycles
decb
bne dly1
rts
; ------------------ VECTOR TABLE --------------------
org $FF8A
fdb BadInt ;$FF8A: VREG LVI
fdb BadInt ;$FF8C: PWM emergency shutdown
fdb BadInt ;$FF8E: PortP
fdb BadInt ;$FF90: Reserved
fdb BadInt ;$FF92: Reserved
fdb BadInt ;$FF94: Reserved
fdb BadInt ;$FF96: Reserved
fdb BadInt ;$FF98: Reserved
fdb BadInt ;$FF9A: Reserved
fdb BadInt ;$FF9C: Reserved
fdb BadInt ;$FF9E: Reserved
fdb BadInt ;$FFA0: Reserved
fdb BadInt ;$FFA2: Reserved
fdb BadInt ;$FFA4: Reserved
fdb BadInt ;$FFA6: Reserved
fdb BadInt ;$FFA8: Reserved
fdb BadInt ;$FFAA: Reserved
fdb BadInt ;$FFAC: Reserved
fdb BadInt ;$FFAE: Reserved
fdb BadInt ;$FFB0: CAN transmit
fdb BadInt ;$FFB2: CAN receive
fdb BadInt ;$FFB4: CAN errors
fdb BadInt ;$FFB6: CAN wake-up
fdb BadInt ;$FFB8: FLASH
fdb BadInt ;$FFBA: Reserved
fdb BadInt ;$FFBC: Reserved
fdb BadInt ;$FFBE: Reserved
fdb BadInt ;$FFC0: Reserved
fdb BadInt ;$FFC2: Reserved
fdb BadInt ;$FFC4: CRG self-clock-mode
fdb BadInt ;$FFC6: CRG PLL Lock
fdb BadInt ;$FFC8: Reserved
fdb BadInt ;$FFCA: Reserved
fdb BadInt ;$FFCC: Reserved
fdb BadInt ;$FFCE: PORTJ
fdb BadInt ;$FFD0: Reserved
fdb BadInt ;$FFD2: ATD
fdb BadInt ;$FFD4: Reserved
fdb BadInt ;$FFD6: SCI Serial System
fdb BadInt ;$FFD8: SPI Serial Transfer Complete
fdb BadInt ;$FFDA: Pulse Accumulator Input Edge
fdb BadInt ;$FFDC: Pulse Accumulator Overflow
fdb BadInt ;$FFDE: Timer Overflow
fdb BadInt ;$FFE0: Standard Timer Channel 7
fdb BadInt ;$FFE2: Standard Timer Channel 6
fdb BadInt ;$FFE4: Standard Timer Channel 5
fdb BadInt ;$FFE6: Standard Timer Channel 4
fdb BadInt ;$FFE8: Standard Timer Channel 3
fdb BadInt ;$FFEA: Standard Timer Channel 2
fdb BadInt ;$FFEC: Standard Timer Channel 1
fdb BadInt ;$FFEE: Standard Timer Channel 0
fdb BadInt ;$FFF0: Real Time Interrupt (RTI)
fdb BadInt ;$FFF2: IRQ (External Pin or Parallel I/O) (IRQ)
fdb BadInt ;$FFF4: XIRQ (Pseudo Non-Maskable Interrupt) (XIRQ)
fdb BadInt ;$FFF6: Software Interrupt (SWI)
fdb BadInt ;$FFF8: Illegal Opcode Trap ()
fdb startup_code ;$FFFA: COP Failure (Reset) ()
fdb BadInt ;$FFFC: Clock Monitor Fail (Reset) ()
fdb startup_code ;$FFFE: /RESET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -