CODE
.include "m8535def.inc"
.equ clk = 0
.equ data = 1
.equ load = 7
.def hexL = r16 ; Младший байт шестнадцатиричного слова
.def hexH = r17 ; Старший байт шестнадцатиричного слова
.def hexHH = r18 ; Самый старший байт шестнадцатиричного слова
.def BCD0 = r22 ; BCD- разряды 2 и 1
.def BCD1 = r23 ; BCD- разряды 4 и 3
.def BCD2 = r24 ; BCD- разряды 6 и 5
.def BCD3 = r25 ; BCD- разряды 8 и 7
.def cnt = r19 ; Счетчик
.def tmp1 = r20 ; Рабочий регистр
;--------------------------------------------------------------
.ORG 0x0 ;?????? ?????? ?? RESET
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ;TIM2_COMP Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 Compare A Handler
rjmp TIM1_COMPB ; Timer1 Compare B Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp ADC_ ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp EXT_INT2 ; IRQ2 Handler
rjmp TIM0_COMP ; Timer0 Compare Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler
RESET:
ldi r16,high(RAMEND) ; Main program start
out SPH,r16 ; Set Stack Pointer to top of RAM
ldi r16,low(RAMEND)
out SPL,r16
Start:
rcall INIT_PORTS
;rcall INIT_UART
;rcall getc ;for test comunication - nullmodem
;rcall putc
;ldi r16, 0x80
;out GICR, r16
;out GIFR, r16
;ldi r18, 0x01
;ldi r19, 0x03
main:
;ttest3:
;sbic PinD,2
;rjmp ttest3
rcall Init
rcall SkipROM
rcall ConvertT
rcall Init
rcall SkipROM
rcall ReadScratchpad
;ldi r27,0x17
;ldi r26,0x15
;lsr r27
;ror r26
mov r18,r27
mov r19,r27
andi r18,0x0f
andi r19,0xf0
lsr r19
lsr r19
lsr r19
lsr r19
mov r16,r19
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r18
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r20,r26
mov r21,r26
andi r20,0x0f
andi r21,0xf0
lsr r21
lsr r21
lsr r21
lsr r21
mov r16,r19
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r18
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
ttest:
rjmp ttest
;rcall DataOut
rjmp main
/*---------------------------Write Time Slots----------------------------*/
write0:
in r16,DDRC
ori r16,0x04; !!!?????????!!
out DDRC, r16
cbi PortC,2
ldi r16, 0x23;70us
rcall TmrDelay
in r16,DDRC
andi r16,0xfb
out DDRC, r16; release line
rcall delay_15us
ret
write1:
in r16,DDRC
ori r16,0x04
out DDRC, r16
cbi PortC,2
ldi r16, 0x03; 6us
rcall delay
in r16,DDRC
andi r16,0xfb
out DDRC, r16; release line
ldi r16, 0x23;70us
rcall TmrDelay
ret
/*------------------------Read Time Slots-------------------------------*/
read:
in r16,DDRC
ori r16,0x04
out DDRC, r16
cbi PortC,2
ldi r16, 0x02; 4us
rcall delay
in r16,DDRC
andi r16,0xfb
out DDRC, r16; release line
ldi r16, 0x02; 4us
rcall delay
sbic PinC,2
ori r22,0x80
ldi r16, 0x30; 50us
rcall TmrDelay
ret
read_1byte:
ldi r21,0x08
ldi r22,0x00
loop_1byte:
lsr r22
rcall read
dec r21
cpi r21,0x00
brne loop_1byte
ret
/*------------------------------------------------------------------------*/
Init:
in r16,DDRC
ori r16,0x04; !!!?????????!!
out DDRC, r16
ldi r16,0xf0;480us
cbi PortC,2
rcall TmrDelay; Reset pulse
in r16,DDRC
andi r16,0xfb; !!!?????????!!
out DDRC, r16; release line
ldi r16,0x28;80us
rcall TmrDelay
sbic PinC,2;Presence pulse
rcall Error
ldi r16,0xc8;400us
rcall TmrDelay
sbis PinC,2;check if the sensor has released line
rcall Error
ret
Send:
ldi r21,0x08
start1:
ror r20
brcs wr
rcall write0
dec r21
cpi r21, 0x00
breq end1
rjmp start1
wr:
rcall write1
dec r21
cpi r21, 0x00
breq end1
rjmp start1
end1:
ret
SkipROM:;CCh
ldi r20,0xcc
rcall Send
ret
ReadScratchpad:;BEh
ldi r20,0xBE
rcall Send
reading:
rcall read_1byte
mov r26,r22
rcall read_1byte
mov r27,r22
rcall Init
ret
ConvertT:;44h
ldi r20,0x44
rcall Send
in r16,DDRB
ori r16,0x08
out DDRB, r16
cbi PortB,3;switch LED
ldi r22,0x00
converting:
rcall read
cpi r22,0x00
breq converting
in r16,DDRB
andi r16,0xf7
out DDRB, r16
cbi PortB,3;turn off LED
ret
ConfTmr0:
ldi r17,0x02
out TIMSK, r17;Compare Match interrupt is enabled
out OCR0,r16
sei
ldi r17,0x0a
out TCCR0,r17;CTC Mode, T=2us
ret
TmrDelay:
subi r16,6
rcall ConfTmr0
ldi r18,0x00
loop9:
cpi r18, 0xff
brne loop9
cli
nop ;correction
nop
nop
ret
Error:
go:
ldi r17,0x00
ldi r16, 0x08
out DDRB, r16
cbi PortB,3;switch LED
rjmp go
ret
delay:
loop1:
dec r16
cpi r16,0x00
nop
brne loop1
ret
delay_15us:
ldi r16, 0x06
loop_15us:
dec r16
cpi r16,0x00
nop
brne loop1
ret
/*---------functions for debugging-----------------------------*/
switch_LED:
loop_LED:
ldi r16, 0x08
out DDRB, r16
cbi PortB,3;switch LED
rjmp loop_LED
ret
CIFRA:
cpi r16, 0x00
breq L0
cpi r16, 0x01
breq L1
cpi r16, 0x02
breq L2
cpi r16, 0x03
breq L3
cpi r16, 0x04
breq L4
cpi r16, 0x05
breq L5
cpi r16, 0x06
breq L6
cpi r16, 0x07
breq L7
cpi r16, 0x08
breq L8
cpi r16, 0x09
breq L9
cpi r16, 0x0A
breq LA
cpi r16, 0x0B
breq LB
cpi r16, 0x0C
breq LC
cpi r16, 0x0D
breq L0D
cpi r16, 0x0E
breq LE
cpi r16, 0x0F
breq LF
L0: ldi r16,0xC0
ret
L1: ldi r16,0xF9
ret
L2: ldi r16,0xA4
ret
L3: ldi r16,0xB0
ret
L4: ldi r16,0x99
ret
L5: ldi r16,0x92
ret
L6: ldi r16,0x82
ret
L7: ldi r16,0xF8
ret
L8: ldi r16,0x80
ret
L9: ldi r16,0x90
ret
LA: ldi r16,0x88
ret
LB: ldi r16,0x83
ret
LC: ldi r16,0xC6
ret
L0D: ldi r16,0xA1
ret
LE: ldi r16,0x86
ret
LF: ldi r16,0x8E
ret
CIFERBLAT:
lsl r16
brcs SS1
cbi PortC, data
cbi PortC, clk
sbi PortC, clk
rjmp End_SS
SS1:
sbi PortC, data
cbi PortC, clk
sbi PortC, clk
End_SS:
dec r17
cpi r17, 0x00
brne CIFERBLAT
ret
HexBCD: ; xxxx (Hex) -> 0abcde (BCD)
rcall Div10 ; hexH:hexL / 10, ??????? - ? tmp1
mov BCD0,tmp1 ; ????????? - ? hexH:hexL, tmp1 = ?????? 1
rcall Div10 ; ??????? = ?????? 2
swap tmp1 ; ?????? 2 – ? ??????? ????????
or BCD0,tmp1 ; ?????????? ??????? 2 ? 1 ? BCD0
rcall Div10 ; ??????? = ?????? 3
mov BCD1,tmp1 ; ? BCD1
rcall Div10 ; ??????? = ?????? 4
swap tmp1 ; ?????? 4 – ? ??????? ????????
or BCD1,tmp1 ; ?????????? ??????? 4 ? 3 ? BCD1
rcall Div10 ; ??????? = ?????? 5
mov BCD2,tmp1 ; ? BCD2
rcall Div10 ; ??????? = ?????? 6
swap tmp1 ; ?????? 6 – ? ??????? ????????
or BCD2,tmp1 ; ?????????? ??????? 6 ? 5 ? BCD2
rcall Div10 ; ??????? = ?????? 7
mov BCD3,tmp1 ; ? BCD3
rcall Div10 ; ??????? = ?????? 8
swap tmp1 ; ?????? 8 – ? ??????? ????????
or BCD3,tmp1 ; ?????????? ??????? 6 ? 5 ? BCD3
ret
Div10: ; ??????? hexHH:hexH:hexL ?? 10,
; ????????? – ? hexHH:hexH:hexL, ??????? - ? tmp1
clr tmp1
lsl hexL
rol hexH
rol hexHH;
rol tmp1 ; ??????? ??????? ???? ???????? ?? 10
lsl hexL ; ????? ???? ? ??????????
rol hexH ; ?????? 0
rol hexHH
rol tmp1
lsl hexL
rol hexH
rol hexHH
rol tmp1
ldi cnt,21 ; ??????? ??? ?????????? 21 ????????s
Loop10:
lsl hexL ; ????? ???????? ????? ?? 1 ??????
rol hexH
rol hexHH
rol tmp1 ; ???????????? ? tmp1
subi tmp1,10 ; ????????: ???????????? > 10 ?
brlo HB1 ; ???????, ???? ???
inc hexL ; ??????????? ??????? ??????? ?? 1
rjmp HB2
HB1:
subi tmp1,-10 ; ????????? ???????? ????????
HB2:
dec cnt ; ?????????????? ??????? ????????
brne Loop10 ; ???????, ???? ??? ?? ??? ???????
ret
DataOut:
lsl r27
lsl r27
lsl r27
lsl r27
lsl r27
lsr r26
lsr r26
lsr r26
or r26,r27
mov r16,r26
lsr r16
ldi r17,0x00
ldi r18,0x00
rcall HexBCD
ldi r16,0x00
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r23
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r18,r22
mov r19,r22
andi r18,0x0f
andi r19,0xf0
lsr r19
lsr r19
lsr r19
lsr r19
mov r16,r19
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r18
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
;ttest:
;rjmp ttest
ret
/*-------------------------------------------------------------*/
INIT_UART:
ldi r16,00
out UBRRH,r16
ldi r16,25
out UBRRL,r16
ldi r16,24 ; UART for TX and RX
out UCSRB,r16
ldi r16,0x86
out UCSRC,r16
ret
getc:
sbis UCSRA,RXC
rjmp getc
in r16,UDR
ret
putc:
sbis UCSRA,UDRE
rjmp putc
out UDR,r16
ret
INIT_PORTS:
ldi r16, 0x00
out DDRA, r16 ;??? ?????
ldi r16, 0x00
out DDRB, r16
ldi r16, 0x03
out DDRC, r16
ldi r16, 0x10 ;??? LCD ???????, ??? LED ???????? ?? 0, 2->TXD
out DDRD, r16
ret
EXT_INT0: ; IRQ0 Handler+-
reti
EXT_INT1: ; IRQ1 Handler
reti
main2:
reti
TIM2_COMP:
reti ; Timer2 Compare Handler
TIM2_OVF:
reti ; Timer2 Overflow Handler
TIM1_CAPT:
reti ; Timer1 Capture Handler
TIM1_COMPA:
reti ; Timer1 Compare A Handler
TIM1_COMPB:
reti ; Timer1 Compare B Handler
TIM1_OVF:
reti ; Timer1 Overflow Handler
TIM0_OVF:
reti; Timer0 Overflow Handler
SPI_STC:
reti ; SPI Transfer Complete Handler
USART_RXC:
reti ; USART RX Complete Handler
USART_UDRE:
reti ; UDR Empty Handler
USART_TXC:
reti ; USART TX Complete Handler
ADC_:
reti
EE_RDY:
reti ; EEPROM Ready Handler
ANA_COMP:
reti ; Analog Comparator Handler
TWSI:
reti ; Two-wire Serial Interface Handler
EXT_INT2:
reti ; IRQ2 Handler
TIM0_COMP:
ldi r17,0x00
out TCCR0,r17
ldi r17,0x00
out TIMSK, r17
ldi r17,0x00
out TCNT0,r17;reset timer
ldi r18, 0xff
reti ; Timer0 Compare Handler
SPM_RDY:
reti ; Store Program Memory Ready Handler
.equ clk = 0
.equ data = 1
.equ load = 7
.def hexL = r16 ; Младший байт шестнадцатиричного слова
.def hexH = r17 ; Старший байт шестнадцатиричного слова
.def hexHH = r18 ; Самый старший байт шестнадцатиричного слова
.def BCD0 = r22 ; BCD- разряды 2 и 1
.def BCD1 = r23 ; BCD- разряды 4 и 3
.def BCD2 = r24 ; BCD- разряды 6 и 5
.def BCD3 = r25 ; BCD- разряды 8 и 7
.def cnt = r19 ; Счетчик
.def tmp1 = r20 ; Рабочий регистр
;--------------------------------------------------------------
.ORG 0x0 ;?????? ?????? ?? RESET
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ;TIM2_COMP Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 Compare A Handler
rjmp TIM1_COMPB ; Timer1 Compare B Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp ADC_ ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp EXT_INT2 ; IRQ2 Handler
rjmp TIM0_COMP ; Timer0 Compare Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler
RESET:
ldi r16,high(RAMEND) ; Main program start
out SPH,r16 ; Set Stack Pointer to top of RAM
ldi r16,low(RAMEND)
out SPL,r16
Start:
rcall INIT_PORTS
;rcall INIT_UART
;rcall getc ;for test comunication - nullmodem
;rcall putc
;ldi r16, 0x80
;out GICR, r16
;out GIFR, r16
;ldi r18, 0x01
;ldi r19, 0x03
main:
;ttest3:
;sbic PinD,2
;rjmp ttest3
rcall Init
rcall SkipROM
rcall ConvertT
rcall Init
rcall SkipROM
rcall ReadScratchpad
;ldi r27,0x17
;ldi r26,0x15
;lsr r27
;ror r26
mov r18,r27
mov r19,r27
andi r18,0x0f
andi r19,0xf0
lsr r19
lsr r19
lsr r19
lsr r19
mov r16,r19
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r18
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r20,r26
mov r21,r26
andi r20,0x0f
andi r21,0xf0
lsr r21
lsr r21
lsr r21
lsr r21
mov r16,r19
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r18
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
ttest:
rjmp ttest
;rcall DataOut
rjmp main
/*---------------------------Write Time Slots----------------------------*/
write0:
in r16,DDRC
ori r16,0x04; !!!?????????!!
out DDRC, r16
cbi PortC,2
ldi r16, 0x23;70us
rcall TmrDelay
in r16,DDRC
andi r16,0xfb
out DDRC, r16; release line
rcall delay_15us
ret
write1:
in r16,DDRC
ori r16,0x04
out DDRC, r16
cbi PortC,2
ldi r16, 0x03; 6us
rcall delay
in r16,DDRC
andi r16,0xfb
out DDRC, r16; release line
ldi r16, 0x23;70us
rcall TmrDelay
ret
/*------------------------Read Time Slots-------------------------------*/
read:
in r16,DDRC
ori r16,0x04
out DDRC, r16
cbi PortC,2
ldi r16, 0x02; 4us
rcall delay
in r16,DDRC
andi r16,0xfb
out DDRC, r16; release line
ldi r16, 0x02; 4us
rcall delay
sbic PinC,2
ori r22,0x80
ldi r16, 0x30; 50us
rcall TmrDelay
ret
read_1byte:
ldi r21,0x08
ldi r22,0x00
loop_1byte:
lsr r22
rcall read
dec r21
cpi r21,0x00
brne loop_1byte
ret
/*------------------------------------------------------------------------*/
Init:
in r16,DDRC
ori r16,0x04; !!!?????????!!
out DDRC, r16
ldi r16,0xf0;480us
cbi PortC,2
rcall TmrDelay; Reset pulse
in r16,DDRC
andi r16,0xfb; !!!?????????!!
out DDRC, r16; release line
ldi r16,0x28;80us
rcall TmrDelay
sbic PinC,2;Presence pulse
rcall Error
ldi r16,0xc8;400us
rcall TmrDelay
sbis PinC,2;check if the sensor has released line
rcall Error
ret
Send:
ldi r21,0x08
start1:
ror r20
brcs wr
rcall write0
dec r21
cpi r21, 0x00
breq end1
rjmp start1
wr:
rcall write1
dec r21
cpi r21, 0x00
breq end1
rjmp start1
end1:
ret
SkipROM:;CCh
ldi r20,0xcc
rcall Send
ret
ReadScratchpad:;BEh
ldi r20,0xBE
rcall Send
reading:
rcall read_1byte
mov r26,r22
rcall read_1byte
mov r27,r22
rcall Init
ret
ConvertT:;44h
ldi r20,0x44
rcall Send
in r16,DDRB
ori r16,0x08
out DDRB, r16
cbi PortB,3;switch LED
ldi r22,0x00
converting:
rcall read
cpi r22,0x00
breq converting
in r16,DDRB
andi r16,0xf7
out DDRB, r16
cbi PortB,3;turn off LED
ret
ConfTmr0:
ldi r17,0x02
out TIMSK, r17;Compare Match interrupt is enabled
out OCR0,r16
sei
ldi r17,0x0a
out TCCR0,r17;CTC Mode, T=2us
ret
TmrDelay:
subi r16,6
rcall ConfTmr0
ldi r18,0x00
loop9:
cpi r18, 0xff
brne loop9
cli
nop ;correction
nop
nop
ret
Error:
go:
ldi r17,0x00
ldi r16, 0x08
out DDRB, r16
cbi PortB,3;switch LED
rjmp go
ret
delay:
loop1:
dec r16
cpi r16,0x00
nop
brne loop1
ret
delay_15us:
ldi r16, 0x06
loop_15us:
dec r16
cpi r16,0x00
nop
brne loop1
ret
/*---------functions for debugging-----------------------------*/
switch_LED:
loop_LED:
ldi r16, 0x08
out DDRB, r16
cbi PortB,3;switch LED
rjmp loop_LED
ret
CIFRA:
cpi r16, 0x00
breq L0
cpi r16, 0x01
breq L1
cpi r16, 0x02
breq L2
cpi r16, 0x03
breq L3
cpi r16, 0x04
breq L4
cpi r16, 0x05
breq L5
cpi r16, 0x06
breq L6
cpi r16, 0x07
breq L7
cpi r16, 0x08
breq L8
cpi r16, 0x09
breq L9
cpi r16, 0x0A
breq LA
cpi r16, 0x0B
breq LB
cpi r16, 0x0C
breq LC
cpi r16, 0x0D
breq L0D
cpi r16, 0x0E
breq LE
cpi r16, 0x0F
breq LF
L0: ldi r16,0xC0
ret
L1: ldi r16,0xF9
ret
L2: ldi r16,0xA4
ret
L3: ldi r16,0xB0
ret
L4: ldi r16,0x99
ret
L5: ldi r16,0x92
ret
L6: ldi r16,0x82
ret
L7: ldi r16,0xF8
ret
L8: ldi r16,0x80
ret
L9: ldi r16,0x90
ret
LA: ldi r16,0x88
ret
LB: ldi r16,0x83
ret
LC: ldi r16,0xC6
ret
L0D: ldi r16,0xA1
ret
LE: ldi r16,0x86
ret
LF: ldi r16,0x8E
ret
CIFERBLAT:
lsl r16
brcs SS1
cbi PortC, data
cbi PortC, clk
sbi PortC, clk
rjmp End_SS
SS1:
sbi PortC, data
cbi PortC, clk
sbi PortC, clk
End_SS:
dec r17
cpi r17, 0x00
brne CIFERBLAT
ret
HexBCD: ; xxxx (Hex) -> 0abcde (BCD)
rcall Div10 ; hexH:hexL / 10, ??????? - ? tmp1
mov BCD0,tmp1 ; ????????? - ? hexH:hexL, tmp1 = ?????? 1
rcall Div10 ; ??????? = ?????? 2
swap tmp1 ; ?????? 2 – ? ??????? ????????
or BCD0,tmp1 ; ?????????? ??????? 2 ? 1 ? BCD0
rcall Div10 ; ??????? = ?????? 3
mov BCD1,tmp1 ; ? BCD1
rcall Div10 ; ??????? = ?????? 4
swap tmp1 ; ?????? 4 – ? ??????? ????????
or BCD1,tmp1 ; ?????????? ??????? 4 ? 3 ? BCD1
rcall Div10 ; ??????? = ?????? 5
mov BCD2,tmp1 ; ? BCD2
rcall Div10 ; ??????? = ?????? 6
swap tmp1 ; ?????? 6 – ? ??????? ????????
or BCD2,tmp1 ; ?????????? ??????? 6 ? 5 ? BCD2
rcall Div10 ; ??????? = ?????? 7
mov BCD3,tmp1 ; ? BCD3
rcall Div10 ; ??????? = ?????? 8
swap tmp1 ; ?????? 8 – ? ??????? ????????
or BCD3,tmp1 ; ?????????? ??????? 6 ? 5 ? BCD3
ret
Div10: ; ??????? hexHH:hexH:hexL ?? 10,
; ????????? – ? hexHH:hexH:hexL, ??????? - ? tmp1
clr tmp1
lsl hexL
rol hexH
rol hexHH;
rol tmp1 ; ??????? ??????? ???? ???????? ?? 10
lsl hexL ; ????? ???? ? ??????????
rol hexH ; ?????? 0
rol hexHH
rol tmp1
lsl hexL
rol hexH
rol hexHH
rol tmp1
ldi cnt,21 ; ??????? ??? ?????????? 21 ????????s
Loop10:
lsl hexL ; ????? ???????? ????? ?? 1 ??????
rol hexH
rol hexHH
rol tmp1 ; ???????????? ? tmp1
subi tmp1,10 ; ????????: ???????????? > 10 ?
brlo HB1 ; ???????, ???? ???
inc hexL ; ??????????? ??????? ??????? ?? 1
rjmp HB2
HB1:
subi tmp1,-10 ; ????????? ???????? ????????
HB2:
dec cnt ; ?????????????? ??????? ????????
brne Loop10 ; ???????, ???? ??? ?? ??? ???????
ret
DataOut:
lsl r27
lsl r27
lsl r27
lsl r27
lsl r27
lsr r26
lsr r26
lsr r26
or r26,r27
mov r16,r26
lsr r16
ldi r17,0x00
ldi r18,0x00
rcall HexBCD
ldi r16,0x00
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r23
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r18,r22
mov r19,r22
andi r18,0x0f
andi r19,0xf0
lsr r19
lsr r19
lsr r19
lsr r19
mov r16,r19
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
mov r16,r18
ldi r17,0x08
rcall CIFRA
rcall CIFERBLAT
;ttest:
;rjmp ttest
ret
/*-------------------------------------------------------------*/
INIT_UART:
ldi r16,00
out UBRRH,r16
ldi r16,25
out UBRRL,r16
ldi r16,24 ; UART for TX and RX
out UCSRB,r16
ldi r16,0x86
out UCSRC,r16
ret
getc:
sbis UCSRA,RXC
rjmp getc
in r16,UDR
ret
putc:
sbis UCSRA,UDRE
rjmp putc
out UDR,r16
ret
INIT_PORTS:
ldi r16, 0x00
out DDRA, r16 ;??? ?????
ldi r16, 0x00
out DDRB, r16
ldi r16, 0x03
out DDRC, r16
ldi r16, 0x10 ;??? LCD ???????, ??? LED ???????? ?? 0, 2->TXD
out DDRD, r16
ret
EXT_INT0: ; IRQ0 Handler+-
reti
EXT_INT1: ; IRQ1 Handler
reti
main2:
reti
TIM2_COMP:
reti ; Timer2 Compare Handler
TIM2_OVF:
reti ; Timer2 Overflow Handler
TIM1_CAPT:
reti ; Timer1 Capture Handler
TIM1_COMPA:
reti ; Timer1 Compare A Handler
TIM1_COMPB:
reti ; Timer1 Compare B Handler
TIM1_OVF:
reti ; Timer1 Overflow Handler
TIM0_OVF:
reti; Timer0 Overflow Handler
SPI_STC:
reti ; SPI Transfer Complete Handler
USART_RXC:
reti ; USART RX Complete Handler
USART_UDRE:
reti ; UDR Empty Handler
USART_TXC:
reti ; USART TX Complete Handler
ADC_:
reti
EE_RDY:
reti ; EEPROM Ready Handler
ANA_COMP:
reti ; Analog Comparator Handler
TWSI:
reti ; Two-wire Serial Interface Handler
EXT_INT2:
reti ; IRQ2 Handler
TIM0_COMP:
ldi r17,0x00
out TCCR0,r17
ldi r17,0x00
out TIMSK, r17
ldi r17,0x00
out TCNT0,r17;reset timer
ldi r18, 0xff
reti ; Timer0 Compare Handler
SPM_RDY:
reti ; Store Program Memory Ready Handler