| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Пак ми трябва помощ за 16F871 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=3169 |
Страница 1 от 1 |
| Автор: | Zeus [ Нед Окт 29, 2006 5:43 pm ] | ||
| Заглавие: | Пак ми трябва помощ за 16F871 | ||
Сглобих една програмка с динамична индикация [масите са на PORTA, а сегментите на PORTB]. Целта беще да задавам с бутони някакви стойности на четирите индикатора и после да ги запиша в епрома. [Понеже взе да забива, сведох записа само до записването на една клетка с константа, докато се рещи проблема]. Програмата си върви перfектно, обикялям идикаторите и им сменям стойностите, но когато натисна бутона 'Save', програмата блокира, остава да свети един индикатор. Зависването се получава в подпрограмата Save_dig. Още нещо странно, като има записана цифрата 0х10 в клетка 0х01, няма зависване, което ме навежда на мисълта за проверката, но явно някъде пропускам нещо. Ако някой просто забележи нещо което съм объркал ще се радвам много да го посочи. list p=16f871 #include <p16f871.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _BODEN_OFF& _LVP_OFF & _CPD_OFF w EQU 0 f EQU 1 Begin_value EQU D'96' CBLOCK H'20' Counter_1 Counter_10 Counter_100 Counter_1000 Cycle_counter Temp_PORTA Counter Rot_Status SD1 ;first digit addres in EEPROM SD2 SD3 SD4 check W_TEMP STATUS_TEMP ENDC #define Dig_1 PORTA,0 #define Dig_10 PORTA,1 #define Dig_100 PORTA,2 #define Dig_1000 PORTA,3 #define Dig1 PORTC,0 ;value of the first digit #define Dig2 PORTC,1 #define Dig3 PORTC,2 #define Dig4 PORTC,3 #define M_max PORTC,4 #define M_min PORTC,5 #define Coil_Up PORTC,6 #define Coil_Down PORTC,7 #define Auto PORTD,0 #define Prog PORTD,1 #define Save PORTD,2 #define Led_T1 PORTD,3 #define Led_T2 PORTD,4 #define Led_T3 PORTD,5 PORTD,5 #define Led_T4 PORTD,6 #define Rotate PORTD,7 #define End_sw PORTE,0 #define Up PORTE,1 #define Switch PORTE,2 ORG H'0000' clrf PCLATH goto start ORG H'0004' goto Int_Service start bsf STATUS,RP0 movlw 0x06 movwf ADCON1 clrf TRISA clrf TRISB movlw B'11111100' movwf TRISC movlw B'10000111' movwf TRISD movlw B'011' movwf TRISE bcf STATUS,RP0 movlw B'01111111' movwf T2CON clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE bsf STATUS,RP0 bcf TRISE,4 goto main ;-------------------------------- Int_Service movwf W_TEMP movf STATUS,w movwf STATUS_TEMP bcf STATUS,RP1 bcf STATUS,RP0 btfss INTCON,T0IF goto end_int TMR0_int movlw Begin_value movwf TMR0 call Update_disp end_int bcf INTCON,T0IF movf STATUS_TEMP,w movwf STATUS movf W_TEMP,w retfie ;-------------------------------- Update_disp movf Temp_PORTA,w xorlw B'11111111' movwf PORTA btfss Dig_1 goto update_dig1 btfss Dig_10 goto update_dig10 btfss Dig_100 goto update_dig100 update_dig1000 movf Counter_1000,w call Table movwf PORTB goto end_update update_dig1 movf Counter_1,w call Table movwf PORTB goto end_update update_dig10 movf Counter_10,w call Table movwf PORTB goto end_update update_dig100 movf Counter_100,w call Table movwf PORTB end_update bcf STATUS,C rlf Temp_PORTA,f btfss Temp_PORTA,4 return movlw B'00000001' movwf Temp_PORTA return ;-------------------------------- Table addwf PCL,f retlw B'11000000' retlw B'11111001' retlw B'10100100' retlw B'10110000' retlw B'10011001' retlw B'10010010' retlw B'10000010' retlw B'11111000' retlw B'10000000' retlw B'10010000' ;-------------------------------- Timer_config bsf STATUS,RP0 movlw B'10000100' movwf OPTION_REG bcf STATUS,RP0 clrf Counter_1 clrf Counter_10 clrf Counter_100 clrf Counter_1000 movlw B'00000001' movwf Temp_PORTA movlw Begin_value movwf TMR0 return ;-------------------------------- set0 incf Counter_1,f movlw D'10' xorwf Counter_1,w btfsc STATUS,Z clrf Counter_1 call wait return ;-------------------------------- set1 incf Counter_10,f movlw D'10' xorwf Counter_10,w btfsc STATUS,Z clrf Counter_10 call wait return ;-------------------------------- set2 incf Counter_100,f movlw D'10' xorwf Counter_100,w btfsc STATUS,Z clrf Counter_100 call wait return ;-------------------------------- set3 incf Counter_1000,f movlw D'10' xorwf Counter_1000,w btfsc STATUS,Z clrf Counter_1000 call wait return ;-------------------------------- wait movlw D'3' movwf Counter clrf TMR2 again bcf PIR1,TMR2IF loop1 btfss PIR1,TMR2IF goto loop1 decfsz Counter,f goto again return ;-------------------------------- Rot bcf Switch incf Rot_Status,f movlw D'4' xorwf Rot_Status,w btfsc STATUS,Z clrf Rot_Status bcf Led_T1 bcf Led_T2 bcf Led_T3 bcf Led_T4 return ;-------------------------------- Set_SD movlw D'0' xorwf Rot_Status, w btfss STATUS, Z goto ss1 movlw D'1' movwf SD1 movlw D'2' movwf SD2 movlw D'3' movwf SD3 movlw D'4' movwf SD4 bsf Led_T1 return ss1 movlw D'1' xorwf Rot_Status,w btfss STATUS,Z goto ss2 movlw D'5' movwf SD1 movlw D'6' movwf SD2 movlw D'7' movwf SD3 movlw D'8' movwf SD4 bsf Led_T2 return ss2 movlw D'2' xorwf Rot_Status,w btfss STATUS,Z goto ss3 movlw D'9' movwf SD1 movlw D'10' movwf SD2 movlw D'11' movwf SD3 movlw D'12' movwf SD4 bsf Led_T3 return ss3 movlw D'3' xorwf Rot_Status,w btfss STATUS,Z goto ss4 movlw D'13' movwf SD1 movlw D'14' movwf SD2 movlw D'15' movwf SD3 movlw D'16' movwf SD4 bsf Led_T4 ss4 return ;-------------------------------- Save_dig bcf Switch bsf STATUS,RP1 bsf STATUS,RP0 BTFSC EECON1, WR GOTO $-1 BCF STATUS, RP0 movlw H'01' MOVWF EEADR movlw H'10' MOVWF EEDATA BSF STATUS,RP0 BCF EECON1,EEPGD BSF EECON1,WREN BCF INTCON,GIE MOVLW H'55' MOVWF EECON2 MOVLW H'AA' MOVWF EECON2 BSF EECON1,WR BTFSC EECON1,WR GOTO $-1 bsf Switch bcf STATUS,RP0 movlw H'01' movwf EEADR bsf STATUS,RP0 bsf EECON1,RD bcf STATUS,RP0 movf EEDATA,w sublw H'10' btfss STATUS,Z goto Save_dig bsf STATUS,RP1 bsf STATUS,RP0 BCF EECON1,WREN BSF INTCON,GIE bcf STATUS,RP1 bcf STATUS,RP0 bsf Switch return bcf STATUS,RP1 bcf STATUS,RP0 return ;-------------------------------- main bsf PIE2,EEIE call Timer_config movlw B'10100000' movwf INTCON bcf STATUS,RP0 clrf Rot_Status call Set_SD loop btfsc Dig1 call set0 btfsc Dig2 call set1 btfsc Dig3 call set2 btfsc Dig4 call set3 btfss Rotate goto End_rot call Rot call Set_SD End_rot btfsc Save call Save_dig call wait goto loop kraj END
|
|||
| Автор: | Gogo [ Пон Окт 30, 2006 8:21 am ] | |||||||||
| Заглавие: | ||||||||||
Провери тука, дали са верни двата bsf-а!!! |
||||||||||
| Автор: | didofen [ Пон Окт 30, 2006 9:59 am ] |
| Заглавие: | |
Варни са ци. ето ти мой сорс за запис, работи ZAPIS BSF STATUS , RP0 BSF STATUS , RP1 BTFSS EECON1 , WR GOTO Label_000D CLRWDT GOTO ZAPIS Label_000D BCF STATUS , RP0 BCF STATUS , RP1 BSF STATUS , RP1 MOVWF EEDATA BCF STATUS , RP1 MOVF 0x30 , W BSF STATUS , RP1 MOVWF EEADR BSF STATUS , RP0 BSF EECON1 , WREN MOVLW 0x55 MOVWF EECON2 MOVLW 0xAA MOVWF EECON2 BSF EECON1 , WR BCF EECON1 , WREN BCF STATUS , RP0 BCF STATUS , RP1 NOP RETURN В W ми е данните, а в адрес 0х31 е адреса |
|
| Автор: | Zeus [ Вто Окт 31, 2006 9:14 pm ] |
| Заглавие: | |
Въртях нещата всякак и все нещо куца. ave_dig bcf Switch Zapis bsf STATUS,RP1 bsf STATUS,RP0 BTFSS EECON1, WR GOTO Label_1 CLRWDT GOTO Zapis Label_1 BCF STATUS, RP0 movlw H'05' MOVWF EEADR movlw H'10' MOVWF EEDATA BSF STATUS,RP0 BCF EECON1,EEPGD BSF EECON1,WREN BCF INTCON,GIE MOVLW H'55' MOVWF EECON2 MOVLW H'AA' MOVWF EECON2 BSF EECON1,WR check_again BTFSC EECON1,WR GOTO check_again bsf Switch bcf STATUS,RP0 movlw H'05' movwf EEADR bsf STATUS,RP0 bsf EECON1,RD bcf STATUS,RP0 movf EEDATA,w sublw H'10' btfss STATUS,Z goto Zapis bsf STATUS,RP1 bsf STATUS,RP0 BCF EECON1,WREN BSF INTCON,GIE bcf STATUS,RP1 bcf STATUS,RP0 return Когато махна проверката за приключил запис 'червения цвят', програмата не забива но и не се извършва запис в клетката. Когато го оставя-забива, но след като го чета с програматора-има запис в клетката. Ако имате някакви идеи по въпроса, помогнете, щото побърках итеграла от презаписи |
|
| Автор: | Zeus [ Вто Окт 31, 2006 9:25 pm ] |
| Заглавие: | |
Току-що открих още нещо. Когато презапиша желаната стойност в клетката предварително заедно с програмата, като пусна платката и натисна бутона за запис, програмата не забива, а като има някаква друга стойност в клетката, забива. Абе, пълна лудница. |
|
| Автор: | freestyler [ Вто Окт 31, 2006 9:28 pm ] |
| Заглавие: | |
Ако искаш пробвай със проверка на PIR register wait_write btfss PIR2, EEIF ; write done ? goto wait_write |
|
| Автор: | Gogo [ Сря Ное 01, 2006 8:28 am ] |
| Заглавие: | |
Преди да започнеш запис в еепрома, забрани си прекъсванията: bcf INTCON,GIE |
|
| Автор: | Zeus [ Сря Ное 01, 2006 3:36 pm ] | |||||||||
| Заглавие: | ||||||||||
Направил съм го |
||||||||||
| Автор: | Zeus [ Нед Дек 17, 2006 6:09 pm ] |
| Заглавие: | |
Съжалявам, че пак се връщам на тази тема, но този път няма да търся съвет, а само да кажа, че открих проблема. Оказа се направо елементарен и затова ми отне толкова време, направо ме побърка. За захранване на схемите с ПИК-ове използвам някакво стаблилзирано захранване и стабилизатор 7805 (както почти всички предполагам Само искам да посъветвам всички, които имаха търпение да изчетат това до края. Слагайте този кондензатор, дори всичко да си работи и без него. На мен ми отне 2-3 седмици да го разбера. |
|
| Автор: | zaphod [ Нед Дек 17, 2006 7:24 pm ] |
| Заглавие: | |
стига ве, карал си 15 години без да слагаш кондензатор на стабилизаторите? това ми сеструва като 15 години да хвърляш само чифтове. |
|
| Автор: | plameniv [ Нед Дек 17, 2006 9:18 pm ] | |||||||||
| Заглавие: | Hehe | |||||||||
Аз по навик си слагам един 100нф на изхода на 7805 и един директно на чипа пак толкова и никога нямам проблеми И ако има други чипове след 7805 задължително на всеки по 1 -100нф |
||||||||||
| Автор: | ToHu [ Пон Дек 18, 2006 2:24 am ] |
| Заглавие: | |
Интересно, явно доста идиотоустойчиви схеми си хранил до сега, аз това отначало не го знаех и на мен ми отне време да го открия, е беше доста отдавна млад ТНТМ-ист, от тогава ми се е случвало я да не го запоя някой път, я да го махна и забравя да сложа и всеки път съм имал проблеми, може аз да съм голям карък, помня една индикация за фреза, не стига че бяха набутали импулсно с 723, ами имаше и 780х, много гадно запоени, половина чаркули махнах да ги сменя, та после бях забравил един конденз бая умуване що прави мизерии захранването. |
|
| Автор: | Zeus [ Вто Дек 19, 2006 10:18 am ] | |||||||||
| Заглавие: | ||||||||||
Възможно е:). Може и да ми е правило проблем, но да съм си мислил,че е от друго. Колко ли пъти се е случвало това |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|