; ; hello.temp.45.asm ; ; read and send temperature ; ; Neil Gershenfeld ; CBA MIT 10/25/07 ; ; (c) Massachusetts Institute of Technology 2007 ; Permission granted for experimental and personal use; ; license for commercial sale available from MIT. ; .include "tn44def.inc" ; ; pins ; .equ led1_a=PA3 .equ led1_c=PA2 .equ led2_a=PA3 .equ led2_c=PA0 .equ led3_a=PA2 .equ led3_c=PA3 .equ led4_a=PA2 .equ led4_c=PA0 .equ led5_a=PA0 .equ led5_c=PA3 .equ led6_a=PA0 .equ led6_c=PA2 ; ; registers ; .def bit_count = R16; bit counter .def temp = R17; temporary storage .def temp1 = R18; temporary storage .def input = R19; data byte ; ;definitions-- the 44 takes in the voltage and compares it to Vcc ; by the following equation: (Vref*1024)/Vcc-- the accel. defines ; the voltages output by going up or down in the datasheet ; .equ still= 512 ; ; code segment ; .cseg .org 0 rjmp reset ; ; bit delay ; serial bit delay ; .equ b = 13 ; 9600 baud (clock /8) ;.equ b = 8 ; 115200 baud (clock /1) bit_delay: ldi temp, b bitloop: dec temp brne bitloop ret ; blink_delay: ldi temp, 150 blink_delay_loop: ldi temp1, 150 blink_delay_loop1: dec temp1 brne blink_delay_loop1 dec temp brne blink_delay_loop ret ; main program ; reset: ; ; set stack pointer to top of RAM ; ldi temp, high(RAMEND) out SPH, temp ldi temp, low(RAMEND) out SPL, temp ; ; init LED ; cbi PORTA, PA0 sbi DDRA, PA0 cbi PORTA, PA2 sbi DDRA, PA2 cbi PORTA, PA3 sbi DDRA, PA3 cbi PORTA, PA4 sbi DDRA, PA4 cbi PORTA, PA5 sbi DDRA, PA5 cbi PORTA, PA6 sbi DDRA, PA6 cbi PORTA, PA7 sbi DDRA, PA7 cbi PORTB, PB2 sbi DDRB, PB2 cbi PORTB, PB1 sbi DDRB, PB1 cbi PORTB, PB0 sbi DDRB, PB0 ; ; init A/D--see register description at ; end of ADC Conversion chapter in Datasheet for explanation ; of bit number codes ; cbi ADMUX, REFS1 ; use Vcc as reference cbi ADMUX, REFS0 ; " cbi ADMUX, ADLAR ; right-adjust result ; ; set MUX to ADC1 (PA1) by settings bits to 000001 ; cbi ADMUX, MUX5 cbi ADMUX, MUX4 cbi ADMUX, MUX3 cbi ADMUX, MUX2 cbi ADMUX, MUX1 sbi ADMUX, MUX0 sbi ADCSRA, ADEN ; enable A/D cbi ADCSRA, ADPS2 ; set prescaler to /2 cbi ADCSRA, ADPS1 ; " cbi ADCSRA, ADPS0 ; " ; ; start main loop ; main_loop: sbi ADCSRA, ADSC ; start conversion AD_loop: sbic ADCSRA, ADSC ; loop until complete rjmp AD_loop rcall check rjmp main_loop check: in input, ADCL ; low byte in input, ADCH ; hi byte ldi temp, high(still) cp input, temp brsh main_loop ;inner circle sbi PORTA, PA0 sbi PORTB, PB0 rcall blink_delay rcall blink_delay ;2nd circle cbi PORTA, PA0 cbi PORTB, PB0 sbi PORTA, PA2 sbi PORTB, PB1 rcall blink_delay rcall blink_delay ;3rd circle cbi PORTA, PA2 cbi PORTB, PB1 sbi PORTA, PA3 sbi PORTB, PB2 rcall blink_delay rcall blink_delay ;4th circle cbi PORTA, PA3 cbi PORTB, PB2 sbi PORTA, PA4 sbi PORTA, PA7 rcall blink_delay rcall blink_delay ;5th circle cbi PORTA, PA4 cbi PORTA, PA7 sbi PORTA, PA5 sbi PORTA, PA6 ;back rcall blink_delay rcall blink_delay ;4th circle cbi PORTA, PA5 cbi PORTA, PA6 sbi PORTA, PA4 sbi PORTA, PA7 rcall blink_delay rcall blink_delay ; 3rd circle cbi PORTA, PA4 cbi PORTA, PA7 sbi PORTA, PA3 sbi PORTB, PB2 rcall blink_delay rcall blink_delay ; 2nd circle cbi PORTA, PA3 cbi PORTB, PB2 sbi PORTA, PA2 sbi PORTB, PB1 ; 1st circle rcall blink_delay rcall blink_delay cbi PORTA, PA2 cbi PORTB, PB1 sbi PORTA, PA0 sbi PORTB, PB0 rcall blink_delay rcall blink_delay cbi PORTA, PA0 cbi PORTB, PB0 ret ;no vertical movement=.5*1024= 512 ;down (1g)= (1.75/5)*1024= 358.4 ;up (1g) = (3.25/5)*1024= 656.6