; MazeRunner II Version 1.4 10/24/02 .nolist .include "c:\avrtools\AppNotes\m128def.inc" .list ;------ Display Commands ------------------------------------ .equ cmdClearDisplay = 0x80 ;To distingish these commands from .equ cmdGotoLine1 = 0x81 ;standard ASCII, the MSB is set. .equ cmdGotoLine2 = 0x82 .equ cmdGotoLine3 = 0x83 .equ cmdGotoLine4 = 0x84 .equ cmdCursorLeft = 0x85 .equ cmdCursorRight = 0x86 .equ cmdDisplayOff = 0x87 .equ cmdDisplayOn = 0x88 .equ cmdCursorOn = 0x89 .equ cmdCursorOff = 0x8A .equ cmdBlinkOn = 0x8B .equ cmdBlinkOff = 0x8C .equ cmdWakeup = 0x8D ;------ PortB Defines ---------------------------------------- .equ RunButton = 1 ;run button .equ SelectButton = 2 ;select button .equ ModeButton = 3 ;mode button ;------ PortD Defines ---------------------------------------- .equ Lencoder = 0 ;left encoder .equ Rencoder = 1 ;right encoder .equ GreenLED = 5 ;green LED .equ RedLED = 6 ;red LED .equ Fled = 7 ;Floor LED enable (active high) ;------ PortE Defines ---------------------------------------- .equ LowerRangeOut = 2 ;lower range sensor output .equ LowerRangeIn = 3 ;lower range sensor input .equ UpperRangeOut = 4 ;upper range sensor output .equ UpperRangeIn = 5 ;upper range sensor input .equ RsensorPower = 6 ;right sensor power (active low) .equ LsensorPower = 7 ;left sensor power (active low) ;------ PortF Defines ---------------------------------------- .equ FrontLeftSensor = 0 ;range sensors .equ FrontRightSensor = 1 .equ RearLeftSensor = 2 .equ RearRightSensor = 3 .equ FrontFloorSensor = 4 .equ RearFloorSensor = 5 .equ BatteryMonitor = 6 ;------ PortG Defines ---------------------------------------- .equ LeftBumper = 3 ;Left bumper switch .equ RightBumper = 4 ;Right bumper switch ;------ Macros for Port control ------------------------------ .macro EnableUsensor cbi porte,UpperRangeIn .endm .macro DisableUsensor sbi porte,UpperRangeIn .endm .macro EnableLsensor cbi porte,LowerRangeIn .endm .macro DisableLsensor sbi porte,LowerRangeIn .endm .macro GreenLEDon cbi portd,GreenLED ;turn off green LED .endm .macro GreenLEDoff sbi portd,GreenLED ;turn off green LED .endm .macro RedLEDon cbi portd,RedLED ;turn off red LED .endm .macro RedLEDoff sbi portd,RedLED ;turn off red LED .endm .macro FloorLEDon sbi portd,Fled ;turn on floor LED's .endm .macro FloorLEDoff cbi portd,Fled ;turn off floor LED's .endm .macro LeftSensorsOn cbi porte,LsensorPower ;turn on left sensors .endm .macro LeftSensorsOff sbi porte,LsensorPower ;turn on left sensors .endm .macro RightSensorsOn cbi porte,RsensorPower ;turn on right sensors .endm .macro RightSensorsOff sbi porte,RsensorPower ;turn on right sensors .endm ;------ Mode Constants -------------------------------------- .equ mRun = 0 ;run the maze .equ mSingleStep = 1 ;debug mode .equ mDiagnostic = 2 ;display diagnostic information .equ mSensorTest = 3 ;display all sensor values .equ mAlign = 4 ;wall alignment test .equ mSpinTest = 5 ;do 4 90 degree spins .equ mSpeedTest = 6 ;test the PWM speed control .equ mSetup = 7 ;select the direction priorities .equ mAdvanced = 8 ;run Advanced maze instead of mapping .equ mLastMode = 9 ;last mode constant ;------ Flag Bits --------------------------------------- .equ Tick = 0 ;Timer Tick bit .equ SingleStep = 1 ;run the single step mode .equ Advanced = 2 ;running advanced maze .equ Jogging = 3 ;a course adjustment is in progress .equ Bumper = 4 ;bumper flag ;------ Scanner States ---------------------------- .equ ssStart = 0 ;the sensor hasn't started .equ ssEnabled = 1 ;sensor is enabled and measuring .equ ssWait = 2 ;Sensor finshed, now waiting for next cycle ;------ Heading Constants ------------------------- .equ North = 0 .equ East = 1 .equ South = 2 .equ West = 3 ;------ Register Defines -------------------------------- .def ISRint0 = r0 ;used in INT0 ISR .def ISRint1 = r1 ;used in INT1 ISR .def ISRTimer0 = r2 ;used in timer0 ISR .def ISRDelay = r3 ;used in Delay routine .def ISRUart = r4 ;used in Uart ISR not used .def ISRAdc = r5 ;used in ADC ISR .def ADChi = r6 ;used in ADC ISR .def ISRTimer2 = r7 ;used in timer2 ISR .def ScanValue = r8 ;IR scanner reading .def MyLoop = r9 ;used for various loops .def LeftSpeed = r10 ;current left motor speed .def RightSpeed = r11 ;current right motor speed .def SensorTicks = r12 ;Used in timer routines .def FrontReading = r13 ;used in Lineup routines .def NewHeading = r14 ;used in ChangeHeading .def Temp = r15 ;used in DisplayBits .def Acc = r16 ;used as accumulator .def Mode = r17 ;running mode .def Lencoder = r18 ;Left encoder count .def Rencoder = r19 ;Right encoder count .def Flags = r20 ;Flag bits .def SensorState = r21 ;Used by DoSensor task .def JogTimer = r22 ;used by speed test .def Heading = r23 ;current heading .def Cell = r24 ;current cell information .def MoveCount = r25 ;used in MoveOneCell ; r26 ;X register used as cell pointer ; r28 ;Y register used to store status block with ADC results ; r30 ;Z register used for IJMPs ;------ Ram Defines ------------------------------------- .equ StatusBlock = 0x100 ;begining of status block .equ sbFrontLeft = 0x100 ;current value for Front Left sensor .equ sbFrontRight = 0x101 ;current value for Front Right sensor .equ sbRearLeft = 0x102 ;current value for Rear Left sensor .equ sbRearRight = 0x103 ;current value for Rear Right sensor .equ sbFrontFloor = 0x104 ;current value for the front floor sensor .equ sbRearFloor = 0x105 ;current value for the rear floor sensor .equ sbBattery = 0x106 ;battery voltage .equ sbUpperSensor = 0x107 ;Upper IR sensor .equ sbLowerSensor = 0x108 ;Lower IR sensor .equ sbRunningMode = 0x109 ;Current Running Mode (Explore, Retreat, Finish) .equ CellArray = 0x200 ;cell used to map the maze .cseg .org 0 jmp start ;RESET .org 2 jmp INT0isr ;INT0 External Interrupt Request .org 4 jmp INT1isr ;INT1 External Interrupt Request .org 6 reti ;INT2 External Interrupt Request .org 8 reti ;INT3 External Interrupt Request .org 0xa reti ;INT4 External Interrupt Request .org 0xc reti ;INT5 External Interrupt Request .org 0xe reti ;INT6 External Interrupt Request .org 0x10 reti ;INT7 External Interrupt Request .org 0x12 reti ;TIMER2 COMP Timer/Counter2 Compare Match .org 0x14 rjmp Timer2 ;TIMER2 OVF Timer/Counter2 Overflow .org 0x16 reti ;TIMER1 CAPT Timer/Counter1 Capture Event .org 0x18 reti ;TIMER1 COMPA Timer/Counter1 Compare Match A .org 0x1a reti ;TIMER1 COMPB Timer/Counter1 Compare Match B .org 0x1c reti ;TIMER1 OVF Timer/Counter1 Overflow .org 0x1e jmp Timer0 ;TIMER0 COMP Timer/Counter0 Compare Match .org 0x20 reti ;TIMER0 OVF Timer/Counter0 Overflow .org 0x22 reti ;SPI, STC SPI Serial Transfer Complete .org 0x24 reti ;USART0, RX USART0, Rx Complete .org 0x26 reti ;USART0, UDRE USART0 Data Register Empty .org 0x28 reti ;USART0, TX USART0, Tx Complete .org 0x2a jmp ADCisr ;ADC ADC Conversion Complete .org 0x2c reti ;EE READY EEPROM Ready .org 0x2e reti ;ANALOG COMP Analog Comparator .org 0x30 reti ;TIMER1 COMPC Timer/Countre1 Compare Match C .org 0x32 reti ;TIMER3 CAPT Timer/Counter3 Capture Event .org 0x34 reti ;TIMER3 COMPA Timer/Counter3 Compare Match A .org 0x36 reti ;TIMER3 COMPB Timer/Counter3 Compare Match B .org 0x38 reti ;TIMER3 COMPC Timer/Counter3 Compare Match C .org 0x3a reti ;TIMER3 OVF Timer/Counter3 Overflow .org 0x3c reti ;USART1, RX USART1, Rx Complete .org 0x3e reti ;USART1, UDRE USART1 Data Register Empty .org 0x40 reti ;USART1, TX USART1, Tx Complete .org 0x42 reti ;TWI Two-wire Serial Interface .org 0x44 reti ;SPM READY Store Program Memory Ready ;**************************************************************** ; Motor Speed Tables * ;**************************************************************** SpeedTableL: .db 0x00,0xa6,0xa4,0xa2,0xa0,0x9e,0x9c,0x99 ;left speed values 0-7 SpeedTableR: .db 0x00,0xa8,0xaa,0xac,0xae,0xb0,0xb2,0xb4 ;right speed values 0-7 ;**************************************************************** ; Timer0 - Timer Interrupt Service Routine * ; Entry occurs every 1ms * ;**************************************************************** Timer0: in ISRTimer0,sreg ;save status register inc SensorTicks ;inc the tick counter sbr Flags,1<