Larzarus
02.04.2006, 11:24
Hi ich habe hier ein Programm geschrieben für das RN Control 1.4.
Es soll ständig die Werte des Analogen Port a messen und auf die LED´s ausgeben.
Jetzt ist die Frage ob das so laufen wird.
Später soll dann an den Analog Port A ein Sharp GP2D12 dran .
mit der Vektoren tabelle bin ich mir nicht so sicher ob das passt.
Wäre sehr nett wenn ein Profi hier verbesserungen vornehmen würden ^^
NOLIST
.INCLUDE "m32def.inc"
.LIST
jmp RESET ; Reset Handler
;jmp EXT_INT0 ; IRQ0 Handler
;jmp EXT_INT1 ; IRQ1 Handler
;jmp EXT_INT2 ; IRQ2 Handler
;jmp TIM2_COMP ; Timer2 Compare Handler
;jmp TIM2_OVF ; Timer2 Overflow Handler
;jmp TIM1_CAPT ; Timer1 Capture Handler
;jmp TIM1_COMPA ; Timer1 CompareA Handler
;jmp TIM1_COMPB ; Timer1 CompareB Handler
;jmp TIM1_OVF ; Timer1 Overflow Handler
;jmp TIM0_COMP ; Timer0 Compare Handler
;jmp TIM0_OVF ; Timer0 Overflow Handler
;jmp SPI_STC ; SPI Transfer Complete Handler
;reti USART_RXC ; USART RX Complete Handler
;reti USART_UDRE ; UDR Empty Handler
;jmp USART_TXC ; USART TX Complete Handler
jmp OnADC ; ADC Conversion Complete Handler
;jmp EE_RDY ; EEPROM Ready Handler
;jmp ANA_COMP ; Analog Comparator Handler
;jmp TWI ; Two-wire Serial Interface Handler
;jmp SPM_RDY ; Store Program Memory Ready Handler
RESET:
;---------------------------------------------------------
ldi r16,high(RAMEND)
out SPH,r16 ;init Stackpointer low
ldi r16,low(RAMEND)
out SPL,r16 ;init Stackpointer high
;---------------------------------------------------------
;Kanlauswahl wo gemessen wird
ldi r16,0x00 ;ADC Channel 0
out ADMUX, r16 ;ADC Channel 0
;-----------------------------------------------------------
;Einstellung ADC und Messung
ldi r16, 0b11010111 ; hier werden die obigen informationen übergeben vorteil 32
out ADCSRA , r16
;ADEN|ADSC|ADFR|ADIF|ADIE|ADSP2|ADSP1|ADSP0
;ADEN ADC Enable
;ADSC Start conversion
;ADFR Free Run
;ADIF Interupt Flag
;Interupt Enable
;ADSP 0..2 Vorteiler bei mir = 128 alle drei auf 111
mainloop: WDR
rjmp mainloop
OnADC:
cli ;interrupts sperren
in r26,ADCL ;Low Teil auslesen
in r27,ADCH ;High Teil auslesen
reti
;-------------------------------------
;Von 10Bit auflösung nach 8 Bit auflösung Konvertieren
asr r27 ;schiebe BIT 0 des "High TEILs" ins c FLAG
ror r26 ;schiebe alle bits nach rechts C-Flag in Bit 7
asr r27 ;schiebe BIT 0 des "High TEILs" ins c FLAG
ror r26 ;schiebe alle bits nach rechts C-Flag in Bit 7
ldi r16, 0xFF ;0xFF ins Arbeitsregister r16 laden
out DDRC, r16 ;Inhalt von r16 ins IO-Register DDRC ausgeben
mov r25, r26
out PORTC, r25 ; hier sind acht LED´s dran
sbi ADCSRA,6
sei
reti
Es soll ständig die Werte des Analogen Port a messen und auf die LED´s ausgeben.
Jetzt ist die Frage ob das so laufen wird.
Später soll dann an den Analog Port A ein Sharp GP2D12 dran .
mit der Vektoren tabelle bin ich mir nicht so sicher ob das passt.
Wäre sehr nett wenn ein Profi hier verbesserungen vornehmen würden ^^
NOLIST
.INCLUDE "m32def.inc"
.LIST
jmp RESET ; Reset Handler
;jmp EXT_INT0 ; IRQ0 Handler
;jmp EXT_INT1 ; IRQ1 Handler
;jmp EXT_INT2 ; IRQ2 Handler
;jmp TIM2_COMP ; Timer2 Compare Handler
;jmp TIM2_OVF ; Timer2 Overflow Handler
;jmp TIM1_CAPT ; Timer1 Capture Handler
;jmp TIM1_COMPA ; Timer1 CompareA Handler
;jmp TIM1_COMPB ; Timer1 CompareB Handler
;jmp TIM1_OVF ; Timer1 Overflow Handler
;jmp TIM0_COMP ; Timer0 Compare Handler
;jmp TIM0_OVF ; Timer0 Overflow Handler
;jmp SPI_STC ; SPI Transfer Complete Handler
;reti USART_RXC ; USART RX Complete Handler
;reti USART_UDRE ; UDR Empty Handler
;jmp USART_TXC ; USART TX Complete Handler
jmp OnADC ; ADC Conversion Complete Handler
;jmp EE_RDY ; EEPROM Ready Handler
;jmp ANA_COMP ; Analog Comparator Handler
;jmp TWI ; Two-wire Serial Interface Handler
;jmp SPM_RDY ; Store Program Memory Ready Handler
RESET:
;---------------------------------------------------------
ldi r16,high(RAMEND)
out SPH,r16 ;init Stackpointer low
ldi r16,low(RAMEND)
out SPL,r16 ;init Stackpointer high
;---------------------------------------------------------
;Kanlauswahl wo gemessen wird
ldi r16,0x00 ;ADC Channel 0
out ADMUX, r16 ;ADC Channel 0
;-----------------------------------------------------------
;Einstellung ADC und Messung
ldi r16, 0b11010111 ; hier werden die obigen informationen übergeben vorteil 32
out ADCSRA , r16
;ADEN|ADSC|ADFR|ADIF|ADIE|ADSP2|ADSP1|ADSP0
;ADEN ADC Enable
;ADSC Start conversion
;ADFR Free Run
;ADIF Interupt Flag
;Interupt Enable
;ADSP 0..2 Vorteiler bei mir = 128 alle drei auf 111
mainloop: WDR
rjmp mainloop
OnADC:
cli ;interrupts sperren
in r26,ADCL ;Low Teil auslesen
in r27,ADCH ;High Teil auslesen
reti
;-------------------------------------
;Von 10Bit auflösung nach 8 Bit auflösung Konvertieren
asr r27 ;schiebe BIT 0 des "High TEILs" ins c FLAG
ror r26 ;schiebe alle bits nach rechts C-Flag in Bit 7
asr r27 ;schiebe BIT 0 des "High TEILs" ins c FLAG
ror r26 ;schiebe alle bits nach rechts C-Flag in Bit 7
ldi r16, 0xFF ;0xFF ins Arbeitsregister r16 laden
out DDRC, r16 ;Inhalt von r16 ins IO-Register DDRC ausgeben
mov r25, r26
out PORTC, r25 ; hier sind acht LED´s dran
sbi ADCSRA,6
sei
reti