Вот последняя версия кода)
Как сделать так чтоб данные из АЦП (ADCL,ADCH) попадали в BIN_BCD
не пойму как сделать запись???
на LCD отоброжает 0000 и ничего не меняется.
Код:
.include "m8def.inc"
#define F_CPU (4000000)
.def temp1 = R16
.def temp2 = R17
.equ AtBCD0 = 4 ;address of r4 äëÿ ïîäïðîãðàììû BIN2_BCD
.equ AtBCD2 = 6 ;address of r6
.dseg
Digit: .byte 2
.cseg
.org 0
rjmp RESET ;External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
rjmp INT_0 ;External Interrupt Request 0
rjmp INT_1 ;External Interrupt Request 1
rjmp TIMER2_COMP ;Timer/Counter2 Compare Match
rjmp TIMER2_OVF ;Timer/Counter2 Overflow
rjmp TIMER1_CAPT ;Timer/Counter1 Capture Event
rjmp TIMER1_COMPA ;Timer/Counter1 Compare Match A
rjmp TIMER1_COMPB ;Timer/Counter1 Compare Match B
rjmp TIMER1_OVF ;Timer/Counter1 Overflow
rjmp TIMER0_OVF ;Timer/Counter0 Overflow
rjmp SPI_STC ;Serial Transfer Complete
rjmp USART_RXC ;USART, Rx Complete
rjmp USART_UDRE ;USART Data Register Empty
rjmp USART_TXC ;USART, Tx Complete
rjmp ADC_CC ;ADC Conversion Complete;;;;;;;;;;
rjmp EE_RDY ;EEPROM Ready
rjmp ANA_COMP ;Analog Comparator
rjmp TWI ;Two-wire Serial Interface
rjmp SPM_RDY ;Store Program Memory Ready
INT_0 : ret
INT_1 : ret
TIMER2_COMP : ret
TIMER2_OVF : ret
TIMER1_CAPT : ret
TIMER1_COMPA : ret
TIMER1_COMPB : ret
TIMER1_OVF : ret
TIMER0_OVF : ret
SPI_STC : ret
USART_RXC : ret
USART_UDRE : ret
USART_TXC : ret
;ADC_CC : ret
EE_RDY : ret
ANA_COMP : ret
TWI : ret
SPM_RDY : ret
reset:
ldi Temp1, LOW(RamEnd)
out SPL, Temp1
ldi Temp1, HIGH(RamEnd)
out SPH, Temp1
cli
ldi temp1,0b11111111
out DDRB,temp1 ;Íàïðàâëåíèå äàííûõ ïîðòà B íà âûâîä,(LCD-äèñïëåé)
out PORTB,temp1 ;Âûäàòü äàííûå íà ïîðò Â
ldi Temp1, 0b10101011
out ADCSR, Temp1
ldi Temp1, 0b00000000
out ADMUX, Temp1
; ldi r16,(1<<SE) ; Enable sleep mode
; out MCUCR, r16
rcall lcd_init;Èíèöèàëèçàöèÿ äèñïëåÿ.
sei
rjmp main2
main:
rjmp main
main2:
sbi ADCSR, 6
rjmp main
;********************************************************
ADC_CC:
;ldi r17,high(54321)
;ldi r16,low(54321)
in temp2, ADCL
in temp1, ADCH
;********************************************************************
BIN_BCD:
; Âõîä (r17: r16) Âûõîä BCD ÷èñëî (R6: R5: r4: R3: R2).
; Âûñîêèå ðåãèñòðû èñïîëüçóþòñÿ: 4 (R16, R17, R18, R19)
; Óêàçàòåëè èñïîëüçóþòñÿ: Z
ldi r18,16 ;Init loop counter ;init ñ÷åò÷èê öèêëà
clr r6 ;clear result (3 bytes); ÷åòêèé ðåçóëüòàò (3 áàéòà)
clr r5
clr r4
clr ZH ;clear ZH (not needed for AT90Sxx0x); ÿñíî, ZH (íå òðåáóåòñÿ äëÿ AT90Sxx0x)
bBCDx_1:
lsl r16 ;shift input value; ñäâèã âõîäíîãî çíà÷åíèÿ
rol r17 ;through all bytes, ÷åðåç âñåõ áàéòîâ
rol r4 ;
rol r5
rol r6
dec r18 ;decrement loop counter; óìåíüøåíèå ñ÷åò÷èê öèêëà
brne bBCDx_2 ;if counter not zero, åñëè ñ÷åò÷èê íå ðàâåí íóëþ
; ðàñïðåäåëèì ÷èñëà ïî ÿ÷åéêàì
ldi r18,0x0F
mov r2,r4
and r2,r18
swap r4
mov r3,r4
and r3,r18
mov r4,r5
and r4,r18
swap r5
and r5,r18
; ret ;return
rjmp LCD_Write
bBCDx_2:
ldi r30,AtBCD2+1 ;Z points to result MSB + 1; Z óêàçûâàåò íà ðåçóëüòàò MSB + 1
bBCDx_3:
ld r19,-Z ;get (Z) with pre-decrement, ïîëó÷èòü (Z) ñ ïðåäåêðåìåíòà
subi r19,-$03 ;add 0x03
sbrc r19,3 ;if bit 3 not clear; åñëè áèò 3 íå ÿñíî,
st Z,r19 ;store back
ld r19,Z ;get (Z)
subi r19,-$30 ;add 0x30
sbrc r19,7 ;if bit 7 not clear; åñëè áèò 7 íå ÿñíî,
st Z,r19 ;store back
cpi ZL,AtBCD0 ;done all three?; ñäåëàòü âñå òðè?
brne bBCDx_3 ;loop again if not; öèêë ñíîâà, åñëè íå
rjmp bBCDx_1
;*************************************************************************
;**********************************************************************
LCD_Write:
;ïðåîáðàçîâàòü äåñÿòè÷íûé êîä â ASCII
ldi temp1,0x30 ;Ñìåùåíèå äëÿ ASCII êîäà
add r2,temp1 ;r2
add r3,temp1 ;r3
add r4,temp1 ;r4
add r5,temp1 ;r5
add r6,temp1 ;r6
;*************************************************************************
;âûâîä íà lcd
ldi r16,0x45 ;;;;;;;;;;
rcall LCD_SetAddressDD ;êîîðäèíàòû â LCD ;;;;;;;;;;;
mov temp1,r2 ;;;;;;;;;;;
rcall LCD_WriteData ;;;;;;;;;;;
mov temp1,r3 ;;;;;;;;;;;;
rcall LCD_WriteData ;;;;;;;;;;
mov temp1,r4 ;;;;;;;;;;;;;;
rcall LCD_WriteData ;;;;;;;;;;
mov temp1,r5 ;;;;;;;;;;;;
rcall LCD_WriteData ;;;;;;;;
mov temp1,r6 ;;;;;;;;;;
rcall LCD_WriteData ;;;;;;;;;;;;;
;************************************************************************
;sbi ADCSR, 6
; ADC_CC:
; in temp1, ADCH
; out portd,temp1
; in temp1, ADCH
; out portb,temp1
reti
.include file "C:\AVR\WH3\hd44780.asm"