Отговори на тема  [ 2 мнения ] 
PIC16F877A и ISD4003 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Съб Май 08, 2010 5:26 pm
Мнения: 1
Местоположение: Бургас
Мнение PIC16F877A и ISD4003
Здравейте, нов съм във форума :) От извесно време се опитвам да направя програма за ISD4003. Изчетох доста из нета разгледах добре даташейта и на ISD-то и на PIC-а. Опитвам се да симулирам програмата оято написъх със Протеус но определено не се получава искам да попитам дали някой се е занимавал с подобна схема и ако може малко помощ. Ето това което аз написах и само да добавя времевите интервали не са по даташейта 25 и 50мс направил съм ги само за проба както и командата за СТОП също е за проба и не отговаря на изискванията.

list p=16F877A
include"P16F877A.INC"
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

;********************* Дефиниране на константи и променливи **************************
W EQU 0
f EQU 1
CBLOCK 0x20 ;0 RAM starts at address 20h
Counter
Counter1
ENDC
;--------------------- Дефиниране на входно-изходните портове ------------------------
#define SCK PORTC,3 ;Изход Тактова честота
#define SDI PORTC,4 ;SDI за SPI
#define SDO PORTC,5 ;SDO за SPI
#define SS PORTA,5 ;SS за SPI
#define REC PORTB,0 ;Бутон за запис
#define PLAY PORTB,1 ;Бутон за възпроизвеждане
#define STOP PORTB,2 ;Бутон за стоп
#define SV_REC PORTB,3 ;Светодиод за запис
#define SV_PLAY PORTB,4 ;Светодиод за възпроизвеждане
#define SV_STOP PORTB,5 ;Светодиод за стоп
;*************************************************************************************
; Потребителска програма
;*************************************************************************************
ORG 0x0000 ;start address = 0000h
goto start
;*************************************************************************************
; Начало на програмата
;*************************************************************************************
start
bcf STATUS,RP1 ;Избор на Банка 1
bsf STATUS,RP0
movlw B'10010110' ;Нулиране на 7 бит от регистър OPTION_REG-
movwf OPTION_REG ;разрешава включване на PULL-UP резистори
bcf STATUS,RP1
bcf STATUS,RP0 ;Избор на Банка 0
clrf PORTA ;Нулиране на PORTA
clrf PORTB ;Нулиране на PORTB
clrf PORTC ;Нулиране на PORTC
bcf STATUS,RP1 ;Избор на Банка 1
bsf STATUS,RP0
MOVLW 0x06
MOVWF ADCON1 ;Настроиване на изходите само като цифрови
movlw b'11011111' ;
movwf TRISA ;RA0-RA4-Входове,RA5-Изход за SS(SLAVE Select)
movlw B'00000111'
movwf TRISB ;RB0-RB2-Входове,RB3-RB7-Изход
bcf TRISC,3 ;SCK изводи на SPI.
bsf TRISC,4 ;SDI
bcf TRISC,5 ;SDO
MOVLW B'11000000'
MOVWF SSPSTAT ;инициализация на СПИ
bcf STATUS,RP1
bcf STATUS,RP0 ;Избор на Банка 0
MOVLW B'00100001'
MOVWF SSPCON ;инициализация на СПИ
goto main
;*************************************************************************************
; Използвани подпрограми
;*************************************************************************************
;--------------- Подпрограма "Wait_Tpud" формира времезадръжка от Xms --------------------
Wait_Tpud
movlw D'10' ;Задава времето
movwf Counter ;
clrf TMR0 ;Нулира TMR0
again ;Изпълни цикъла отново
bcf INTCON,T0IF ;Нулира бит T0IF
loop
btfss INTCON,T0IF ;Бит T0IF=1
goto loop ;Не,повтори отново
decfsz Counter,f ;
goto again ;Изпълни цикъла отново
return ;Връща към главна програма докадето е прекратена
;*************************************************************************************
;--------------- Подпрограма "Wait" формира времезадръжка от Xms --------------------
Wait
movlw D'7' ;Задава времето
movwf Counter ;
clrf TMR0 ;Нулира TMR0
again1 ;Изпълни цикъла отново
bcf INTCON,T0IF ;Нулира бит T0IF
loop1
btfss INTCON,T0IF ;Бит T0IF=1
goto loop1 ;Не,повтори отново
decfsz Counter,f ;
goto again1 ;Изпълни цикъла отново
return ;Връща към главна програма докадето е прекратена
;*************************************************************************************
; Главна програма
;*************************************************************************************
main
movlw B'11111111' ;
movwf PORTB
bsf SS ;Забрана на SS(PORTA,0)
check_butons
btfss PLAY ;Провери PORTB,1 задействаи при 0
goto play1 ;Да,започни възпроизвеждане
btfss REC ;Провери PORTB,0 задействаи при 0
goto rec1 ;Да,започни записа
btfss STOP ;Провери PORTB,2 задействаи при 0
goto stop1 ;Да,спри
goto check_butons ;Започни сканирането отначало
play1
call Wait ;Елиминира смущения
play_again1
btfsc PLAY ;Още ли има сигнал?
goto check_butons ;Не, връщане към предходна проверка
bcf SS ;Да, избери и разреши SLAVE
movlw B'00100000' ;Зареди код за POWERUP(00100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
call Wait_Tpud ;Извикване на подпрограма Wait_Tpud времезадръжка
movlw B'11100000' ;Зареди код за SETPLAY(11100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
movlw B'11110000' ;Зареди код за PLAY(11100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
movlw B'11101111' ;Светни SV_PLAY индикация за начало на възпроизвеждането
movwf PORTB
goto main ;Отиди на main
rec1
call Wait ;Елиминира смущения
rec_again1
btfsc REC ;Още ли има сигнал?
goto check_butons ;Не, връщане към предходна проверка
bcf SS ;Да, избери и разреши SLAVE
movlw B'00100000' ;Зареди код за POWERUP(00100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
call Wait_Tpud ;Извикване на подпрограма Wait_Tpud времезадръжка
movlw B'00100000' ;Зареди код за POWERUP(00100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
call Wait_Tpud ;Извикване на подпрограма Wait_Tpud времезадръжка
call Wait_Tpud ;Извикване на подпрограма Wait_Tpud времезадръжка
movlw B'10100000' ;Зареди код за SETREC(10100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
movlw B'10110000' ;Зареди код за REC(10110000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
movlw B'11011111' ;Светни SV_REC индикация за начало на записа
movwf PORTB
goto main ;Отиди на main
stop1
call Wait ;Елиминира смущения
stop_again1
btfsc STOP ;Още ли има сигнал?
goto check_butons ;Не, връщане към предходна проверка
bcf SS ;Да, избери и разреши SLAVE
movlw B'00100000' ;Зареди код за POWERUP(00100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
call Wait_Tpud ;Извикване на подпрограма Wait_Tpud времезадръжка
movlw B'11100000' ;Зареди код за SETPLAY(11100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
movlw B'11110000' ;Зареди код за PLAY(11100000)в работния регистър W
movwf SSPBUF ;Взима дани от работния регистър W и ги зареди в регистър SSPBUF
BANKSEL SSPSTAT ;Избор на Банка 1
call Char1 ;Извикване на подпрограма Char1 за проверка на бит BF
movlw B'11101111' ;Светни SV_PLAY индикация за начало на възпроизвеждането
movwf PORTB
goto main ;Отиди на main

;----------------------------------------------------------------------------------------
Char1
btfss SSPSTAT,BF ;трансфера на дани приключил ли е? (Buffer пълен ли е ?)
goto Char1 ;ако не, провери отново
BANKSEL SSPBUF ;Да, избор на Банка 0
movf SSPBUF,W ;прочети регистър SSPBUF
return
END


Съб Май 08, 2010 5:32 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Добре де, нали си градски пусни ми едно лично съобщение с някакъв скайп на пример да ти ударя едно рамо! :wink:


Съб Май 08, 2010 7:45 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 2 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни