Все компилируется И ГЕНЕРИРУЕТСЯ нормально
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено =AVR= 30 июня 2005 г. 15:18
В ответ на: Ответ: отправлено Aleksey75 30 июня 2005 г. 15:04

Добавил только nolist/list вокруг "include", чтобы не засорять листинг, и сменил "include" на свой такой же, но из другого (default) пути.

Вот листинг:

AVRASM ver. 1.77.3 C:\XAVR\PROBE408\Test\Test.asm Thu Jun 30 15:05:32 2005



.nolist
.def tmp=r16
.def xo=r17
.def yo=r18
.def xlo=r19
.def xhi=r20
.def ylo=r21
.def yhi=r22
.def ko=r23
.equ xin=PD0
.equ yin=PD1
.equ offin=PD2
.equ blok=PD3
.cseg
.org 0
000000 c00a rjmp RESET
000001 0000 nop ;rjmp EXT_INT0
000002 0000 nop ;rjmp EXT_INT1
000003 0000 nop ;rjmp TIM_CAPT1
000004 0000 nop ;rjip TIM_COMP1
000005 0000 nop ;rjip TIM_OVF1
000006 0000 nop ;rjip TIM_OVF0
000007 0000 nop ;rjip UART_RXC
000008 0000 nop ;rjip UART_DRE
000009 0000 nop ;rjip UART_TXC
00000a 0000 nop ;rjip ANA_COMPldi tmp,low(RAMEND) ;загрузить low(RAMEND) в tmp
00000b e50f RESET: ldi tmp,low(RAMEND) ;определение начала
00000c bf0d out spl,tmp ;определить расположение стека
00000d 2700 clr tmp
00000e e008 ldi tmp,0x08 ;00001000
00000f bb01 out DDRD,tmp ;указать направление портов
000010 ef0f ldi tmp,0xff ;загрузить в tmp 11111111
000011 bb02 out PORTD,tmp ;на всех ногах D = 1
000012 bb00 out PIND,tmp ;!!!!!!!!!!!!!!!!!!!
;=====================================================================================
;Подсчёт длительности импульсов
;=====================================================================================
000013 e072 ldi ko,0x02
Schet: ;метка проверки импульсов
000014 d04b rcall off
000015 e000 ldi tmp,0x00
000016 bf02 out TCNT0,tmp ;очистить таймер 0
000017 e002 s: ldi tmp,0x02 ;
000018 9b80 sbis PIND,0 ;проруск rcall пока не появиться 1 на Xin
000019 cffd rjmp s ;перейти к s
00001a bf03 out TCCR0,tmp ;запустить таймер 0
00001b e000 r: ldi tmp,0x00 ;tmp=00000000
00001c 9980 sbic PIND,0 ;проруск rcall пока не появиться 0 на Xin
00001d cffd rjmp r ;перейти к r
00001e bf03 out TCCR0,tmp ;Остановить таймер
00001f e312 ldi xo,TCNT0 ;Скопировать значение таймера в X
000020 e000 ldi tmp,0x00
000021 bf02 out TCNT0,tmp ;очистить таймер 0
000022 e002 s1: ldi tmp,0x02 ;
000023 9b81 sbis PIND,1 ;проруск rcall пока не появиться 1 на Yin
000024 cffd rjmp s1 ;перейти к s
000025 bf03 out TCCR0,tmp ;запустить таймер 0
000026 e000 r1: ldi tmp,0x00 ;tmp=00000000
000027 9981 sbic PIND,1 ;проруск rcall пока не появиться 0 на yin
000028 cffd rjmp r1 ;перейти к r
000029 bf03 out TCCR0,tmp ;Остановить таймер
00002a e322 ldi yo,TCNT0 ;Скопировать значение таймера в y
;=====================================================================================
;Чуствительность
;=====================================================================================
00002b d034 rcall off
00002c 2f01 kalib: mov tmp,xo ;загрузить в tmp x
00002d 0f07 add tmp,ko ;сложить tmp и k
00002e 2f40 mov xhi,tmp ;cохранить xhi
00002f 2f01 mov tmp,xo ;загрузить в tmp x
000030 1b07 sub tmp,ko ;Вычесть tmp и k
000031 2f30 mov xlo,tmp ;cохранить xlo
000032 2f02 mov tmp,yo ;загрузить в tmp y
000033 0f07 add tmp,ko ;сложить tmp и k
000034 2f60 mov yhi,tmp ;cохранить yhi
000035 2f02 mov tmp,yo ;загрузить в tmp y
000036 1b02 sub tmp,yo ;Вычесть tmp и k
000037 2f50 mov ylo,tmp ;cохранить ylo
;=====================================================================================
;Подсчёт длительности импульсов
;=====================================================================================
main: ;метка проверки импульсов
000038 d027 rcall off
000039 e000 ldi tmp,0x00
00003a bf02 out tcnt0,tmp ;очистить таймер 0
00003b e002 ldi tmp,0x02
00003c 9b80 s2: sbis PIND,0 ;проруск rcall пока не появиться 1 на Xin
00003d cffe rjmp s2 ;перейти к s
00003e bf03 out TCCR0,tmp ;запустить таймер 0
00003f e000 r2: ldi tmp,0x00 ;tmp=00000000
000040 9980 sbic PIND,0 ;проруск rcall пока не появиться 0 на Xin
000041 cffd rjmp r2 ;перейти к r
000042 bf03 out TCCR0,tmp ;Остановить таймер
000043 e312 ldi xo,TCNT0 ;Скопировать значение таймера в X
000044 e000 ldi tmp,0x00
000045 bf02 out TCNT0,tmp ;очистить таймер 0
000046 e002 s3: ldi tmp,0x02 ;
000047 9b81 sbis PIND,1 ;проруск rcall пока не появиться 1 на Yin
000048 cffd rjmp s3 ;перейти к s
000049 bf03 out TCCR0,tmp ;запустить таймер 0
00004a e000 r3: ldi tmp,0x00 ;tmp=00000000
00004b 9981 sbic PIND,1 ;проруск rcall пока не появиться 0 на Yin
00004c cffd rjmp r3 ;перейти к r
00004d bf03 out TCCR0,tmp ;Остановить таймер
00004e e322 ldi yo,TCNT0 ;Скопировать значение таймера в y
;=====================================================================================
;Сравнение результатов
;=====================================================================================
00004f d010 rcall off
000050 1714 cp xo,xhi ;Сравнить x с xhi
000051 f438 brsh ignblok ;пропуск если Xhi=>X
000052 1731 cp xlo,xo ;Сравнить xlo с x
000053 f428 brsh ignblok ;пропуск если x=>xlo
000054 1726 cp yo,yhi ;Сравнить y с yhi
000055 f418 brsh ignblok ;пропуск если Xhi=>X
000056 1752 cp ylo,yo ;Сравнить ylo с y
000057 f408 brsh ignblok ;пропуск если y=>ylo
000058 cfdf rjmp main
;=====================================================================================
;блокировка
;=====================================================================================
ignblok:
000059 9893 cbi PORTD,3 ;вывести в blok 0
00005a d010 rcall d500ms
00005b d00f rcall d500ms
00005c d00e rcall d500ms
00005d d00d rcall d500ms
00005e 9a93 sbi PORTD,3 ;вывести в blok 1
00005f 9508 ret
;=====================================================================================
;отключение устройства
;=====================================================================================
off:
000060 9982 sbic PIND,2 ;проруск ret пока не появиться 0 на Xin
000061 9508 ret
000062 e300 ldi tmp,0x30 ;загрузить в tmp = 00110000
000063 bf05 out MCUCR,tmp
000064 9588 sleep
000065 0000 nop
;=============================================
;Подпрограмма задержки 05 мс
;=============================================
d05ms:
000066 efc1 ldi YL,low(497) ;Загрузка в YH:YL константы 497
000067 e0d1 ldi YH,high(497)
000068 9721 d05_1: sbiw YL,1 ;вычитание из YH:YL еденицы
000069 f7f1 brne d05_1 ;Если результат вычитания не равен 0 перейти на d05_1
00006a 9508 ret ;возврат из подпрограммы
;=============================================
;Подпрограмма задержки 1000 мс
;=============================================
d500ms:
00006b eec8 ldi YL,low(1000) ;Загрузка в YH:YL константы 497
00006c e0d3 ldi YH,high(1000)
00006d dff8 d500_1: rcall d05ms
00006e 9721 sbiw YL,1 ;вычитание из YH:YL еденицы
00006f f7e9 brne d500_1 ;Если результат вычитания не равен 0 перейти на d05_1
000070 9508 ret ;возврат из подпрограммы
Assembly complete with no errors.


Вот Output:


Building project...
AVRASM: AVR macro assembler version 1.77.3 (Mar 4 2005 10:04:28)
Copyright (C) 1995-2005 ATMEL Corporation
Creating 'c:\xavr\probe408\test\test.eep'
Creating 'c:\xavr\probe408\test\test.hex'
Creating 'c:\xavr\probe408\test\test.obj'
Creating 'c:\xavr\probe408\test\test.lst'
Creating 'c:\xavr\probe408\test\test.map'
Assembling 'C:\XAVR\PROBE408\Test\Test.asm'
Including 'C:\XAVR\m8def.inc'
Program memory usage:
Code : 113 words
Constants (dw/db): 0 words
Unused : 0 words
Total : 113 words
Assembly complete with no errors.
Deleting 'c:\xavr\probe408\test\test.eep'

Вот HEX:


:020000020000FC
:100000000AC0000000000000000000000000000026
:100010000000000000000FE50DBF002708E001BB55
:100020000FEF02BB00BB72E04BD000E002BF02E06A
:10003000809BFDCF03BF00E08099FDCF03BF12E39B
:1000400000E002BF02E0819BFDCF03BF00E0819989
:10005000FDCF03BF22E334D0012F070F402F012F24
:10006000071B302F022F070F602F022F021B502F6C
:1000700027D000E002BF02E0809BFECF03BF00E07C
:100080008099FDCF03BF12E300E002BF02E0819B35
:10009000FDCF03BF00E08199FDCF03BF22E310D065
:1000A000141738F4311728F4261718F4521708F4E7
:1000B000DFCF939810D00FD00ED00DD0939A089523
:1000C0008299089500E305BF88950000C1EFD1E053
:1000D0002197F1F70895C8EED3E0F8DF2197E9F70B
:0200E000089581
:00000001FF


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru