Вопрос к знатокам ассемблера. Вот программа скомпилированная в PIC Basic PRO. И её же дизассемблированный хекс.
В программе идет обмен с термодатчиком DS18S20 через PortA(0) и загрузка в ячейки памяти результатов - температуры 1 байт и знака 0/1 каждую секунду. Также PortС(7) выводит 1.
Асм. исправно компилится и работает.
Покажите мне, где в программе находятся обращения к порту А и, возможно, таймеру. И что это за диалект такой в языке ассемблера. Ткните носом где почитать. Заранее премного благодарен.
ПС. Вырос на Intel8086 ассемблере. Но давненько это было.
Ассемблер - детский вопрос.
- Ariadna-on-Line
- Это не хвост, это антенна
- Сообщения: 1482
- Зарегистрирован: Вс май 13, 2012 00:01:54
Ассемблер - детский вопрос.
- Вложения
-
- TermoDallas.rar
- (2.12 КБ) 203 скачивания
- Реклама
Re: Ассемблер - детский вопрос.
В листинге нет обращения к портам
- botchin
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Чт дек 27, 2012 20:46:09
- Откуда: Болгария, г. Лом
Re: Ассемблер - детский вопрос.
Код: Выделить всё
MOVLW 0x06
MOVWF ADCON1 ; !!Bank!! ADCON0 - ADCON1 - Unimplemented - Unimplemented
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BSF PORTC,7] ; !!Bank!! PORTC - TRISC - Unimplemented - Unimplemented
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BCF PORTC,7 ; !!Bank!! PORTC - TRISC - Unimplemented - Unimplemented
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
и пътатся вставлять в чужую программу код не понятно как работающииAriadna-on-Line писал(а):что это за диалект такой в языке ассемблера
Ariadna-on-Line, каждъй компилятор поддерживает въход типа .lst. Вам будет гораздо удобнее работать тем .lst, a не с файлом из дизасемблера. Но вам виднее.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
- Ariadna-on-Line
- Это не хвост, это антенна
- Сообщения: 1482
- Зарегистрирован: Вс май 13, 2012 00:01:54
Re: Ассемблер - детский вопрос.
Пользуюсь компилятором MPASM v5.49, а дизассемблером PIC-Disasm v1.6
Чтоб не разводить антимонии - посмотрите архив.
Другие дизассемблеры и компиляторы тоже жуют и выдают успешно.
Порты Б С Д на листингах выходят нормально - по имени.
Именно порт А и таймер как-то необычно выходят на дизасмах. Вроде как по адресам.
Я что-то об этом слышал, но не знаю даже как сформулировать вопрос в Гугл.
MainLoop:
MOVLW 0x05
MOVWF LRAM_0x36
MOVLW 0x01
MOVWF LRAM_0x34
MOVLW 0x01
;CLRF PCLATH ; !!Bank Program-Page-Select
CALL LADR_0x0035
и т.д.
Мне кажется вот это и есть обращение к порту А (0х05) и таймеру (0х01)
...Пробовал, на .LST тоже нет Порт А.
Чтоб не разводить антимонии - посмотрите архив.
Другие дизассемблеры и компиляторы тоже жуют и выдают успешно.
Порты Б С Д на листингах выходят нормально - по имени.
Именно порт А и таймер как-то необычно выходят на дизасмах. Вроде как по адресам.
Я что-то об этом слышал, но не знаю даже как сформулировать вопрос в Гугл.
MainLoop:
MOVLW 0x05
MOVWF LRAM_0x36
MOVLW 0x01
MOVWF LRAM_0x34
MOVLW 0x01
;CLRF PCLATH ; !!Bank Program-Page-Select
CALL LADR_0x0035
и т.д.
Мне кажется вот это и есть обращение к порту А (0х05) и таймеру (0х01)
...Пробовал, на .LST тоже нет Порт А.
- Вложения
-
- Dallas.rar
- (19.19 КБ) 161 скачивание
- botchin
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Чт дек 27, 2012 20:46:09
- Откуда: Болгария, г. Лом
Re: Ассемблер - детский вопрос.
Етот фрагмент для меня отношение к PORTA не имеет. Мъ загружаем в две ячейки памяти консантъ 5 и 1.
Объчно movlw ADR_REG исползуется если потом будем работать с FSR. Но в отношение PORTA ето будет работать если PORTA обьявлен как въход.
НО....
Если въ захотите перебросить содержание PORTA в W то вам следует работать с инструкции movf PORTA,w - переслать содержимого регистра PORTA в акумуляторе, разумеется можно использовать и другие как decf PORTA,w и т.д.
Если будете работать асемблером то прочитайте какие инструкции есть в данний МК - у Microchip-a с етим все в порядке
PS: Ariadna-on-Line, пожалуйста дайте и .lst фaйла и не в личку, а здесь. О то как человеку, никогда в жизни не видевшии PIC Basic PRO, понять что сделал компилятор в ответ на ето OWOut DQ, 1, [$CC, $44]
PS:PS:
По дисасемблеру:
Видим в Main Loop в переменной LRAM_0x36 ставится 5. В LADR_0x0022 ета величина (5) перебрасъвается в FSR. И в LADR_0x0046 что-то с ним делается через INDF. Т.е. PIC Basic PRO решили, что работать с портом будут через индиректнъй регистр. ?????? Так решили или им так бъло удобно.
Есть одно преимущество. Посколько PORTA.0 должен работать как вход/въход то с етим BSF FSR,7 они перебрасъваются на установка TRISA, а потом через BCF FSR,7 возвращаются на PORTA.
Таким образом загружая константу 5 в FSR обеспечивается работа на TRISA и PORTA.
Объчно movlw ADR_REG исползуется если потом будем работать с FSR. Но в отношение PORTA ето будет работать если PORTA обьявлен как въход.
Код: Выделить всё
..... bsf STATUS,RP0
movlw 0x00
movwf TRISA;значение для инициализации защелок - въход
......
bcf STATUS,RP0
movlw PORTA ;movlw 0х05
movwf FSR
incf INDF,f ;увеличение регистра с 1 (в случае PORTA)
clrf INDF,f ; обнуление PORTA
Код: Выделить всё
..... bsf STATUS,RP0
movlw 0xFF
movwf TRISA;значение для инициализации защелок - вход
......
bcf STATUS,RP0
movlw PORTA ;movlw 0х05
movwf FSR
incf INDF,f ;увеличение регистра с 1 (в случае PORTA) не будет работает
Если будете работать асемблером то прочитайте какие инструкции есть в данний МК - у Microchip-a с етим все в порядке
PS: Ariadna-on-Line, пожалуйста дайте и .lst фaйла и не в личку, а здесь. О то как человеку, никогда в жизни не видевшии PIC Basic PRO, понять что сделал компилятор в ответ на ето OWOut DQ, 1, [$CC, $44]
PS:PS:
По дисасемблеру:
Код: Выделить всё
LADR_0x0022
RRF LRAM_0x22,F
MOVF LRAM_0x36,W
MOVWF FSR
MOVF LRAM_0x34,W
CALL LADR_0x0046
;.......
LADR_0x0046
XORLW 0xFF
ANDWF INDF,F
GOTO LADR_0x0049
LADR_0x0049
BSF FSR,7
ANDWF INDF,F
;.......
LADR_0x0089: ; Main Loop
MOVLW 0x05
MOVWF LRAM_0x36
Есть одно преимущество. Посколько PORTA.0 должен работать как вход/въход то с етим BSF FSR,7 они перебрасъваются на установка TRISA, а потом через BCF FSR,7 возвращаются на PORTA.
Код: Выделить всё
LADR_0x0008
MOVF LRAM_0x34,W
CALL LADR_0x0046
MOVF LRAM_0x34,W
IORWF INDF,F
MOVLW 0x0A
CALL LADR_0x0059
MOVF LRAM_0x34,W
BCF FSR,7
ANDWF INDF,W
ADDLW 0xFFЛом - ето город в Болгарии, а не инструмент юстировки електроники.
- Реклама
- Ariadna-on-Line
- Это не хвост, это антенна
- Сообщения: 1482
- Зарегистрирован: Вс май 13, 2012 00:01:54
Re: Ассемблер - детский вопрос.
botchin-у
Именно это я хотел узнать. А то уже просто удивление. То есть здесь используется КОСВЕННАЯ (indirect) адресация, - если я правильно называю.
Большое спасибо.
Всё. Наверно можно закрывать.
Именно это я хотел узнать. А то уже просто удивление. То есть здесь используется КОСВЕННАЯ (indirect) адресация, - если я правильно называю.
Большое спасибо.
Всё. Наверно можно закрывать.


