Что-то не получается с АЦП на 12F675
Добавлено: Вт июл 02, 2013 22:08:51
Здравствуйте! Хочу посмотреть звук через микрофон на семисегментнике. Т.е. какой звук, полученный микрофоном, в какой двоичный код преобразуется. Возможно идея нелепая, но очень интересно))) Не могу понять почему не пашет программный код? Вроде бы уже всё, что только можно прописал и проверил, но собранная модель в протеусе не работает. Кто сталкивался, подскажите, пожалуйста(уже голова опухла).... Вот код:
Код: Выделить всё
; Шапка
LIST P=PIC12F675
__CONFIG b'00000011111100'
INTCON equ 0Bh
STATUS equ 03h
GPIO equ 05h
WPU equ 15h
TRISIO equ 05h
OSCCAL equ 10h
ANSEL equ 1Fh
ADCON0 equ 1Fh
ADRESH equ 1Eh
PIR1 equ 0Ch
OPTION_REG equ 1h
CMCON equ 19h
IOCB equ 16h
PCL equ 02h
first equ 20h
R_hun equ 21h
R_ten equ 22h
Reg_1 equ 23h
Reg_2 equ 24h
Reg_3 equ 25h
org 0
goto Start
; Рабочая часть
Start clrwdt
call 3FFh
movwf OSCCAL ; калибровка
bcf STATUS,5
clrf GPIO ; инициализация защёлок
bsf STATUS,5
movlw b'00001001' ; направление портов в/в
movwf TRISIO
clrf INTCON ; запрет всех прерываний
movlw b'00011000' ; важный регистр
movwf OPTION_REG
clrf WPU ; отключение подтягивающих резисторов
clrf IOCB ; запрет прерываний по изм уровня сигнала на в/в
bcf STATUS,5
movlw b'00000111'
movwf CMCON ; откл. компаратора
bsf STATUS,5
movlw b'01010001' ; настройка АЦП:
movwf ANSEL
bcf STATUS,5
movlw b'00000001' ; выбор канала АЦП
movwf ADCON0
goto $+1 ; задержка после выбора канала АЦП
goto $+1
goto $+1
goto $+1
bsf ADCON0,1 ; включение АЦП
AtDC_1 clrwdt
btfsc ADCON0,1 ; ожидание коца опроса
goto AtDC_1
movf ADRESH,w ; копирование ст.разряда результата АЦП
movwf first
; преобразование bin-BCD
clrf R_hun
clrf R_ten
R_100 clrwdt
bsf STATUS,0 ; поднятие флага С
movlw .100 ; определение сотен
subwf first,w
btfss STATUS,0
goto LED2
incf R_hun,f
movwf first
goto R_100
LED2 movf R_hun,w ; вывод на индикацор старшего разряда
call Table
movwf GPIO
Pause_1 movlw .254 ; задержка для разграничения показаний
movwf Reg_1
movlw .17
movwf Reg_2
movlw .6
movwf Reg_3
wr_1 clrwdt
decfsz Reg_1, F
goto wr_1
decfsz Reg_2, F
goto wr_1
decfsz Reg_3, F
goto wr_1
goto $+1
R_10 clrwdt
bsf STATUS,0 ; поднятие флага С
movlw .10 ; определение десятков
subwf first,w
btfss STATUS,0
goto LED1
incf R_ten,f
movwf first
goto R_10
LED1 movf R_ten,w ; вывод на идикатор среднего разряда
call Table
movwf GPIO
Pause_2 movlw .254 ; задержка для разграничения показаний
movwf Reg_1
movlw .17
movwf Reg_2
movlw .6
movwf Reg_3
wr_2 clrwdt
decfsz Reg_1, F
goto wr_2
decfsz Reg_2, F
goto wr_2
decfsz Reg_3, F
goto wr_2
goto $+1
LED0 movf first,w ; младший разряд остаётся и выводится на индикатор
call Table
movwf GPIO
Pause_3 movlw .254 ; задержка для разграничения показаний
movwf Reg_1
movlw .17
movwf Reg_2
movlw .6
movwf Reg_3
wr_3 clrwdt
decfsz Reg_1, F
goto wr_3
decfsz Reg_2, F
goto wr_3
decfsz Reg_3, F
goto wr_3
goto $+1
goto Start
Table clrwdt
addwf PCL,f
retlw b'00000000' ; 0
retlw b'00100000' ; 1
retlw b'00010000' ; 2
retlw b'00110000' ; 3
retlw b'00000100' ; 4
retlw b'00100100' ; 5
retlw b'00010100' ; 6
retlw b'00110100' ; 7
retlw b'00000010' ; 8
retlw b'00100010' ; 9
end