| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PIC16F84A http://mcu-bg.com/mcu_site/viewtopic.php?f=2&t=5757 |
Страница 1 от 3 |
| Автор: | ji4kajiata [ Съб Май 03, 2008 5:46 pm ] | ||
| Заглавие: | PIC16F84A | ||
Здравейте, има ли някой спецялист да помогне за този файл. Когато го програмирам, PIC-a не реагира изобщо, държи се като празен, а всичко е записано. Имам чувството, че някъде по кода има грешка. Може ли да го погледнете, защото аз не разбирам чак толкова от програмиране и немога да открия грешката, поне като го прегледах още няколко пъти не откривам нищо. Другият вариянт е да няма грешка във кода, а аз като го конвертирам във hex със MpLab да омазвам нещо Закачам кода във прикачения файл, да го видите, че нещо ме съмнява.
|
|||
| Автор: | ji4kajiata [ Съб Май 03, 2008 5:48 pm ] |
| Заглавие: | PIC16F84A |
Ще го пусна и тук, по-лесно ще го погледнете, да не се разправяте да го теглите. ;---------------------------------------------------- ; UPS.ASM ; Program for Blaster Control Board (INTROMARIN-C). ;---------------------------------------------------- LIST p=16F84 ; PIC16F84 is the target processor #include p16f84.inc ;#define PROC16C71 ; variables definition ; регистры T EQU 10H ; счетчик периода макс=200 LEN EQU 11H ; длит. активн. состояния макс=100 PP EQU 12H ; счетчик полупериода BAT EQU 13H ; признак работы от батарей FRONT EQU 14H ; признак переднего фронта синхронизации SIN_OK EQU 15H ; признак синхронизации SHORT EQU 16H ; кратковременный буфер FLAG_F EQU 17H ; флаг фронта синхронизации PWcnt EQU 18H ; счетчик длит. сетевого питания SINcnt EQU 19H ; счетчик периода сетевого питания t EQU 20H ; внутренний счетчик периода BATime EQU 21H ; time EQU 22H ; счетчик 20мс макс=5.12сек zumm EQU 23H ; признак включения зуммера ; константы period EQU .165 ; период len EQU .80 ; биты порта A OS EQU 2 ; вход ОС преобразователя LOWBAT EQU 3 ; вход LOW BATTERY ; EQU 4 ; вход ; биты порта B SINH EQU 0 ; вход синхронизации PWGOOD EQU 1 ; вход POWER_GOOD ; EQU 2 ; выход RELAY EQU 3 ; выход управление реле BASE0 EQU 4 ; выход база транзистора BASE1 EQU 5 ; выход база транзистора ; EQU 6 ; выход ZUMM EQU 7 ; выход зуммер GOTO Start ;------------------------------------------; ; MAIN ; ;------------------------------------------; ORG 200 ; Начальные установки Start: ; Начальные установки ; Initialize PORTA by BCF STATUS, RP0 CLRF PORTA BSF STATUS, RP0 MOVLW 0x1f ; Set RA0-RA4 as inputs MOVWF TRISA #ifdef PROC16C71 MOVLW 0x00 ; Set RA0-RA4 as analog MOVWF ADCON1 #endif ; Initialize PORTB by BCF STATUS, RP0 CLRF PORTB BSF STATUS, RP0 MOVLW 0x03 ; Set RB0,Rb1 as inputs, all other as output MOVWF TRISB ; TIMER INTERRUPT ENABLE BSF STATUS, RP0 MOVLW 0xA0 MOVWF INTCON ; SET_TIMER BSF STATUS, RP0 ; запрограммировать таймер ; NEW !!!! WDT movlw 0x58 movwf OPTION_REG ; источник внутренний, ; подключить делитель к WDT, ; коэффициент делителя 1 ; NEW !!! WDT BCF STATUS, RP0 BCF INTCON, T0IF ; сбросить флаг ;MOVF period ; MOVLW period MOVWF TMR0 ; PRESET REGISTERS BCF STATUS, RP0 MOVLW .199 MOVWF T MOVLW .80 MOVWF LEN BSF BAT, 0 CLRF FRONT CLRF BATime CLRF time CLRF zumm ; Самотестирование ;BCF PORTB, 3 ;CALL ZUMM ;CALL ZUMM ;CALL ZUMM ;BSF PORTB, 3 ; ОЖИДАНИЕ ПРЕРЫВАНИЯ GOTO $ ;------------------------------------------; ; Обработка прерываний ; ;------------------------------------------; ORG 4 ;__interrupt{ ;------------------------------__SET_TIMER ------------------ BCF STATUS, RP0 btfss TMR0, 0 ; коррекция goto $+1 BCF INTCON, T0IF ; сбросить флаг MOVLW period ; как константу MOVWF TMR0 ;------------------------------------------------------------- INCF T, 1 ; НАРАЩИВАНИЕ СЧЕТЧИКА ПЕРИОДА MOVF T, 0 SUBLW .199 BTFSS STATUS, C CLRF T ; СБРОС СЧЕТЧИКА ПЕРИОДА ;------------------------------------------------------------- INCF t, 1 MOVF T, 1 ; СБРОС ВНУТРЕННЕГО СЧ. ПЕРИОДА BTFSC STATUS, Z CLRF t ;------------------------------------------------------------- clrwdt ; !!!! NEW WDT !!!! ;------------------------------------------------------------- ;__if(t==0)||(t==99) { PP++ MOVF t, 0 SUBLW .0 BTFSS STATUS, Z GOTO INT1 CLRF PP ; СБРОС ПРИЗНАКА ПОЛУПЕРИОДА MOVLW len ; ПЕРЕУСТАНОВКА LEN MOVWF LEN GOTO INT2 INT1: MOVF t, 0 SUBLW .99 BTFSS STATUS, Z GOTO INT2 BSF PP, 0 ; УСТАНОВКА ПРИЗНАКА ПОЛУПЕРИОДА MOVLW len ; ПЕРЕУСТАНОВКА LEN MOVWF LEN INT2: MOVF LEN, 1 ; ДЕКРЕМЕНТ LEN BTFSS STATUS, Z DECF LEN, 1 ;__} ;******************* ПРИНЯТИЕ РЕШЕНИЙ ************************ ;-------------------------- ПЕРЕХОД НА БАТАРЕИ --------------- BTFSC PORTB, PWGOOD GOTO POWER BSF BAT, 0 CLRF PWcnt CLRF SIN_OK POWER: ;-------------------------- ПЕРЕХОД НА СЕТЬ ------------------ BTFSS PORTB, PWGOOD GOTO DESIGN BTFSS PWcnt, 7 GOTO DESIGN BTFSS SIN_OK, 0 GOTO DESIGN CLRF BAT DESIGN: ;************************************************************* ;-------------------------- ВКЛЮЧИТЬ РЕЛЕ -------------------- BTFSC BAT, 0 BCF PORTB, RELAY BTFSS BAT, 0 BSF PORTB, RELAY ;-------------------------- УПРАВЛЕНИЕ ТРАНЗИСТОРАМИ ------- ;__if(BAT==1){ BTFSS BAT, 0 GOTO INT4 ;__if(LEN!=0){ MOVF LEN, 1 BTFSC STATUS, Z GOTO INT4 ;__if(PP==0){ BTFSC PP, 0 GOTO INT3 BSF PORTB, BASE0 BCF PORTB, BASE1 GOTO INT5 INT3: BCF PORTB, BASE0 BSF PORTB, BASE1 GOTO INT5 ;__} ;__} ;__else{} INT4: BCF PORTB, BASE0 BCF PORTB, BASE1 INT5: ;__} ;------------------------- СИГНАЛ ПРИ ПРОПАДАНИИ СЕТИ -------- MOVF t, 0 BTFSS STATUS, Z GOTO Z1 INCF time, 1 INCF BATime, 1 BTFSC BAT, 0 GOTO Z2 CLRF BATime BCF zumm, 0 GOTO Z1 Z2: MOVF BATime, 0 ; if(BATime>64) BATime=64 SUBLW .255 BTFSS STATUS, Z GOTO $+5 MOVLW .254 MOVWF BATime BCF zumm, 0 GOTO $+2 BSF zumm, 0 ; ВКЛЮЧИТЬ ЗУММЕР Z1: ;------------------------- ЗУММЕР ---------------------------- BTFSS zumm, 0 GOTO NOZUMM BTFSS time, 5 GOTO NOZUMM BTFSC t, 1 BSF PORTB, 7 BTFSS t, 1 NOZUMM: BCF PORTB, 7 ;------------- ПРОВЕРКА НАЛИЧИЯ СЕТЕВОГО НАПРЯЖЕНИЯ ---------- ; if(T==0){ MOVF T, 0 BTFSS STATUS, Z GOTO NO_PW ; if(!PWGOOD) { BTFSS PORTB, PWGOOD CLRF PWcnt ;} INCF PWcnt, 1 ; if(PWcnt>128) PWcnt=128 { MOVF PWcnt, 0 SUBLW .128 BTFSC STATUS, C GOTO $+3 MOVLW .128 MOVWF PWcnt ;} ; } NO_PW: ;-------------------------- СИНХРОНИЗАЦИЯ ПО ФАЗЕ ---------- ; if(СЕТЕВОЕ НАПРЯЖЕНИЕ){ BTFSS PWcnt, 7 GOTO NO_SIN ; } INCF SINcnt, 1 ;_if(длина имп. > 0.5 мс){ BTFSS PORTB, SINH CLRF FRONT INCF FRONT, 1 MOVF FRONT, 0 SUBLW .5 BTFSS STATUS, Z GOTO INT6 ;_фронт обнаружен ; проверка периода сетевого напряжения MOVF SINcnt, 0 MOVWF SHORT CLRF SINcnt SUBLW .195 ; >195 BTFSC STATUS, C GOTO NO_SIN MOVF SHORT, 0 SUBLW .205 ; >205 BTFSS STATUS, C GOTO NO_SIN ; СОБСТВЕННО СИНХРОНИЗАЦИЯ MOVF T, 0 SUBLW .5 BTFSC STATUS, C GOTO SIN1 MOVF T, 0 SUBLW .194 BTFSS STATUS, C GOTO SIN1 MOVF T, 0 ADDLW 3 MOVWF T GOTO NO_SIN SIN1: MOVLW .199 MOVWF T BSF SIN_OK, 0 GOTO $+2 NO_SIN: CLRF SIN_OK ;__} INT6: RETFIE ;__} END |
|
| Автор: | Zeus [ Съб Май 03, 2008 7:10 pm ] |
| Заглавие: | |
GOTO Start ;------------------------------------------; ; MAIN ; ;------------------------------------------; ORG 200 трябва да стане: ORG H'0000' goto start |
|
| Автор: | Gogo [ Съб Май 03, 2008 8:26 pm ] | |||||||||
| Заглавие: | ||||||||||
Или ше станееее... или нема да стане - със сигурност второто! |
||||||||||
| Автор: | ji4kajiata [ Нед Май 04, 2008 2:11 am ] | |||||||||
| Заглавие: | ||||||||||
Благодаря на всички участващи. Всеки съвет е от полза, че направих много платки, а се оказа, че софтуера не тръгва, ;---------------------------------------------------- ; UPS.ASM ; Program for Blaster Control Board (INTROMARIN-C). ;---------------------------------------------------- LIST p=16F84 ; PIC16F84 is the target processor #include p16f84.inc ;#define PROC16C71 ; variables definition ; регистры T EQU 10H ; счетчик периода макс=200 LEN EQU 11H ; длит. активн. состояния макс=100 PP EQU 12H ; счетчик полупериода BAT EQU 13H ; признак работы от батарей FRONT EQU 14H ; признак переднего фронта синхронизации SIN_OK EQU 15H ; признак синхронизации SHORT EQU 16H ; кратковременный буфер FLAG_F EQU 17H ; флаг фронта синхронизации PWcnt EQU 18H ; счетчик длит. сетевого питания SINcnt EQU 19H ; счетчик периода сетевого питания t EQU 20H ; внутренний счетчик периода BATime EQU 21H ; time EQU 22H ; счетчик 20мс макс=5.12сек zumm EQU 23H ; признак включения зуммера ; константы period EQU .165 ; период len EQU .80 ; биты порта A OS EQU 2 ; вход ОС преобразователя LOWBAT EQU 3 ; вход LOW BATTERY ; EQU 4 ; вход ; биты порта B SINH EQU 0 ; вход синхронизации PWGOOD EQU 1 ; вход POWER_GOOD ; EQU 2 ; выход RELAY EQU 3 ; выход управление реле BASE0 EQU 4 ; выход база транзистора BASE1 EQU 5 ; выход база транзистора ; EQU 6 ; выход ZUMM EQU 7 ; выход зуммер ORG H'0000 ;------------------------------------------; ; MAIN ; ;------------------------------------------; goto start ; Начальные установки Start: ; Начальные установки ; Initialize PORTA by BCF STATUS, RP0 CLRF PORTA BSF STATUS, RP0 MOVLW 0x1f ; Set RA0-RA4 as inputs MOVWF TRISA #ifdef PROC16C71 MOVLW 0x00 ; Set RA0-RA4 as analog MOVWF ADCON1 #endif ; Initialize PORTB by BCF STATUS, RP0 CLRF PORTB BSF STATUS, RP0 MOVLW 0x03 ; Set RB0,Rb1 as inputs, all other as output MOVWF TRISB ; TIMER INTERRUPT ENABLE BSF STATUS, RP0 MOVLW 0xA0 MOVWF INTCON ; SET_TIMER BSF STATUS, RP0 ; запрограммировать таймер ; NEW !!!! WDT movlw 0x58 movwf OPTION_REG ; источник внутренний, ; подключить делитель к WDT, ; коэффициент делителя 1 ; NEW !!! WDT BCF STATUS, RP0 BCF INTCON, T0IF ; сбросить флаг ;MOVF period ; MOVLW period MOVWF TMR0 ; PRESET REGISTERS BCF STATUS, RP0 MOVLW .199 MOVWF T MOVLW .80 MOVWF LEN BSF BAT, 0 CLRF FRONT CLRF BATime CLRF time CLRF zumm ; Самотестирование ;BCF PORTB, 3 ;CALL ZUMM ;CALL ZUMM ;CALL ZUMM ;BSF PORTB, 3 ; ОЖИДАНИЕ ПРЕРЫВАНИЯ GOTO $ ;------------------------------------------; ; Обработка прерываний ; ;------------------------------------------; ORG 4 ;__interrupt{ ;------------------------------__SET_TIMER ------------------ BCF STATUS, RP0 btfss TMR0, 0 ; коррекция goto $+1 BCF INTCON, T0IF ; сбросить флаг MOVLW period ; как константу MOVWF TMR0 ;------------------------------------------------------------- INCF T, 1 ; НАРАЩИВАНИЕ СЧЕТЧИКА ПЕРИОДА MOVF T, 0 SUBLW .199 BTFSS STATUS, C CLRF T ; СБРОС СЧЕТЧИКА ПЕРИОДА ;------------------------------------------------------------- INCF t, 1 MOVF T, 1 ; СБРОС ВНУТРЕННЕГО СЧ. ПЕРИОДА BTFSC STATUS, Z CLRF t ;------------------------------------------------------------- clrwdt ; !!!! NEW WDT !!!! ;------------------------------------------------------------- ;__if(t==0)||(t==99) { PP++ MOVF t, 0 SUBLW .0 BTFSS STATUS, Z GOTO INT1 CLRF PP ; СБРОС ПРИЗНАКА ПОЛУПЕРИОДА MOVLW len ; ПЕРЕУСТАНОВКА LEN MOVWF LEN GOTO INT2 INT1: MOVF t, 0 SUBLW .99 BTFSS STATUS, Z GOTO INT2 BSF PP, 0 ; УСТАНОВКА ПРИЗНАКА ПОЛУПЕРИОДА MOVLW len ; ПЕРЕУСТАНОВКА LEN MOVWF LEN INT2: MOVF LEN, 1 ; ДЕКРЕМЕНТ LEN BTFSS STATUS, Z DECF LEN, 1 ;__} ;******************* ПРИНЯТИЕ РЕШЕНИЙ ************************ ;-------------------------- ПЕРЕХОД НА БАТАРЕИ --------------- BTFSC PORTB, PWGOOD GOTO POWER BSF BAT, 0 CLRF PWcnt CLRF SIN_OK POWER: ;-------------------------- ПЕРЕХОД НА СЕТЬ ------------------ BTFSS PORTB, PWGOOD GOTO DESIGN BTFSS PWcnt, 7 GOTO DESIGN BTFSS SIN_OK, 0 GOTO DESIGN CLRF BAT DESIGN: ;************************************************************* ;-------------------------- ВКЛЮЧИТЬ РЕЛЕ -------------------- BTFSC BAT, 0 BCF PORTB, RELAY BTFSS BAT, 0 BSF PORTB, RELAY ;-------------------------- УПРАВЛЕНИЕ ТРАНЗИСТОРАМИ ------- ;__if(BAT==1){ BTFSS BAT, 0 GOTO INT4 ;__if(LEN!=0){ MOVF LEN, 1 BTFSC STATUS, Z GOTO INT4 ;__if(PP==0){ BTFSC PP, 0 GOTO INT3 BSF PORTB, BASE0 BCF PORTB, BASE1 GOTO INT5 INT3: BCF PORTB, BASE0 BSF PORTB, BASE1 GOTO INT5 ;__} ;__} ;__else{} INT4: BCF PORTB, BASE0 BCF PORTB, BASE1 INT5: ;__} ;------------------------- СИГНАЛ ПРИ ПРОПАДАНИИ СЕТИ -------- MOVF t, 0 BTFSS STATUS, Z GOTO Z1 INCF time, 1 INCF BATime, 1 BTFSC BAT, 0 GOTO Z2 CLRF BATime BCF zumm, 0 GOTO Z1 Z2: MOVF BATime, 0 ; if(BATime>64) BATime=64 SUBLW .255 BTFSS STATUS, Z GOTO $+5 MOVLW .254 MOVWF BATime BCF zumm, 0 GOTO $+2 BSF zumm, 0 ; ВКЛЮЧИТЬ ЗУММЕР Z1: ;------------------------- ЗУММЕР ---------------------------- BTFSS zumm, 0 GOTO NOZUMM BTFSS time, 5 GOTO NOZUMM BTFSC t, 1 BSF PORTB, 7 BTFSS t, 1 NOZUMM: BCF PORTB, 7 ;------------- ПРОВЕРКА НАЛИЧИЯ СЕТЕВОГО НАПРЯЖЕНИЯ ---------- ; if(T==0){ MOVF T, 0 BTFSS STATUS, Z GOTO NO_PW ; if(!PWGOOD) { BTFSS PORTB, PWGOOD CLRF PWcnt ;} INCF PWcnt, 1 ; if(PWcnt>128) PWcnt=128 { MOVF PWcnt, 0 SUBLW .128 BTFSC STATUS, C GOTO $+3 MOVLW .128 MOVWF PWcnt ;} ; } NO_PW: ;-------------------------- СИНХРОНИЗАЦИЯ ПО ФАЗЕ ---------- ; if(СЕТЕВОЕ НАПРЯЖЕНИЕ){ BTFSS PWcnt, 7 GOTO NO_SIN ; } INCF SINcnt, 1 ;_if(длина имп. > 0.5 мс){ BTFSS PORTB, SINH CLRF FRONT INCF FRONT, 1 MOVF FRONT, 0 SUBLW .5 BTFSS STATUS, Z GOTO INT6 ;_фронт обнаружен ; проверка периода сетевого напряжения MOVF SINcnt, 0 MOVWF SHORT CLRF SINcnt SUBLW .195 ; >195 BTFSC STATUS, C GOTO NO_SIN MOVF SHORT, 0 SUBLW .205 ; >205 BTFSS STATUS, C GOTO NO_SIN ; СОБСТВЕННО СИНХРОНИЗАЦИЯ MOVF T, 0 SUBLW .5 BTFSC STATUS, C GOTO SIN1 MOVF T, 0 SUBLW .194 BTFSS STATUS, C GOTO SIN1 MOVF T, 0 ADDLW 3 MOVWF T GOTO NO_SIN SIN1: MOVLW .199 MOVWF T BSF SIN_OK, 0 GOTO $+2 NO_SIN: CLRF SIN_OK ;__} INT6: RETFIE ;__} END
Gogo, не разбрах за кое точно ме питаш, дали е включено кое. Работи с кварц 4MHz. Моляте поясни за да мога да отговоря точно. Предварително благодаря. |
||||||||||
| Автор: | fan [ Нед Май 04, 2008 10:47 am ] | ||
| Заглавие: | |||
Юнак, ето ти файла с работещ (поне на симулатор) компилиран (hex) и коригиран сорс (asm) за PIC16F84A (само зареждаш хекса UPS.hex. Не пипаш конфигурационните битове (записал съм ги в програмата), програмираш и готово!). Ха създраве!
|
|||
| Автор: | ji4kajiata [ Нед Май 04, 2008 1:41 pm ] | |||||||||
| Заглавие: | ||||||||||
fan мерси ного. Аз съм в Ботевград, незнам от къде си, и другите също, но ако имате път насам се обадете. Бирата е от мене! |
||||||||||
| Автор: | Zeus [ Нед Май 04, 2008 4:28 pm ] | |||||||||
| Заглавие: | ||||||||||
Да, само трябва да сложиш затварящия апостроф ORG H'0000' H'0000' е адреса на началното установяване. Когато пуснеш процесора или пък се рестартира, той почва от там и изпълнява командата goto start. |
||||||||||
| Автор: | Gogo [ Нед Май 04, 2008 8:00 pm ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Автор: | ji4kajiata [ Пон Май 05, 2008 5:51 pm ] |
| Заглавие: | PIC16F84A |
fan ти вкара ли ги тези инструкции. Сега записах чипа и го сложих на платката, немога да му направя пълния тест, защото си забравих трансформаторите в работилницата, а сега съм си в нас. После ще отида да ги взема. Подадох все пак захранване на платката, без двата трансформатора, единия е за зарядното, другия захранва схемата, когато е от мрежата. Аз му симулирах подаване на напрежение от лабораторният захранващ блок тук (все едно черпи от батерията, и няма наличие на мрежово напрежение). Нивата идващи от двата трафа към контролера ги няма и в този случай трябваше да почне да пищи и да превключи релето, притеснява ме че пак не реагира. |
|
| Автор: | fan [ Пон Май 05, 2008 7:36 pm ] |
| Заглавие: | |
Ас пич, съм ти "вкарал" всичко, което трябва, обаче що не вземеш да ни покажеш схемата! |
|
| Автор: | fan [ Пон Май 05, 2008 9:59 pm ] |
| Заглавие: | |
Хей, "ji4kajiata" ти да не се притесни, че ще ти "откраднем" схемата а ? За да ти помогне човек, трябва да му съдействаш за да го улесниш! На етапа на който си със схемата без трансформаторите, ти трябва симулация на синхронизация на вход RB0(краче 6 на чипа). За целта трябва да свържеш RB0 с RB4(краче 10 на чипа) с едно мосче, като на RB0 временно му прекъснеш веригата към която е свързан(ако имаше схема можеше и по-дробно да се анализира |
|
| Автор: | ji4kajiata [ Пон Май 05, 2008 10:58 pm ] | |||||||||
| Заглавие: | PIC16F84A | |||||||||
Здравей, а глупости няма нищо такова просто я нямах в електронен вид на този компютър. То схемата я има и в интернет в 100 сайта. http://free.bol.bg/mountain/Ups.gif Качих я тук, че е над 50К и неможе вув форума. следмалко ще направя подробни тестове и ще пиша какво става. |
||||||||||
| Автор: | fan [ Пон Май 05, 2008 11:27 pm ] |
| Заглавие: | |
ji4kajiata , я се разтърси из нета за пълната версия на софта (там от гдето си я намерил схемата и прогрaмата), че не е пълен софта(пробутали са ти демо версия)! |
|
| Автор: | ji4kajiata [ Вто Май 06, 2008 12:05 am ] |
| Заглавие: | PIC16F84A |
Е това вече не е добре. Ами ето от тук я изтеглих програмата:
http://store2.data.bg/dancolov/EL/ иначе я има и на други места в нета, но е еднаква 1:1. Ето и снимки на платката която съм направил: http://free.bol.bg/mountain/ups1.JPG http://free.bol.bg/mountain/ups2.JPG Това вече е филм, аз обаче сам немога да и добавя каквото липсва, ще можете ли да ми помогнете. |
|
| Страница 1 от 3 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|