#INCLUDE	INSTR.asm

RESET	.EQU	P3.1	;Сброс, активный уровень низкий
CLOCK	.EQU	P3.3	;Синхроимпульсы, запись по фронту сигнала
LOAD	.EQU	P3.4	;Строб
DATA	.EQU	P3.5	;Данные


   ; Начало программы
	.ORG	00H
	AJMP	start
	.ORG	03H	;Прерывание INT0
	RETI
	.ORG	0BH	;Прерывание Сч\Т0
	RETI	
	.ORG	13H	;Прерывание INT1
	RETI
	.ORG	1BH	;Прерывание Сч\Т1
	RETI
	.ORG	23H	;Прерывание RI,TI
	AJMP	priem
start:	.ORG	30H
	MOV	IE,#10H
	CLR	RESET	;Сброс всех линий в 0
	CLR	LOAD
	CLR	CLOCK
	CLR	DATA
	MOV	SP,#0FH	;Стек с адреса 10Н
	MOV	P3,#01H	;Р3 - на вывод, кроме RXD (P3.0)
	MOV	TCON,#00H	;Настройка таймера и приемника UART на 9600 б/с
	MOV	SCON,#50H
	MOV	PCON,#00H
	MOV	TMOD,#20H
	MOV	TH1,#0FDH
	MOV	R0,#30H	;установка буфера приема с адреса 30Н
	MOV	R1,#30H	;установка буфера чтения с адреса 30Н
	SETB	RESET
	SETB	EA
	SETB	TR1
	CLR	RI
start1:	CLR	C
	MOV	A,R0
	SUBB	A,R1	;пока R0 и R1 одинаковые, ждем приема
	JZ	start1
	MOV	A,@R1	;приняли байт, начинаем отправлять
	INC	R1
	CJNE	R1,#40H,start2
	MOV	R1,#30H
start2:	MOV	R7,#08H
start3:	CLR	CLOCK	;сброс CLK
	RLC	A	;сдвиг акк ч/з С влево (старшим битом вперед)
	MOV	DATA,C	;выводим на линию данных
	SETB	CLOCK	;устанавливаем CLK
	DJNZ	R7,start3	;все биты отправили, если нет, продолжаем
	SETB	LOAD	;устанвливаем строб
	CLR	CLOCK	;сброс CLK
	CLR	DATA	;сброс данных
	CLR	LOAD	;сброс строб
	AJMP	start1

;Прием байта по RS-232
;Принимаем в буфер по адресу R0
priem:	PUSH	ACC
	MOV	A,SBUF
	CLR	RI
	MOV	@R0,A	;сохраняем в буфер
	INC	R0	;следующая ячейка
	CJNE	R0,#40H,priem1	;если дошли до конца
	MOV	R0,#30H		;то устанавливаем начало
priem1:	POP	ACC
	RETI
	.END
   ; Конец программы
	.END