Отговори на тема  [ 13 мнения ] 
Пак ми трябва помощ за 16F871 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 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


Прикачени файлове:
Copy of inc.asm [13.08 KiB]
248 пъти
Нед Окт 29, 2006 5:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Цитат:
Save_dig

bcf Switch
bsf STATUS,RP1
bsf STATUS,RP0

Провери тука, дали са верни двата bsf-а!!!


Пон Окт 30, 2006 8:21 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 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
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 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

Когато махна проверката за приключил запис 'червения цвят', програмата не забива но и не се извършва запис в клетката. Когато го оставя-забива, но след като го чета с програматора-има запис в клетката. Ако имате някакви идеи по въпроса, помогнете, щото побърках итеграла от презаписи :cry: [/img]


Вто Окт 31, 2006 9:14 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Току-що открих още нещо. Когато презапиша желаната стойност в клетката предварително заедно с програмата, като пусна платката и натисна бутона за запис, програмата не забива, а като има някаква друга стойност в клетката, забива. Абе, пълна лудница. :?


Вто Окт 31, 2006 9:25 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 07, 2005 9:17 pm
Мнения: 57
Мнение 
Ако искаш пробвай със проверка на PIR register


wait_write btfss PIR2, EEIF ; write done ?
goto wait_write


Вто Окт 31, 2006 9:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Преди да започнеш запис в еепрома, забрани си прекъсванията:
bcf INTCON,GIE


Сря Ное 01, 2006 8:28 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Gogo написа:
Преди да започнеш запис в еепрома, забрани си прекъсванията:
bcf INTCON,GIE


Направил съм го


Сря Ное 01, 2006 3:36 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Съжалявам, че пак се връщам на тази тема, но този път няма да търся съвет, а само да кажа, че открих проблема. Оказа се направо елементарен и затова ми отне толкова време, направо ме побърка. За захранване на схемите с ПИК-ове използвам някакво стаблилзирано захранване и стабилизатор 7805 (както почти всички предполагам :)). Вчера взех че измерих напрежението с мултицет на изхода му и ми даде около 4.0V при работеща схема. Леле, направо се шашнах, при условие че консумацията е около 40mA. Смених стабилизатора и пак същото. Разрових се пак в документацията на 7805(макар че сам го правил хиляди пъти) и взех че сложих кондензатора 100nF на изхода му като е по всички документации. До сега никога не съм гледал сериозно на него, слагал съм този с големия капацитет на входа. До сега не съм имал никакви проблеми без него, а съм използвам много такива поне от 15 години насам. Явно при тази динамична индикация с 50Hz управление на индикаторите, нещо е изпаднало в резонанс със захранването. И така след като го сложих, напрежението си стана 5V и сега записа в EEPROM-а си става идеално.
Само искам да посъветвам всички, които имаха търпение да изчетат това до края. Слагайте този кондензатор, дори всичко да си работи и без него. На мен ми отне 2-3 седмици да го разбера. :idea:


Нед Дек 17, 2006 6:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
стига ве, карал си 15 години без да слагаш кондензатор на стабилизаторите? това ми сеструва като 15 години да хвърляш само чифтове. :o


Нед Дек 17, 2006 7:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение Hehe
zaphod написа:
стига ве, карал си 15 години без да слагаш кондензатор на стабилизаторите? това ми сеструва като 15 години да хвърляш само чифтове. :o

Аз по навик си слагам един 100нф на изхода на 7805 и един директно на чипа пак толкова и никога нямам проблеми :roll: :P
И ако има други чипове след 7805 задължително на всеки по 1 -100нф


Нед Дек 17, 2006 9:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Интересно, явно доста идиотоустойчиви схеми си хранил до сега, аз това отначало не го знаех и на мен ми отне време да го открия, е беше доста отдавна млад ТНТМ-ист, от тогава ми се е случвало я да не го запоя някой път, я да го махна и забравя да сложа и всеки път съм имал проблеми, може аз да съм голям карък, помня една индикация за фреза, не стига че бяха набутали импулсно с 723, ами имаше и 780х, много гадно запоени, половина чаркули махнах да ги сменя, та после бях забравил един конденз бая умуване що прави мизерии захранването.


Пон Дек 18, 2006 2:24 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
zaphod написа:
стига ве, карал си 15 години без да слагаш кондензатор на стабилизаторите? това ми сеструва като 15 години да хвърляш само чифтове. :o


Възможно е:). Може и да ми е правило проблем, но да съм си мислил,че е от друго. Колко ли пъти се е случвало това :?: :evil:


Вто Дек 19, 2006 10:18 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

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


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

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