[an error occurred while processing this directive]
|
;* Title : IR-processor
;* Version : 1.00
;* Target : ATmega16
;* Author : Nikolaev V.
.include "m16def.inc"
.macro I2C_START
CBI PortC,0 ;SCL
I2C_delay
SBI PortC,1 ;SDA
I2C_delay
SBI PortC,0 ;SCL
I2C_DELAY
CBI PortC,1 ;SDA
I2C_DELAY
CBI PortC,0 ;SCL
I2C_DELAY
.endm
.macro I2C_STOP
CBI PortC,0 ;SCL
I2C_delay
CBI PortC,1 ;SDA
I2C_DELAY
SBI PortC,0 ;SCL
I2C_DELAY
SBI PortC,1 ;SDA
I2C_DELAY
.endm ;
.macro I2C_SEND_BYTE
LDI TEMP2,$00
LDI TEMP3,$08
SB1:
SBRC BUFFER1,7
JMP SB2
CBI PortC,1 ;SDA
JMP SB3
SB2:
SBI PortC,1 ;SDA
SB3:
ROL BUFFER1
I2C_DELAY
SBI PortC,0 ;SCL
I2C_DELAY
CBI PortC,0 ;SCL
I2C_DELAY
DEC TEMP3
CP TEMP2,TEMP3
BREQ SB4
jmp SB1
SB4:
I2C_delay
.endm
.macro I2C_READ_BYTE
LDI TEMP2,$00
LDI TEMP3,$08
I2C_DELAY
SR1:
SBI PortC,0 ;SCL
I2C_DELAY
SBR BUFFER4,0
sbic PinC,1 ;SDA
jmp SR2
cbr BUFFER4,0
SR2:
ROL BUFFER4 ;
CBI PortC,0 ;SCL ;
I2C_DELAY
DEC TEMP3
CP TEMP2,TEMP3
BRNE SR1
CBI PinC,1 ;SDA
I2C_DELAY
.endm
;-------------------------------------------------------------------------
.macro I2C_DELAY
;-------------------------------------------------------------------------
LDI TEMP1,$00
LDI counter2,$01
DEL_A:
ldi counter1,$f0
DEL_B:
dec counter1
cp counter1,TEMP1
brne del_B
dec counter2
cp counter2,TEMP1
brne del_A
.endm ;
;-------------------------------------------------------------------------
.def temp1 = r16 ; Vremennoe hranenie 1
.def temp2 = r17 ; Vremennoe hranenie 2
.def temp3 = r18 ; Vremennoe hranenie 3
.def commanda= r10 ;
.def BUFFER1 = r20 ;
.def BUFFER2 = r21 ;
.def BUFFER3 = r22 ;
.def BUFFER4 = r23 ;
.def counter1= r24 ; Delay counter1
.def counter2= r25 ; Delay counter2
;************************* Interrupt Vectors: *******************************
.CSEG
.org 0 ;reset vector
ser temp1 ;Stack Pointer set
out SPH,TEMP1
out SPL,temp1
jmp Init
;******************** Program Execution Starts Here: ************************
Init:
ldi temp1,$9F ;PortB,5 - input
out DDRB ,temp1 ;PortB,6 - input
ldi temp1,$FF ;PortC - output
out DDRC ,temp1
out PortB,temp1
clr temp1
out PortC,temp1
CLI
MAIN:
I2C_START
ldi BUFFER1,$41
I2C_SEND_BYTE
SBI PortC,0 ;SCL
I2C_delay
CBI PortC,0 ;SCL
I2C_delay
I2C_READ_BYTE
I2C_delay
I2C_STOP
call Big_delay
jmp main
E-mail: info@telesys.ru