Инструменты пользователя

Инструменты сайта


doc:1201:643.mgul.12013-01_12_01

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:1201:643.mgul.12013-01_12_01 [2017/02/22 21:50]
gotrum
doc:1201:643.mgul.12013-01_12_01 [2018/04/28 23:47] (текущий)
Строка 26: Строка 26:
 ====Текст программы telemetry_rev1-1.asm==== ====Текст программы telemetry_rev1-1.asm====
  
-<​hidden ​telemetry_rev1-1.asm>+<​hidden ​развернуть>​ 
 +<​code ​asm>
   ;​----------------------------------------------------   ;​----------------------------------------------------
   ; Program ​ : telemetry_rev1-1   ; Program ​ : telemetry_rev1-1
Строка 543: Строка 544:
   popf   popf
   ret   ret
 +  </​code>​
 </​hidden>​ </​hidden>​
  
 +\\
 ====Текст модуля 1wire.asm==== ====Текст модуля 1wire.asm====
-<file asm 1wire.asm> +<hidden развернуть>​ 
-;​1-wire_подпрограммы +<​code ​asm> 
-;​-------------------------------------------------------------------------------------------------------------- +  ;​1-wire_подпрограммы 
- +  ;​-------------------------------------------------------------------------------------------------------------- 
- +   
-W1_Sbros: ​    ; Сброс шины и проверка датчик на месте ли +   
-lds r16, W1_BIT ; Записываем в r16 ножку где датчик +  W1_Sbros: ​    ; Сброс шины и проверка датчик на месте ли 
-sbi W1_DDR, W1_BIT ; Ногу на выход +  lds r16, W1_BIT ; Записываем в r16 ножку где датчик 
-cbi W1_PORT, W1_BIT ; Опрокидываем вывод на землю +  sbi W1_DDR, W1_BIT ; Ногу на выход 
-rcall W1_DelayH ; Задержка 480 мкс, для сброса +  cbi W1_PORT, W1_BIT ; Опрокидываем вывод на землю 
-cbi W1_DDR, W1_BIT ; Ногу на вход +  rcall W1_DelayH ; Задержка 480 мкс, для сброса 
-rcall W1_DelayI ; Ждем тайм слот 70 мкс +  cbi W1_DDR, W1_BIT ; Ногу на вход 
-sbis W1_PIN, W1_BIT ; Пропускаем следующую строку,​ если бит порта в 1 +  rcall W1_DelayI ; Ждем тайм слот 70 мкс 
-ldi r17, 1  ; И установим сигнальный регистр в 1 +  sbis W1_PIN, W1_BIT ; Пропускаем следующую строку,​ если бит порта в 1 
-sbic W1_PIN, W1_BIT ; Пропускаем следующую строку,​ если бит порта в 0 +  ldi r17, 1  ; И установим сигнальный регистр в 1 
-ldi r17, 0  ; И установим сигнальный регистр в 0 +  sbic W1_PIN, W1_BIT ; Пропускаем следующую строку,​ если бит порта в 0 
-rcall W1_DelayJ ; Ждем тайм слот 410 мкс +  ldi r17, 0  ; И установим сигнальный регистр в 0 
-ret    ; Если датчик на месте, в r17 по выходу отсюда будет 1, в противном случае 0 +  rcall W1_DelayJ ; Ждем тайм слот 410 мкс 
- +  ret    ; Если датчик на месте, в r17 по выходу отсюда будет 1, в противном случае 0 
-W1_Address:​ +   
-clr r20 +  W1_Address:​ 
-read: +  clr r20 
-inc r20  ; Процедура считывания адреса датчиков DS18B20 +  read: 
-in r10,SREG +  inc r20  ; Процедура считывания адреса датчиков DS18B20 
-push r10 +  in r10,SREG 
-lpm r16,Z +  push r10 
-rcall ds_byte_wr +  lpm r16,Z 
-pop r10 +  rcall ds_byte_wr 
-out SREG,r10 +  pop r10 
-adiw ZH:ZL,1 +  out SREG,r10 
-cpi r20,8 +  adiw ZH:ZL,1 
-brne read +  cpi r20,8 
-ret +  brne read 
- +  ret 
-W1_ReadMem: ​    ; Чтение памяти регистров температуры +   
-ldi  r16, 0x55  ; Пошлем команду 0x55, это сравнить уникальный номер датчика +  W1_ReadMem: ​    ; Чтение памяти регистров температуры 
-rcall  ds_byte_wr ​ ; Так как он у нас один на проводе +  ldi  r16, 0x55  ; Пошлем команду 0x55, это сравнить уникальный номер датчика 
-rcall  W1_Address ; Отправляем адрес датчика +  rcall  ds_byte_wr ​ ; Так как он у нас один на проводе 
-ldi  r16, 0xBE  ; Говорим датчику,​ что мы сейчас будем читать +  rcall  W1_Address ; Отправляем адрес датчика 
-rcall  ds_byte_wr ​ ; Запуливаем байт +  ldi  r16, 0xBE  ; Говорим датчику,​ что мы сейчас будем читать 
-rcall ds_byte_rd ​ ; А тут уже начинаем читать,​ прочитали первый +  rcall  ds_byte_wr ​ ; Запуливаем байт 
-st Y, r16  ; И запулили его в память,​ по метке Trm +  rcall ds_byte_rd ​ ; А тут уже начинаем читать,​ прочитали первый 
-adiw YH:YL,1 +  st Y, r16  ; И запулили его в память,​ по метке Trm 
-rcall ds_byte_rd ​ ; Читаем второй +  adiw YH:YL,1 
-st Y, r16  ; И запулили его в память,​ по метке Trm+1 +  rcall ds_byte_rd ​ ; Читаем второй 
-adiw YH:YL,1 +  st Y, r16  ; И запулили его в память,​ по метке Trm+1 
-rcall W1_Sbros ​ ; Сбрасываем шину и проверяем есть ли датчик +  adiw YH:YL,1 
-;ldi ZL,​LOW(Addr2*2) +  rcall W1_Sbros ​ ; Сбрасываем шину и проверяем есть ли датчик 
-;ldi ZH,​HIGH(Addr2*2) +  ;ldi ZL,​LOW(Addr2*2) 
-;clr r20 +  ;ldi ZH,​HIGH(Addr2*2) 
-ret +  ;clr r20 
- +  ret 
-W1_ConvTemp: ​    ; Подпрограмма конвертирования температуры +   
-ldi r16, 0xCC  ; Пропускаем уникальный номер датчика +  W1_ConvTemp: ​    ; Подпрограмма конвертирования температуры 
-rcall ds_byte_wr +  ldi r16, 0xCC  ; Пропускаем уникальный номер датчика 
-ldi r16, 0x44  ; Говорим что надо бы сконвертировать температуру,​ этот процесс занимает 750 +  rcall ds_byte_wr 
-rcall ds_byte_wr ​ ; миллисекунд,​ поэтому идем что-то делать,​ или ленится +  ldi r16, 0x44  ; Говорим что надо бы сконвертировать температуру,​ этот процесс занимает 750 
-ret +  rcall ds_byte_wr ​ ; миллисекунд,​ поэтому идем что-то делать,​ или ленится 
- +  ret 
-W1_Init_12bit: ​    ; Подпрограмма перестройки на 12 бит температуры +   
-ldi r16, 0xCC   ; Пропускаем уникальный номер датчика +  W1_Init_12bit: ​    ; Подпрограмма перестройки на 12 бит температуры 
-rcall ds_byte_wr ​ ; Спуливаем в датчик +  ldi r16, 0xCC   ; Пропускаем уникальный номер датчика 
-ldi r16, 0x4E  ; Говорим что сейчас будем писать в RAM регистры датчика +  rcall ds_byte_wr ​ ; Спуливаем в датчик 
-rcall ds_byte_wr ; Спуливаем в датчик +  ldi r16, 0x4E  ; Говорим что сейчас будем писать в RAM регистры датчика 
-ldi r16, 0xFF ; 0xFF записываем в первые 2 регистра,​ это регистры температуры,​ он нам не  +  rcall ds_byte_wr ; Спуливаем в датчик 
-rcall ds_byte_wr ; нужен, поэтому их оставляем в стандартном состоянии +  ldi r16, 0xFF ; 0xFF записываем в первые 2 регистра,​ это регистры температуры,​ он нам не  
-ldi r16, 0xFF ; 0xFF второй байт температуры +  rcall ds_byte_wr ; нужен, поэтому их оставляем в стандартном состоянии 
-rcall ds_byte_wr ; Спуливаем на порт +  ldi r16, 0xFF ; 0xFF второй байт температуры 
-ldi r16, 0x7F ; А вот тут говорим что 12 бит - 7F, или 1F  - 9бит, 3F - 10 бит, 5F - 11 бит  +  rcall ds_byte_wr ; Спуливаем на порт 
-rcall ds_byte_wr ; Спуливаем на порт +  ldi r16, 0x7F ; А вот тут говорим что 12 бит - 7F, или 1F  - 9бит, 3F - 10 бит, 5F - 11 бит  
-ret +  rcall ds_byte_wr ; Спуливаем на порт 
- +  ret 
-ds_byte_rd: ​    ; Подпрограмма чтения данных в регистр r16 с 1 Wire +   
-ldi r17, 8   ; Пишем в r17 - 8, т.к. у нас в бит в регистре +  ds_byte_rd: ​    ; Подпрограмма чтения данных в регистр r16 с 1 Wire 
-clr r16   ;​Чистим r16, сюда будем читать данные +  ldi r17, 8   ; Пишем в r17 - 8, т.к. у нас в бит в регистре 
-ds_byte_rd_0:​ +  clr r16   ;​Чистим r16, сюда будем читать данные 
-sbi W1_DDR, W1_BIT ; Вывод на выход +  ds_byte_rd_0:​ 
-cbi W1_PORT, W1_BIT ; Опрокидываем вывод на землю +  sbi W1_DDR, W1_BIT ; Вывод на выход 
-rcall W1_DelayA ; Ждем 6 микросекунд +  cbi W1_PORT, W1_BIT ; Опрокидываем вывод на землю 
-cbi W1_DDR, W1_BIT ; Вывод на вход +  rcall W1_DelayA ; Ждем 6 микросекунд 
-rcall W1_DelayE ; Ждем 9 микросекунд +  cbi W1_DDR, W1_BIT ; Вывод на вход 
-sbis W1_PIN, W1_BIT +  rcall W1_DelayE ; Ждем 9 микросекунд 
-clc   ; Очищаем бит C = 0 +  sbis W1_PIN, W1_BIT 
-sbic W1_PIN, W1_BIT +  clc   ; Очищаем бит C = 0 
-sec   ; Очищаем бит C = 1 +  sbic W1_PIN, W1_BIT 
-ror r16  ; Производим циклический сдвиг вправо через С +  sec   ; Очищаем бит C = 1 
-rcall W1_DelayF ; Ждем 55 микросекунд +  ror r16  ; Производим циклический сдвиг вправо через С 
-dec r17  ;​Понижаем на 1 регистр r17 +  rcall W1_DelayF ; Ждем 55 микросекунд 
-brne ds_byte_rd_0 ; если не равен 0 вращаемся в цикле +  dec r17  ;​Понижаем на 1 регистр r17 
-ret +  brne ds_byte_rd_0 ; если не равен 0 вращаемся в цикле 
- +  ret 
-ds_byte_wr: ​    ; Подпрограмма записи данных из регистра r16 в датчик  +   
-ldi r17, 8  ; Пишем в r17 - 8, т.к. у нас в бит в регистре +  ds_byte_wr: ​    ; Подпрограмма записи данных из регистра r16 в датчик  
-ds_byte_wr0:​  +  ldi r17, 8  ; Пишем в r17 - 8, т.к. у нас в бит в регистре 
-sbi W1_DDR, W1_BIT ; Вывод на выход +  ds_byte_wr0:​  
-cbi W1_PORT, W1_BIT ; Опрокидываем вывод на землю +  sbi W1_DDR, W1_BIT ; Вывод на выход 
-sbrc r16, 0  ; Проверим,​ в r16 бит 0 очищен или установлен  +  cbi W1_PORT, W1_BIT ; Опрокидываем вывод на землю 
-rjmp ds_byte_write_1 ; Если установлен перейдем по этой метке +  sbrc r16, 0  ; Проверим,​ в r16 бит 0 очищен или установлен  
-rjmp ds_byte_write_0 ; Если очищен перейдем по этой метке +  rjmp ds_byte_write_1 ; Если установлен перейдем по этой метке 
-ds_byte_wr1:​ +  rjmp ds_byte_write_0 ; Если очищен перейдем по этой метке 
-lsr r16  ; Логический сдвиг вправо +  ds_byte_wr1:​ 
-dec r17  ; Понижаем r17 на 1  +  lsr r16  ; Логический сдвиг вправо 
-brne ds_byte_wr0 ; Если не равен 0, вращаемся в цикле +  dec r17  ; Понижаем r17 на 1  
-ret   ; Выход из подпрограммы +  brne ds_byte_wr0 ; Если не равен 0, вращаемся в цикле 
- +  ret   ; Выход из подпрограммы 
-ds_byte_write_0: ​   ; Запись 0 +   
-rcall W1_DelayC ; Ждем 60 микросекунд +  ds_byte_write_0: ​   ; Запись 0 
-cbi W1_DDR, W1_BIT ; Вывод на вход +  rcall W1_DelayC ; Ждем 60 микросекунд 
-rcall W1_DelayD ; Ждем 10 микросекунд +  cbi W1_DDR, W1_BIT ; Вывод на вход 
-rjmp ds_byte_wr1 +  rcall W1_DelayD ; Ждем 10 микросекунд 
- +  rjmp ds_byte_wr1 
-ds_byte_write_1: ​  ; Запись 1 +   
-rcall W1_DelayA ; Ждем 6 микросекунд +  ds_byte_write_1: ​  ; Запись 1 
-cbi W1_DDR, W1_BIT ; Вывод на вход +  rcall W1_DelayA ; Ждем 6 микросекунд 
-rcall W1_DelayB ; Ждем 64 микросекунд +  cbi W1_DDR, W1_BIT ; Вывод на вход 
-rjmp ds_byte_wr1 +  rcall W1_DelayB ; Ждем 64 микросекунд 
- +  rjmp ds_byte_wr1 
-W1_DelayA: ​    ; Задержка 6 mcs +   
-ldi XH, high(FREQ/​2000000) +  W1_DelayA: ​    ; Задержка 6 mcs 
-ldi XL, low(FREQ/​2000000) +  ldi XH, high(FREQ/​2000000) 
-rcall W1_Delay +  ldi XL, low(FREQ/​2000000) 
-ret +  rcall W1_Delay 
-W1_DelayB: ​    ; Задержка 64 mcs +  ret 
-ldi XH, high(FREQ/​130000) +  W1_DelayB: ​    ; Задержка 64 mcs 
-ldi XL, low(FREQ/​130000) +  ldi XH, high(FREQ/​130000) 
-rcall W1_Delay +  ldi XL, low(FREQ/​130000) 
-ret +  rcall W1_Delay 
-W1_DelayC: ​    ; Задержка 60 mcs +  ret 
-ldi XH, high(FREQ/​136000) +  W1_DelayC: ​    ; Задержка 60 mcs 
-ldi XL, low(FREQ/​136000) +  ldi XH, high(FREQ/​136000) 
-rcall W1_Delay +  ldi XL, low(FREQ/​136000) 
-ret +  rcall W1_Delay 
-W1_DelayD: ​    ; Задержка 10 mcs +  ret 
-ldi XH, high(FREQ/​1000000) +  W1_DelayD: ​    ; Задержка 10 mcs 
-ldi XL, low(FREQ/​1000000) +  ldi XH, high(FREQ/​1000000) 
-rcall W1_Delay +  ldi XL, low(FREQ/​1000000) 
-ret +  rcall W1_Delay 
-W1_DelayE: ​    ; Задержка 9 mcs +  ret 
-ldi XH, high(FREQ/​1200000) +  W1_DelayE: ​    ; Задержка 9 mcs 
-ldi XL, low(FREQ/​1200000) +  ldi XH, high(FREQ/​1200000) 
-rcall W1_Delay +  ldi XL, low(FREQ/​1200000) 
-ret +  rcall W1_Delay 
-W1_DelayF: ​    ; Задержка 55 mcs +  ret 
-ldi XH, high(FREQ/​150000) +  W1_DelayF: ​    ; Задержка 55 mcs 
-ldi XL, low(FREQ/​150000) +  ldi XH, high(FREQ/​150000) 
-rcall W1_Delay +  ldi XL, low(FREQ/​150000) 
-ret +  rcall W1_Delay 
-W1_DelayH: ​    ; Задержка 480 mcs +  ret 
-ldi XH, high(FREQ/​16664) +  W1_DelayH: ​    ; Задержка 480 mcs 
-ldi XL, low(FREQ/​16664) +  ldi XH, high(FREQ/​16664) 
-rcall W1_Delay +  ldi XL, low(FREQ/​16664) 
-ret +  rcall W1_Delay 
-W1_DelayI: ​    ; Задержка 70 mcs +  ret 
-ldi XH, high(FREQ/​116000) +  W1_DelayI: ​    ; Задержка 70 mcs 
-ldi XL, low(FREQ/​116000) +  ldi XH, high(FREQ/​116000) 
-rcall W1_Delay +  ldi XL, low(FREQ/​116000) 
-ret +  rcall W1_Delay 
-W1_DelayJ: ​    ; Задержка 410 mcs +  ret 
-ldi XH, high(FREQ/​19512) +  W1_DelayJ: ​    ; Задержка 410 mcs 
-ldi XL, low(FREQ/​19512) +  ldi XH, high(FREQ/​19512) 
-rcall W1_Delay +  ldi XL, low(FREQ/​19512) 
-ret +  rcall W1_Delay 
-W1_Delay: ​    ; Подпрограмма воспроизведения задержки +  ret 
-sbiw XH:XL, 1 ; Вычитаем единицу из регистровой пары +  W1_Delay: ​    ; Подпрограмма воспроизведения задержки 
-brne W1_Delay ; Если не равно 0 крутимся в цикле +  sbiw XH:XL, 1 ; Вычитаем единицу из регистровой пары 
-ret   ; Выход из подпрограммы +  brne W1_Delay ; Если не равно 0 крутимся в цикле 
-;​-------------------------------------------------------------------------------------------------------------- +  ret   ; Выход из подпрограммы 
-;​Конец_1-wire_подпрограмм +  ;​-------------------------------------------------------------------------------------------------------------- 
-</file+  ;​Конец_1-wire_подпрограмм 
 +</code> 
 +</hidden
 +\\
 ====Текст модуля hextobcd.asm==== ====Текст модуля hextobcd.asm====
