|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 10:07 pm
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Пак ми трябва помощ за 16F871
| Автор |
Съобщение |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
 Пак ми трябва помощ за 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
|
| Нед Окт 29, 2006 5:43 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Провери тука, дали са верни двата bsf-а!!!
|
| Пон Окт 30, 2006 8:21 am |
|
 |
|
didofen
Ранг: Популярен
Регистриран на: Вто Юни 27, 2006 11:13 am Мнения: 381 Местоположение: Варна
|
Варни са ци. ето ти мой сорс за запис, работи
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 е адреса
|
| Пон Окт 30, 2006 9:59 am |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
Въртях нещата всякак и все нещо куца.
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
Когато махна проверката за приключил запис 'червения цвят', програмата не забива но и не се извършва запис в клетката. Когато го оставя-забива, но след като го чета с програматора-има запис в клетката. Ако имате някакви идеи по въпроса, помогнете, щото побърках итеграла от презаписи  [/img]
|
| Вто Окт 31, 2006 9:14 pm |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
Току-що открих още нещо. Когато презапиша желаната стойност в клетката предварително заедно с програмата, като пусна платката и натисна бутона за запис, програмата не забива, а като има някаква друга стойност в клетката, забива. Абе, пълна лудница. 
|
| Вто Окт 31, 2006 9:25 pm |
|
 |
|
freestyler
Ранг: Минаващ
Регистриран на: Пон Ное 07, 2005 9:17 pm Мнения: 57
|
Ако искаш пробвай със проверка на PIR register
wait_write btfss PIR2, EEIF ; write done ?
goto wait_write
|
| Вто Окт 31, 2006 9:28 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Преди да започнеш запис в еепрома, забрани си прекъсванията:
bcf INTCON,GIE
|
| Сря Ное 01, 2006 8:28 am |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
|
| Сря Ное 01, 2006 3:36 pm |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
Съжалявам, че пак се връщам на тази тема, но този път няма да търся съвет, а само да кажа, че открих проблема. Оказа се направо елементарен и затова ми отне толкова време, направо ме побърка. За захранване на схемите с ПИК-ове използвам някакво стаблилзирано захранване и стабилизатор 7805 (както почти всички предполагам  ). Вчера взех че измерих напрежението с мултицет на изхода му и ми даде около 4.0V при работеща схема. Леле, направо се шашнах, при условие че консумацията е около 40mA. Смених стабилизатора и пак същото. Разрових се пак в документацията на 7805(макар че сам го правил хиляди пъти) и взех че сложих кондензатора 100nF на изхода му като е по всички документации. До сега никога не съм гледал сериозно на него, слагал съм този с големия капацитет на входа. До сега не съм имал никакви проблеми без него, а съм използвам много такива поне от 15 години насам. Явно при тази динамична индикация с 50Hz управление на индикаторите, нещо е изпаднало в резонанс със захранването. И така след като го сложих, напрежението си стана 5V и сега записа в EEPROM-а си става идеално.
Само искам да посъветвам всички, които имаха търпение да изчетат това до края. Слагайте този кондензатор, дори всичко да си работи и без него. На мен ми отне 2-3 седмици да го разбера. 
|
| Нед Дек 17, 2006 6:09 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
стига ве, карал си 15 години без да слагаш кондензатор на стабилизаторите? това ми сеструва като 15 години да хвърляш само чифтове. 
|
| Нед Дек 17, 2006 7:24 pm |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 Hehe
Аз по навик си слагам един 100нф на изхода на 7805 и един директно на чипа пак толкова и никога нямам проблеми
И ако има други чипове след 7805 задължително на всеки по 1 -100нф
|
| Нед Дек 17, 2006 9:18 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Интересно, явно доста идиотоустойчиви схеми си хранил до сега, аз това отначало не го знаех и на мен ми отне време да го открия, е беше доста отдавна млад ТНТМ-ист, от тогава ми се е случвало я да не го запоя някой път, я да го махна и забравя да сложа и всеки път съм имал проблеми, може аз да съм голям карък, помня една индикация за фреза, не стига че бяха набутали импулсно с 723, ами имаше и 780х, много гадно запоени, половина чаркули махнах да ги сменя, та после бях забравил един конденз бая умуване що прави мизерии захранването.
|
| Пон Дек 18, 2006 2:24 am |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
Възможно е:). Може и да ми е правило проблем, но да съм си мислил,че е от друго. Колко ли пъти се е случвало това 
|
| Вто Дек 19, 2006 10:18 am |
|
|
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|