pavel1979 писал(а):кусок программы на asm,который отвечает за отсылку данных
Вот подпрограмма загрузки в LC72131
LoadLC72131:
ldi prm1, 0b00101001; загружаем в r19=prm1 адрес режима IN2
ldi temp,9; загружаем в r16=temp число бит в байте+1
cbi PORTC,CE;ставим CE=0, разрешаем LC72131 прием адреса IN2
; **********************ЗАГРУЗКА АДРЕСА IN2*******************
loop:
dec temp; при обнулении temp - загружаем младший байт данных IN2
cpi temp, 0
breq equal; при выполнении сдвига 8 раз - переход на equal
lsr prm1; сдвигаем содержимое младшего байта адреса IN2 на 1 разряд вправо
brcs greater;проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop; переходим к сдвигу следующего бита байта адреса IN2
greater:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop; переходим к сдвигу следующего бита байта адреса IN2
; *****************ЗАГРУЗКА МЛАДШЕГО БАЙТА ДАННЫХ IN2*******************
equal:
sbi PORTC,CE;ставим CE=1, разрешаем LC72131 прием данных IN2
ldi prm1,0b00000000; загружаем в prm1 младший байт данных IN2
ldi temp,9; загружаем в temp число бит в байте+1
loop1:
dec temp; при обнулении temp - загружаем средний байт данных IN2
cpi temp, 0
breq equal1; при выполнении сдвига 8 раз - переход на equal1
lsr prm1; сдвигаем содержимое младшего байта данных IN2 на 1 разряд вправо
brcs greater1; проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop1; переходим к сдвигу следующего бита младшего байта данных IN2
greater1:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop1; переходим к сдвигу следующего бита младшего байта данных IN2
; ******************ЗАГРУЗКА СРЕДНЕГО БАЙТА ДАННЫХ IN2*******************
equal1:
ldi prm1,0b11000001; загружаем в prm1 средний байт данных IN2
ldi temp,9; загружаем в temp число бит в байте+1
loop2:
dec temp; при обнулении temp - загружаем старший байт данных IN2
cpi temp, 0
breq equal2; при выполнении сдвига 8 раз - переход на equal2
lsr prm1; сдвигаем содержимое старшего байта данных IN2 на 1 разряд вправо
brcs greater2;проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop2; переходим к сдвигу следующего бита среднего байта данных IN2
greater2:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop2; переходим к сдвигу следующего бита среднего байта данных IN2
; ******************ЗАГРУЗКА СТАРШЕГО БАЙТА ДАННЫХ IN2*******************
equal2:
ldi prm1,0b00000000; загружаем в prm1 старший байт данных IN2
ldi temp,9; загружаем в temp число бит в байте+1
loop3:
dec temp; при обнулении temp - переходим к защелкиванию данных в LC72131
cpi temp, 0
breq equal3; при выполнении сдвига 8 раз - переход на equal3
lsr prm1; сдвигаем содержимое старшего байта данных IN2 на 1 разряд вправо
brcs greater3;проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop3; переходим к сдвигу следующего бита старшего байта данных IN2
greater3:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop3; переходим к сдвигу следующего бита старшего байта данных IN2
equal3:
cbi PORTC,CE; ставим CE=0, защелкиваем в LC72131 данные IN2
; и этим же разрешаем приём адреса IN1
;**********************************************************************
ldi prm1,0b00101000; загружаем в r19=prm1 адрес режима IN1
ldi temp,9; загружаем в r16=temp число бит в байте+1
; устанавливать CE=PA5=0 для разрешения LC72131 приема адреса IN1
;здесь не нужно, т.к. это сделано после окончания загрузки IN2
; **********************ЗАГРУЗКА АДРЕСА IN1*******************
loop4:
dec temp; при обнулении temp - загружаем младший байт данных IN1
cpi temp, 0
breq equal4; при выполнении сдвига 8 раз - переход на equal4
lsr prm1; сдвигаем содержимое адреса IN1 на 1 разряд вправо
brcs greater4;проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop4; переходим к сдвигу следующего бита адреса IN1
greater4:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop4; переходим к сдвигу следующего бита адреса IN1
; *****************ЗАГРУЗКА МЛАДШЕГО БАЙТА ДАННЫХ IN1*******************
equal4:
sbi PORTC,CE;ставим CE=1, разрешаем LC72131 прием данных IN1
ldi temp,9; загружаем в temp число бит в байте+1
loop5:
dec temp; при обнулении temp - загружаем средний байт данных IN1
cpi temp, 0
breq equal5; при выполнении сдвига 8 раз - переход на equal5
lsr YL; сдвигаем содержимое младшего байта данных IN1 на 1 разряд вправо
brcs greater5;проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop5; переходим к сдвигу следующего бита младшего байта данных IN1
greater5:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop5; переходим к сдвигу следующего бита младшего байта данных IN1
; ******************ЗАГРУЗКА СРЕДНЕГО БАЙТА ДАННЫХ IN1*******************
equal5:
ldi temp,9; загружаем в temp число бит в байте+1
loop6:
dec temp; при обнулении temp - загружаем старший байт данных IN1
cpi temp, 0
breq equal6; при выполнении сдвига 8 раз - переход на equal6
lsr YH; сдвигаем содержимое среднего байта данных IN1 на 1 разряд вправо
brcs greater6;проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop6; переходим к сдвигу следующего бита среднего байта данных IN1
greater6:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop6; переходим к сдвигу следующего бита среднего байта данных IN1
; ******************ЗАГРУЗКА СТАРШЕГО БАЙТА ДАННЫХ IN1*******************
equal6:
ldi prm1,0b01011011;загружаем старший байт данных IN1 0b01011011 для шага 12,5кГц
ldi temp,9; загружаем в temp число бит в байте+1
loop7:
dec temp; при обнулении temp - переходим к защелкиванию данных в LC72131
cpi temp, 0
breq equal7; при выполнении сдвига 8 раз - переход на equal7
lsr prm1; сдвигаем содержимое старшего байта данных IN1 на 1 разряд вправо
brcs greater7;проверяем разряд C SREG и в зависимости от него выодим "0" или "1"
cbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (0)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop7; переходим к сдвигу следующего бита старшего байта данных IN1
greater7:
sbi PORTC,D;ставим D=0, ВЫВОД ДАННЫХ (1)
sbi PORTC,CL;ставим CL=1, начало CL
cbi PORTC,CL;ставим CL=0, конец CL
rjmp loop7; переходим к сдвигу следующего бита старшего байта данных IN1
equal7:
cbi PORTC,CE; ставим CE=0, защелкиваем в LC72131 данные IN1
ret