-<file asm hextobcd.asm> +<hidden развернуть>​ 
-.def fASCIIL =r16 +<​code ​asm> 
-.def tASCII0 =r16 +  .def fASCIIL =r16 
-.def fASCIIH =r17 +  .def tASCII0 =r16 
-.def tASCII2 =r25 +  .def fASCIIH =r17 
-.def tASCII3 =r19 +  .def tASCII2 =r25 
-.def tASCII4 =r20 +  .def tASCII3 =r19 
-.def tASCII1 =r21 +  .def tASCII4 =r20 
-.def cnt16a =r21 +  .def tASCII1 =r21 
-.def tmp16a =r22 +  .def cnt16a =r21 
-.def tmp16b =r23 +  .def tmp16a =r22 
- +  .def tmp16b =r23 
-;***** Код +   
-print_ascii:​ +  ;***** Код 
-check1 r20 +  print_ascii:​ 
-check1 r19 +  check1 r20 
-check1 r25 +  check1 r19 
-check1 r21 +  check1 r25 
-check1 r16 +  check1 r21 
-ret +  check1 r16 
-bin2ASCII15:​  +  ret 
-ldi tmp16a, low(10000) +  bin2ASCII15:​  
-ldi tmp16b, high(10000) +  ldi tmp16a, low(10000) 
-rcall bin2ASCII_digit +  ldi tmp16b, high(10000) 
-mov tASCII4, cnt16a +  rcall bin2ASCII_digit 
-ldi tmp16a, low(1000) +  mov tASCII4, cnt16a 
-ldi tmp16b, high(1000) +  ldi tmp16a, low(1000) 
-rcall bin2ASCII_digit +  ldi tmp16b, high(1000) 
-mov tASCII3, cnt16a +  rcall bin2ASCII_digit 
-ldi tmp16a, low(100) +  mov tASCII3, cnt16a 
-ldi tmp16b, high(100) +  ldi tmp16a, low(100) 
-rcall bin2ASCII_digit +  ldi tmp16b, high(100) 
-mov tASCII2, cnt16a +  rcall bin2ASCII_digit 
-ldi tmp16a, low(10) +  mov tASCII2, cnt16a 
-ldi tmp16b, high(10) +  ldi tmp16a, low(10) 
-rcall bin2ASCII_digit +  ldi tmp16b, high(10) 
-ldi r17,0x30 +  rcall bin2ASCII_digit 
-add r16,r17 +  ldi r17,0x30 
-add r21,r17 +  add r16,r17 
-add r25,r17 +  add r21,r17 
-add r19,r17 +  add r25,r17 
-add r20,r17 +  add r19,r17 
-rcall print_ascii +  add r20,r17 
-ret +  rcall print_ascii 
-bin2ASCII_digit:​  +  ret 
-ldi cnt16a, -1 +  bin2ASCII_digit:​  
-bin2ASCII_digit_loop:​  +  ldi cnt16a, -1 
-inc cnt16a +  bin2ASCII_digit_loop:​  
-sub fASCIIL, tmp16a +  inc cnt16a 
-sbc fASCIIH, tmp16b +  sub fASCIIL, tmp16a 
-brsh bin2ASCII_digit_loop +  sbc fASCIIH, tmp16b 
-add fASCIIL, tmp16a +  brsh bin2ASCII_digit_loop 
-adc fASCIIH, tmp16b +  add fASCIIL, tmp16a 
- +  adc fASCIIH, tmp16b 
-ret +   
- +  ret 
-</file+</​code>​ 
 +</hidden
 +\\
 ====Текст модуля iterrupts.asm==== ====Текст модуля iterrupts.asm====
