************************************************************************* * * * Electric Vehicle Computer - motor speed control * * Name: metrol.asm date 6/24/97 600A * * Copyright 1997 - 2006 Mark E. Hanson All Rights Reserved * * * ************************************************************************* ************************************************************************* * * * Set up Port names to be recognized in program * * * ************************************************************************* porta equ 0 ;Porta is register 0 portb equ 1 ;Portb is register 1 ddra equ 4 ;data direction registers ddrb equ 5 ************************************************************************* * * * Port line pin definitions * * * ************************************************************************* * Flags * INS pot equ 0 ; a-d * OUTS led equ 7 ;Portb led for interrupt current limit bypass equ 5 ;portb bypass contactor safety high peddle lockout control pwm equ 6 ;Portb pwm output * Mode button is interrupt line cop equ $ffff ;cop register copd equ 0 ;cop control bit ptapue equ $0b ;porta pullups if used config2 equ $1e ;osc control register oscstat equ $36 ;osc status register & control osc2 equ 4 ;porta bit 4 is osc2 output for start ecgon equ 1 ;external clock gen bit intscr equ $1d ;external interrupt status & control register mode1 equ 0 ;interrupt level sensitive ack1 equ 2 ;IRQ acknowledge bit irqen equ 6 ;interrupt enable bit config1 equ $1f lvi5or3 equ 3 ;low voltage reset control for 5 or 3 Volts ************************************************************************* * * * RAM register locations * * * ************************************************************************* acr equ $3c ;a/d control register arr equ $3e ;a/d result register adclk equ $3f ;ad clock * RAM: org $80 outer rmb 1 ;firmware timer delay registers middle rmb 1 inner rmb 1 ton rmb 1 ;time on pwm toff rmb 1 ;time off pwm ************************************************************************* * * * Set up vector registers for reset/interrupts * * * ************************************************************************* * Timer vector set org $fff2 ;timer vector interrupt fdb $ee00 fdb $ee00 fdb $ee00 ;set to reset location for safety since not used fdb $5555 ;security bits to prevent program theft org $fffa fdb $fd00 ;external interrupt vector fdb $ee00 ;SWI same as timer fdb $ee00 ;reset vector * External Interrupt Routine org $fd00 bclr pwm,portb bset led,portb bset ack1,intscr ;request interrupt acknowledge reset rti * Timer Interrupt Routine ************************************************************************* * * * Main Program * * * ************************************************************************* * Initialize port bits org $ee00 sei clr porta ;clear port data registers clr portb clr ddra clr ddrb mov #$30,adclk ;divide by two for adclk bset led,ddrb ;set ddrb led to output bset pwm,ddrb ; bset bypass,ddrb ;option bset led,portb ;blink led mov #pot,acr ;select a/d ; start external oscillator bset osc2,porta ;set high for several cycles mov #%01011000,config2 ;set osc1 and osc2 for extern int nop ;bit 6 in config2 enables external interrupts nop bclr osc2,porta clrx stx cop ldx #!1 jsr wait bset ecgon,oscstat ;external clock gen bit bset lvi5or3,config1 ;set for 5V low voltage reset reset bset led,portb ldx #!10 ;1/2 sec delay jsr wait ; bset mode1,intscr ;make level sensitive option cli ;activate interrupt lockout mov #pot,acr ;high peddle lockout locloop brclr 7,acr,locloop lda arr stx cop cmp #!20 bhi reset * Program peddle bclr pwm,portb ; bclr bypass,portb ;turn off bypass if on bclr led,portb ad mov #pot,acr anal brclr 7,acr,anal ;read pot lda arr stx cop cmp #!15 ;if pot below lim then off blo peddle cmp #!246 ;if pot above lim then wire broken = off bhi peddle cmp #!212 bhi byp ;if above 212 then goto full on (was 166) sub #!13 ;was 7 sta ton ;set ton pwm 1.1 kHz 2usec per count lda #!200 ;was 169 sub ton sta toff ;set toff pwm back deca bne back stx cop bset pwm,portb lda ton back2 deca bne back2 stx cop bra peddle byp ;bset bypass,portb ;turn on bypass contactor if above hi count bra ad wait stx outer mov #!249,inner flip3 mov #!66,middle flip2 ldx inner flip1 dbnzx flip1 stx cop ;reset cop dbnz middle,flip2 dbnz outer,flip3 rts * That's all Folks! end