.nolist ;ToDo's ; ; .include "c:\avrtools\appnotes\8535def.inc" .list ;------ PortA Defines ---------------------------------------- .equ LeftPhoto = 0 ;Left Photo sensor .equ RightPhoto = 1 ;Right Photo sensor .equ RightRange = 2 ;Right Range sensor .equ LeftRange = 3 ;Left Range sensor .equ Battery = 4 ;Battery monitor ;------ PortB Defines ---------------------------------------- .equ btnMode = 0 ;Mode button .equ btnRun = 2 ;Run button ;------ PortC Defines ---------------------------------------- ;------ PortD Defines ---------------------------------------- .equ RedLed = 2 ;red LED .equ GreenLed = 3 ;green LED .equ LeftServo = 4 ;left drive servo .equ RightServo = 5 ;right drive servo .equ LeftLed = 6 ;left floor LED .equ RightLed = 7 ;right floor LED ;------ Macros for Port control ------------------------------ .macro EnableFloorLED cbi portd,LeftLED cbi portd,RightLED .endm .macro DisableFloorLED sbi portd,LeftLED sbi portd,RightLED .endm .macro GreenLED sbi portd,GreenLed cbi portd,RedLed .endm .macro RedLED cbi portd,GreenLed sbi portd,RedLed .endm .macro LEDoff sbi portd,GreenLed sbi portd,RedLed .endm ;------ Flag Bits --------------------------------------- .equ Tick = 0 ;Timer Tick bit .equ Running = 1 ;Running mode .equ BlinkOn = 2 ;controls blink LED ;------ Mode Constants ---------------------------------- .equ mdSearch = 0 ;use eyes and search Green .equ mdAgressive = 1 ;i have no idea Red .equ mdBlind = 2 ;no eyes, just wander Green blink .equ mdDiag = 3 ;diagnostic mode Red blink .equ mdLastMode = 4 ;end of table ;------ Sensor bits ------------------------------------- .equ sRightFloor = 0 ;Right floor sensor .equ sLeftFloor = 1 ;Left floor sensor .equ sRightEye = 2 ;Right eye sensor .equ sLeftEye = 3 ;Left eye sensor ;------ Sensor Thresholds ------------------------------- .equ Threshholdrf = 0x80 ;Right floor .equ Threshholdlf = 0x80 ;Left floor .equ Threshholdre = 0x40 ;Right eye .equ Threshholdle = 0x40 ;Left eye ;------ Register Defines -------------------------------- .def ISRTimer0 = r1 ;used in timer0 ISR .def ISRTimer2 = r2 ;used in timer2 ISR .def ISRDelay = r3 ;used in Delay routine .def UartTemp = r4 ;used in Uart ISR .def ISRADC = r5 ;used in ADC ISR .def ADClo = r6 ;temp register used in ADC ISR .def ADChi = r7 ;temp register used in ADC ISR .def Acc = r16 ;used as accumulator .def Mode = r17 ;running mode .def Flags = r18 ;Flag bits .def LeftScan = r19 ;scan value of left scanner ??? .def RightScan = r20 ;scan value of right scanner ??? .def MyLoop = r21 ;loop counter .def BlinkCounter = r22 ;controls LED blink rate .def Sensors = r23 ;bit weighted sensor readings ; x register r26/r27 ;X register used by diag routine .def ADCchannel = r28 ;Y register points to the current .def ADCchannelHi = r29 ;ADC channel being measured ;------ Ram Defines ------------------------------------- .equ sbBOB = 0x60 ;begining of status block .equ sbRightPhoto = 0x60 ;Right floor sensor .equ sbLeftPhoto = 0x61 ;Left floor sensor .equ sbRightRange = 0x62 ;Right Range sensor .equ sbLeftRange = 0x63 ;Left Range sensor .equ sbBattery = 0x64 ;Battery Voltage .equ sbEOB = 0x65 ;end of status block ;------ Interrupt Vector Table -------------------------- .cseg ;start code segment .org 0 rjmp Start ;reset vector reti ;irq0 reti ;irq1 reti ;timer2 compare rjmp Timer2 ;timer2 overflow reti ;timer1 capture reti ;timer1 compareA reti ;timer1 compareB reti ;timer1 overflow rjmp Timer0 ;timer0 overflow reti ;SPI transfer complete reti ;uart rx complete reti ;udr empty reti ;uart tx complete rjmp ADCIsr ;adc complete reti ;eeprom ready reti ;analog compare ;**************************************************************** ; Timer0 - Timer Interrupt Service Routine * ; Entry occurs every 4ms * ;**************************************************************** Timer0: in ISRTimer0,sreg ;save status register sbr Flags,1<