[an error occurred while processing this directive]
Ответ: mplaba под рукой нет, так что без гарантии. (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Полный OFF 13 декабря 2005 г. 12:53
В ответ на: Всем привет =) Народ помигете!!! собрал железку на микроконтроллере PIC16F84A, вообщем сделал все кроме прошивки pic'a! немогу с помощью MPLAB v7.20 из asm'a получить hex файл =(, ругаеться и выдает кучу ошибок !!*код вложен внутрь*!! посмотрите пожайлуста и подскажите какие ошибки, может в синтаксе, а может еще в чем =( и если есть возможность поправить код в программе очень буду благодарен за помощь!!! (...Я не волшебник, я только учусь...) отправлено novichek 13 декабря 2005 г. 02:16

;Внимательно проверь таблицу в самом низу текста. Я мог случайно забить какое-нибудь число
;Метки вида :lbl я заменил на _lbl. По моему нельзя с : начинать
;После меток везде поставил :. Так текст читабельней
;Логические ошибки я естественно проверить не смог. Вот например есть невостребованная метка _end

LIST P=16F84
__CONFIG _HS_OSC & _PWRTE_ON & _BODEN_OFF & _WDT_ON & _CP_OFF
#include "p16f84a.inc" ; Вот не уверен, что inc именно так называется

#define ADCS PORTA,0
#define ADCLK PORTA,1
#define ADDAT PORTA,2

cblock 0x20

w_save
s_save
data
del1
del2
count
sumlo
sumhi
qsumlo
qsumhi
temp
samps
dfacto
ref
chans ;current level of each channel
chans1 ;Не помню, как больше байта резервировать. Пусть так будет
chans2
chans3
chans5

endc

org 0
goto start

org 4
inter:
movwf w_save ;save w register
swapf status,w ;reverse nibble of status
movwf s_save ;in status save
bcf status,5 ;now, force to primary registers
_end:
swapf s_save,w ;re-reverse status data
movwf status ;restore to status register
swapf w_save ;pre-swap w saved
swapf w_save,w ;swap into w without affection status
bcf INTCON,1 ;clear rb,0 int flag
reti ;enable global interrupt

start:
bsf STATUS,5 ;alt regs
movlw 00000000b ;
movwf TRISB
movlw 00100b
movwf TRISA
bcf STATUS,5
movlw 128
movwf ref
; find each channel level.
; in between each evalualtion, see if time to turn on each
; channel output (effectively PWM).
cycle:
movlw 40
call eval
movwf chans
movlw 0ffh
call lites
movlw 70
call eval
movwf chans+1
movlw 0fCh
call lites
movlw 130
call eval
movwf chans+2
movlw 0F0h
call lites
movlw 180
call eval
movwf chans+3
movlw 0C0h
call lites
movlw 250
call eval
movwf chans+4
movlw 080h
call lites
goto cycle
; as each channel volume achieves higher order bits,
; turn that channel on sooner in the sequence.
lites:
clrf rb
movwf temp
andwf chans,w
btfss z
bsf rb,1
movf temp,w
andwf chans+1,w
btfss z
bsf rb,2
movf temp,w
andwf chans+2,w
btfss z
bsf rb,3
movf temp,w
andwf chans+3,w
btfss z
bsf rb,4
movf temp,w
andwf chans+4,w
btfss z
bsf rb,5
ret

; delay loop proportional to 'w' squared
; location of watch dog timer reset
wsq:
movwf del1
_xx: movwf del2
_yy: clrwdt
nop
nop
nop
nop
nop
decfsz del2
goto _yy
decfsz del1
goto _xx
ret

; find level in one channel
; returns w-squared value (effectively making response exponential)
eval:
call dtmf
bcf c
rrf sumhi
rrf sumlo
rrf sumhi
rrf sumlo
rrf sumhi
rrf sumlo
bcf c
rrf qsumhi
rrf qsumlo
rrf qsumhi
rrf qsumlo
rrf qsumhi
rrf qsumlo
movf sumlo,w
call square
movwf data
movf qsumlo,w
call square
addwf data,w
ret

; perfoms FFT on audio signal - returns w-sqwared value.
; note: low sample count creates wide bandwidth.
dtmf:
movwf dfacto
movlw 2 ;increase bandwidth(11)
movwf samps
clrf sumlo
clrf sumhi
clrf qsumlo
clrf qsumhi
_x2: call _xgo
call sadsum
call _xgo
call sadqsm
call _xgo
sublw 0
call sadsum
call _xgo
sublw 0
call sadqsm
decfsz samps
goto _x2
ret
_xgo:
movf dfacto,w
call micro
call atod
subwf ref,w
ret

micro:
movwf del1
_mdx:
nop
nop
nop
nop
;
nop
nop
nop ;lower freq response(11)
decfsz del1
goto _mdx
ret

; adds 2's compliment value in 'w' to sumlo/sumhi.
sadsum:
movwf temp
btfss temp,7
goto _add1
addwf sumlo
btfss c
decf sumhi
ret
_add1:
addwf sumlo
btfsc c
incf sumhi
ret

; same as above for qsumlo/qsumhi.
sadqsm:
movwf temp
btfss temp,7
goto _add1
addwf qsumlo
btfss c
decf qsumhi
ret

_add1: addwf qsumlo
btfsc c
incf qsumhi
ret

; reads ADC0831 serial d/a
atod:
bcf ADCS ;CS low
clrf data ;clear data byte
bsf ADCLK ;first clock
bcf ADCLK
bsf ADCLK ;second clock
bcf ADCLK
movlw 8 ;set bit count
movwf count ;into count
bcf status,0 ;clear carry bit
atod2:
rlf data ;hi order is first
bsf ADCLK ;clock hi
btfsc ADDAT ;test input bit
bsf data,0 ;if hi - set data bit
bcf ADCLK ;clock low
decfsz count ;8 times
goto atod2
bsf ADCS ;CS hi
movf data,w ;data in w
ret
; (for test purposes only)

pulse:
movwf temp
bsf rb,0
_p2 decfsz temp
goto _p2
bcf rb,0
ret

org 100h
; performes squaring operation on 'w' - returns 8 bit value in 'w'.
square:
movwf temp
btfsc temp,7
comf temp
movf temp,w
clrf PCLATH
bsf PCLATH,0
addwf PCL

retlw 000
retlw 000
retlw 000
retlw 000
retlw 000
retlw 000
retlw 000
retlw 000
retlw 001
retlw 001
retlw 001
retlw 001
retlw 002
retlw 002
retlw 003
retlw 003
retlw 004
retlw 004
retlw 005
retlw 005
retlw 006
retlw 006
retlw 007
retlw 008
retlw 009
retlw 009
retlw 010
retlw 011
retlw 012
retlw 013
retlw 014
retlw 015
retlw 016
retlw 017
retlw 018
retlw 019
retlw 020
retlw 021
retlw 022
retlw 023
retlw 025
retlw 026
retlw 027
retlw 028
retlw 030
retlw 031
retlw 033
retlw 034
retlw 036
retlw 037
retlw 039
retlw 040
retlw 042
retlw 043
retlw 045
retlw 047
retlw 049
retlw 050
retlw 052
retlw 054
retlw 056
retlw 058
retlw 060
retlw 062
retlw 064
retlw 066
retlw 068
retlw 070
retlw 072
retlw 074
retlw 076
retlw 078
retlw 081
retlw 083
retlw 085
retlw 087
retlw 090
retlw 092
retlw 095
retlw 097
retlw 100
retlw 102
retlw 105
retlw 107
retlw 110
retlw 112
retlw 115
retlw 118
retlw 121
retlw 123
retlw 126
retlw 129
retlw 132
retlw 135
retlw 138
retlw 141
retlw 144
retlw 147
retlw 150
retlw 153
retlw 156
retlw 159
retlw 162
retlw 165
retlw 169
retlw 172
retlw 175
retlw 178
retlw 182
retlw 185
retlw 189
retlw 192
retlw 196
retlw 199
retlw 203
retlw 206
retlw 210
retlw 213
retlw 217
retlw 221
retlw 225
retlw 228
retlw 232
retlw 236
retlw 240
retlw 244
retlw 248
retlw 252

end

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

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru