;************************************************************* ;* ;* Title : 8535_ADC.ASM Test ;* Version : 1.0.1 ;* Last updated : 1999-06-18 ;* Target : AT90S8535 ;* ;* Author : Lars Wictorsson / LAWICEL ;* http://www.lawicel.com ;* info@lawicel.com ;* ;* Info : Program reads ADC channel 0 all the time ;* (as fast as possible), then convert the ;* 10bit data to 8bit data and display the ;* value on port B. ;* ;* Revision : 1.0.0 Created 1999-02-15 ;* 1.0.1 Optimizing conversion fom 10 to 8 bits ;* ;************************************************************* .include "8535def.inc" .def TEMP =R16 .def TEMP2 =R17 .CSEG rjmp MAIN ; Reset Handle reti reti reti reti reti reti reti reti reti reti reti reti reti rjmp ADCRDY ; ADC Conversion complete reti reti ;* ;* Interrupt routine for ADC ;* ADCRDY: in TEMP,ADCL ; Read 10 bit ADC value in TEMP2,ADCH ror TEMP2 ; Divide ADC value by 4 ror TEMP ror TEMP2 ror TEMP sbi ADCSR,6 ; Trigger next conversation reti ;* ;* Main program ;* ;* Start here after a RESET. ;* MAIN: ldi TEMP,$57 ;Initialize stack pointer at $0257 (Max RAM) out SPL,TEMP ;Stack pointer decreases when something is ldi TEMP,$02 ;pushed on the stack. out SPH,TEMP ldi TEMP,0xff ;Set PB port to output out DDRB,TEMP ldi TEMP,0x00 ;Set all PB pins to OFF out PORTB,TEMP ldi TEMP,$00 ;Set ADMUX channel 0 out ADMUX,TEMP ldi TEMP,0b10001000 ;Set ADC enable and trigger dummy read out ADCSR,TEMP sei ;Set Global interrupt flag sbi ADCSR,6 ;Trigger next conversation LOOP: rjmp LOOP ;* ;* End of program ;*