| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PIC16F877A и ISD4003 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7803 |
Страница 1 от 1 |
| Автор: | vizora [ Съб Май 08, 2010 5:32 pm ] |
| Заглавие: | PIC16F877A и ISD4003 |
Здравейте, нов съм във форума 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 |
|
| Автор: | fan [ Съб Май 08, 2010 7:45 pm ] |
| Заглавие: | |
Добре де, нали си градски пусни ми едно лично съобщение с някакъв скайп на пример да ти ударя едно рамо! |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|