-<file asm iterrupts.asm> +<hidden развернуть>​ 
-;​Векторы_прерываний +<​code ​asm> 
-;​----------------------------------------------------------------------- +  ;​Векторы_прерываний 
- +  ;​----------------------------------------------------------------------- 
-.org 0x0000 ​   ; Reset +   
-jmp RESET +  .org 0x0000 ​   ; Reset 
-.org 0x0002 ​   ; External Interrupt Request 0 +  jmp RESET 
-reti +  .org 0x0002 ​   ; External Interrupt Request 0 
-.org 0x0004 ​   ; External Interrupt Request 1 +  reti 
-reti +  .org 0x0004 ​   ; External Interrupt Request 1 
-.org 0x0006 ​   ; Pin Change Interrupt Request 0 +  reti 
-reti +  .org 0x0006 ​   ; Pin Change Interrupt Request 0 
-.org 0x0008 ​   ; Pin Change Interrupt Request 1 +  reti 
-reti +  .org 0x0008 ​   ; Pin Change Interrupt Request 1 
-.org 0x000A ​   ; Pin Change Interrupt Request 2 +  reti 
-reti +  .org 0x000A ​   ; Pin Change Interrupt Request 2 
-.org 0x000C ​   ; Watchdog Time-out Interrupt +  reti 
-reti +  .org 0x000C ​   ; Watchdog Time-out Interrupt 
-.org 0x000E ​   ; Timer/​Counter 2 Compare Match A +  reti 
-reti +  .org 0x000E ​   ; Timer/​Counter 2 Compare Match A 
-.org 0x0010 ​   ; Timer/​Counter 2 Compare Match B +  reti 
-reti +  .org 0x0010 ​   ; Timer/​Counter 2 Compare Match B 
-.org 0x0012 ​   ; Timer/​Counter 2 Overflow +  reti 
-jmp Board_timer +  .org 0x0012 ​   ; Timer/​Counter 2 Overflow 
-.org 0x0014 ​   ; Timer/​Counter 1 Capture Event +  jmp Board_timer 
-reti +  .org 0x0014 ​   ; Timer/​Counter 1 Capture Event 
-.org 0x0016 ​   ; Timer/​Counter 1 Compare Match A +  reti 
-reti +  .org 0x0016 ​   ; Timer/​Counter 1 Compare Match A 
-.org 0x0018 ​   ; Timer/​Counter 1 Compare Match B +  reti 
-reti +  .org 0x0018 ​   ; Timer/​Counter 1 Compare Match B 
-.org 0x001A ​   ; Timer/​Counter 1 Overflow +  reti 
-rjmp W1_timer +  .org 0x001A ​   ; Timer/​Counter 1 Overflow 
-;reti +  rjmp W1_timer 
-.org 0x001C ​   ; Timer/​Counter 0 Compare Match A +  ;reti 
-reti +  .org 0x001C ​   ; Timer/​Counter 0 Compare Match A 
-.org 0x001E ​   ; Timer/​Counter 0 Compare Match B +  reti 
-reti +  .org 0x001E ​   ; Timer/​Counter 0 Compare Match B 
-.org 0x0020 ​   ; Timer/​Counter 0 Overflow +  reti 
-reti +  .org 0x0020 ​   ; Timer/​Counter 0 Overflow 
-.org 0x0022 ​   ; SPI Serial Transfer Complete +  reti 
-reti +  .org 0x0022 ​   ; SPI Serial Transfer Complete 
-.org 0x0024 ​   ; USART, Rx Complete +  reti 
-reti +  .org 0x0024 ​   ; USART, Rx Complete 
-.org 0x0026 ​   ; USART, UDR Empty +  reti 
-reti +  .org 0x0026 ​   ; USART, UDR Empty 
-.org 0x0028 ​   ; USART, Tx Complete +  reti 
-reti +  .org 0x0028 ​   ; USART, Tx Complete 
-.org 0x002A ​   ; ADC Conversion Complete +  reti 
-jmp adc_conv +  .org 0x002A ​   ; ADC Conversion Complete 
-.org 0x002C ​   ; EEPROM Ready +  jmp adc_conv 
-reti +  .org 0x002C ​   ; EEPROM Ready 
-.org 0x002E ​   ; Analog Comparator +  reti 
-reti +  .org 0x002E ​   ; Analog Comparator 
-.org 0x0030 ​   ; Two-wire Serial Interface +  reti 
-jmp TWI_int +  .org 0x0030 ​   ; Two-wire Serial Interface 
-;reti +  jmp TWI_int 
-.org 0x0032 ​   ; Store Program Memory Read +  ;reti 
-reti +  .org 0x0032 ​   ; Store Program Memory Read 
- +  reti 
-.org INT_VECTORS_SIZE +   
-</file+  .org INT_VECTORS_SIZE 
- +</code
 +</​hidden>​ 
 +\\
 ====Текст модуля macr.asm==== ====Текст модуля macr.asm====
-<file asm macr.asm+<hidden развернуть
- +<code asm> 
-;​Макросы +  ;​Макросы 
-;​----------------------------------------------------------------------- +  ;​----------------------------------------------------------------------- 
-.macro pushf +  .macro pushf 
-push r10 +  push r10 
-in r10,SREG +  in r10,SREG 
-push r10 +  push r10 
-.endm +  .endm 
-.macro popf +  .macro popf 
-pop r10 +  pop r10 
-out SREG,r10 +  out SREG,r10 
-pop r10 +  pop r10 
-.endm +  .endm 
-.macro pushr +  .macro pushr 
-push r10 +  push r10 
-in r10,SREG +  in r10,SREG 
-push r10 +  push r10 
-push r16 +  push r16 
-push r17 +  push r17 
-push r18 +  push r18 
-push r19 +  push r19 
-push r20 +  push r20 
-push r21 +  push r21 
-push r22 +  push r22 
-push r23 +  push r23 
-push r25 +  push r25 
-push r26 +  push r26 
-push r27 +  push r27 
-push r28 +  push r28 
-push r29 +  push r29 
-.endm +  .endm 
-.macro popr +  .macro popr 
-pop r29 +  pop r29 
-pop r28 +  pop r28 
-pop r27 +  pop r27 
-pop r26 +  pop r26 
-pop r25 +  pop r25 
-pop r23  +  pop r23  
-pop r22 +  pop r22 
-pop r21 +  pop r21 
-pop r20 +  pop r20 
-pop r19 +  pop r19 
-pop r18 +  pop r18 
-pop r17 +  pop r17 
-pop r16 +  pop r16 
-pop r10 +  pop r10 
-out SREG,r10 +  out SREG,r10 
-pop r10 +  pop r10 
-.endm +  .endm 
-.macro check +  .macro check 
-push @0 +  push @0 
-lds @0,@1 +  lds @0,@1 
-sts UDR0,@0 +  sts UDR0,@0 
-check_loop: ldi @0,UCSR0A +  check_loop: ldi @0,UCSR0A 
-sbrs @0,TXC0 +  sbrs @0,TXC0 
-rjmp check_loop +  rjmp check_loop 
-pop @0 +  pop @0 
-rcall Delay +  rcall Delay 
-.endm +  .endm 
- +   
-.macro check_kosv +  .macro check_kosv 
-push @0 +  push @0 
-ld @0,@1 +  ld @0,@1 
-sts UDR0,@0 +  sts UDR0,@0 
-check_loop1:​ ldi @0,UCSR0A +  check_loop1:​ ldi @0,UCSR0A 
-sbrs @0,TXC0 +  sbrs @0,TXC0 
-rjmp check_loop1 +  rjmp check_loop1 
-pop @0 +  pop @0 
-rcall Delay +  rcall Delay 
-.endm +  .endm 
-.macro check1 +  .macro check1 
-sts UDR0,@0 +  sts UDR0,@0 
-check_loop1:​ ldi @0,UCSR0A +  check_loop1:​ ldi @0,UCSR0A 
-sbrs @0,TXC0 +  sbrs @0,TXC0 
-rjmp check_loop1 +  rjmp check_loop1 
-rcall Delay +  rcall Delay 
-.endm +  .endm 
- +   
-.macro tabulate +  .macro tabulate 
-push r16 +  push r16 
-ldi r16,0x09 +  ldi r16,0x09 
-check1 r16 +  check1 r16 
-pop r16 +  pop r16 
-.endm +  .endm 
-.macro newline +  .macro newline 
-push r16 +  push r16 
-ldi r16,0x0D +  ldi r16,0x0D 
-check1 r16 +  check1 r16 
-ldi r16,0x0A +  ldi r16,0x0A 
-check1 r16 +  check1 r16 
-pop r16 +  pop r16 
-.endm +  .endm 
-</file>+</code> 
 +</hidden>
  
 +\\
 ====Текст модуля twi_lib.asm==== ====Текст модуля twi_lib.asm====
-<file asm twi_lib.asm>+<hidden развернуть>​ 
 +<​code ​asm>
  
-;​Библиотека_TWI +  ​;​Библиотека_TWI 
-;​----------------------------------------------------------------------- +  ;​----------------------------------------------------------------------- 
- +   
-;======= Стартовая посылка по шине i2c ================================================= +  ;======= Стартовая посылка по шине i2c ================================================= 
-i2c_start:​ +  i2c_start:​ 
-push r16  +  push r16  
-ldi r16,​(1<<​TWINT)|(1<<​TWSTA)|(1<<​TWEN)|(1<<​TWIE) ; Выполняем посылку стартовой комбинации +  ldi r16,​(1<<​TWINT)|(1<<​TWSTA)|(1<<​TWEN)|(1<<​TWIE) ; Выполняем посылку стартовой комбинации 
-sts TWCR,r16 ; Посылаем полученный байт в TWCR +  sts TWCR,r16 ; Посылаем полученный байт в TWCR 
-rcall i2c_wait ; Ожидание формирования start в блоке TWI +  rcall i2c_wait ; Ожидание формирования start в блоке TWI 
-pop r16 ; Возвращаем данные в r16 из стека +  pop r16 ; Возвращаем данные в r16 из стека 
-ret +  ret 
-;======= Стоповая посылка по шине i2c ================================================== +  ;======= Стоповая посылка по шине i2c ================================================== 
-i2c_stop: +  i2c_stop: 
-push r16  +  push r16  
-ldi r16,​(1<<​TWINT)|(1<<​TWSTO)|(1<<​TWEN) ; Отправляем стоповую посылку +  ldi r16,​(1<<​TWINT)|(1<<​TWSTO)|(1<<​TWEN) ; Отправляем стоповую посылку 
-sts TWCR,r16 ; Посылаем полученный байт в TWCR +  sts TWCR,r16 ; Посылаем полученный байт в TWCR 
-pop r16 ; Возвращаем данные в r16 из стека +  pop r16 ; Возвращаем данные в r16 из стека 
-ret +  ret 
-;======= Посылка байта информации по шине i2c ========================================== +  ;======= Посылка байта информации по шине i2c ========================================== 
-i2c_send: +  i2c_send: 
-push r16 +  push r16 
-sts TWDR,r16 ; Записываем передаваемый байт в регистр TWDR +  sts TWDR,r16 ; Записываем передаваемый байт в регистр TWDR 
-ldi r16,​(1<<​TWINT)|(1<<​TWEN)|(1<<​TWIE) ; Формируем байт, отвечающий  +  ldi r16,​(1<<​TWINT)|(1<<​TWEN)|(1<<​TWIE) ; Формируем байт, отвечающий  
-; за пересылку информационного байта +  ; за пересылку информационного байта 
-sts TWCR,r16 ; Посылаем полученный байт в TWCR +  sts TWCR,r16 ; Посылаем полученный байт в TWCR 
-rcall i2c_wait ; Ожидание окончания пересылки байта +  rcall i2c_wait ; Ожидание окончания пересылки байта 
-pop r16 ; Возвращаем данные в r16 из стека +  pop r16 ; Возвращаем данные в r16 из стека 
-ret +  ret 
-;======= Приём информационного байта по шине i2c ======================================= +  ;======= Приём информационного байта по шине i2c ======================================= 
-i2c_receive:​ +  i2c_receive:​ 
-; Принятый байт помещается в регистр r16, поэтому рекомендуется  +  ; Принятый байт помещается в регистр r16, поэтому рекомендуется  
-; продумать программу так, чтобы в этот момент в нём не было  +  ; продумать программу так, чтобы в этот момент в нём не было  
-; важной информации,​ байт не сохраняется в стеке в коде данной  +  ; важной информации,​ байт не сохраняется в стеке в коде данной  
-; процедуры +  ; процедуры 
-ldi r16,​(1<<​TWINT)|(1<<​TWEN)|(1<<​TWEA)|(1<<​TWIE) ; Формируем байт, отвечающий за прием  +  ldi r16,​(1<<​TWINT)|(1<<​TWEN)|(1<<​TWEA)|(1<<​TWIE) ; Формируем байт, отвечающий за прием  
-sts TWCR,r16 ; Посылаем полученный байт в TWCR +  sts TWCR,r16 ; Посылаем полученный байт в TWCR 
-rcall i2c_wait ; Ожидание окончания приёма байта +  rcall i2c_wait ; Ожидание окончания приёма байта 
-lds r16,TWDR ; Считываем полученную информацию из TWDR +  lds r16,TWDR ; Считываем полученную информацию из TWDR 
-ret +  ret 
-;======= Приём последнего байта (NACK) ================================================= +  ;======= Приём последнего байта (NACK) ================================================= 
-i2c_receive_last:​ +  i2c_receive_last:​ 
-; Принятый байт помещается в регистр r16, поэтому рекомендуется  +  ; Принятый байт помещается в регистр r16, поэтому рекомендуется  
-; продумать программу так, чтобы в этот момент в нём не было  +  ; продумать программу так, чтобы в этот момент в нём не было  
-; важной информации,​ байт не сохраняется в стеке в коде данной  +  ; важной информации,​ байт не сохраняется в стеке в коде данной  
-; процедуры +  ; процедуры 
-ldi r16,​(1<<​TWINT)|(1<<​TWEN)|(1<<​TWIE) ; Формируем байт, отвечающий за прием информационного байта +  ldi r16,​(1<<​TWINT)|(1<<​TWEN)|(1<<​TWIE) ; Формируем байт, отвечающий за прием информационного байта 
-sts TWCR,r16 ; Посылаем полученный байт в TWCR +  sts TWCR,r16 ; Посылаем полученный байт в TWCR 
-rcall i2c_wait ; Ожидание окончания приёма байта +  rcall i2c_wait ; Ожидание окончания приёма байта 
-lds r16,TWDR ; Считываем полученную информацию из TWDR +  lds r16,TWDR ; Считываем полученную информацию из TWDR 
-ret +  ret 
-;======= Ожидание готовности TWI ======================================================= +  ;======= Ожидание готовности TWI ======================================================= 
-i2c_wait: +  i2c_wait: 
-lds r16,TWCR ; Загружаем значение из TWCR в r16 +  lds r16,TWCR ; Загружаем значение из TWCR в r16 
-sbrs r16,TWINT ; Функция ожидания выполняется до тех пор, пока поднят флаг  +  sbrs r16,TWINT ; Функция ожидания выполняется до тех пор, пока поднят флаг  
-; прерывания в 1 +  ; прерывания в 1 
-rjmp i2c_wait +  rjmp i2c_wait 
-ret +  ret 
-;​======================================================================================= +  ;​======================================================================================= 
-</file>+</code> 
 +</hidden>
doc/1201/643.mgul.12013-01_12_01.1487789417.txt.gz · Последние изменения: 2018/04/28 23:47 (внешнее изменение)