Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Грешки при компилиране на програмка за 16F676
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=3136
Страница 1 от 1

Автор:  techboy [ Вто Окт 24, 2006 11:37 pm ]
Заглавие:  Грешки при компилиране на програмка за 16F676

Здравейте, първата ми програмка за микроконтролери се овенча с неуспех. :(
Взех си pic 16F676 да се пробвам с него и написах една лесничка програмка с няколкото инструкции които намерих оттук оттам.
Целта е да натисна 2 бутона на входовете PORTA.0 и PORTA.1 като при единият да се промени състоянието на светодиода, а при другият да се реверсира пак светодиода, но при продължително натискане да светва и изгасва светодиода.
Изходите ми съответно са: PORTC0 и PORTC1
Ето го и сорса

Код:
TRISA=%000111   
TRISC=%000000             

@ DEVICE pic16F676
@ DEVICE pic16F676, WDT_ON
@ DEVICE pic16F676, PWRT_ON
@ DEVICE pic16F676, PROTECT_OFF
@ DEVICE pic16F676, MCLR_ON
@ DEVICE pic16F676, INTRC_OSC_NOCLKOUT
                               
ADCON1=7                    

SYMBOL TUS0=PORTA.0           
SYMBOL TUS1=PORTA.1
                               
LED0 VAR PORTC.0               
LED1 VAR PORTC.1

PORTC=0

START:
     IF TUS0=0 THEN               
        TOGGLE LED0                'обърни изхода на LED
        WHILE TUS0=0               ' и проверявай сустоянието на TUS докато не стане равно на нула
        WEND                            ' когато стане нула мини тук и излез от цикъла
     ENDIF
   
   
     IF TUS1=0 THEN                 'при всяко нматискане/задържане на TUS1,
        TOGGLE LED1                 ' обръщай изхода на LED1
     ENDIF
     
     
PAUSE 100
GOTO START

END   



Написах програмката на MicroCode Studio и я компилирам на PicBasicPro и асемблер на MPLAB, но ми излизат следните грешки...

Изображение
Моля хвърлете един поглед и си кажете мнението.
Дали проблема ми е регистрирането на 16F676 при C компилатори мернах че има "include xxFxxx.bas" където се задава номера на чипа. А тука само пускам командата DEVICE и толкоз.?
Погледнах в PBP папката и имам 16F676.inc и 16F676.bas файл.
Дали съм пропуснал нещо да напиша?

Автор:  the_real_maniac [ Сря Окт 25, 2006 12:20 am ]
Заглавие: 

Не ползвам BASIC-о подобни езици за пик, но грешката е лесно преводима и като цяло честно срещана при бързо писане.

DEVICE като дума не може да е на второ място - грубо казано :-)

Виж си синтаксиса в хелп-а на компилтора.

аааа

moment

DEVICE - той го мисли за label - явно ти липстава хедър или бъркаш ключовата дума

Казва "НЕ може label след 1-ва колона :-) " И е прав :-D не може label да е там :-)

УСПЕХ!

Автор:  [ Сря Окт 25, 2006 12:22 am ]
Заглавие: 

Found label after column 1 - нещо с DEVICE не си го направил както трябва.
А illegal character, най вероятно иска и 16F676.bas

Автор:  techboy [ Сря Окт 25, 2006 1:34 am ]
Заглавие:  решение!

Намерих решение на двата си проблема

"Found label after column..."

премахвам следните редове за регистриране на устройството
Код:

@ DEVICE pic16F676
@ DEVICE pic16F676, WDT_ON
@ DEVICE pic16F676, PWRT_ON
@ DEVICE pic16F676, PROTECT_OFF
@ DEVICE pic16F676, MCLR_ON
@ DEVICE pic16F676, INTRC_OSC_NOCLKOUT


и вториият

Код:
Source file path exceeds 62 characters....   


Необходимо е било пътя до *.bas файла да е по къс от 62 символа. Просто преместих файла някъде по наблизко. например D:/PIC/xxx и стана.


Мерси все пак :) Сега да се върна на качването на Кода на пика :D

Автор:  the_real_maniac [ Сря Окт 25, 2006 1:40 am ]
Заглавие: 

8O Човече то винаги е лесено да изтриеш редовете с грешка, но това не означава , че си премахнал грешката - особено в случея. :-)

Автор:  plameniv [ Сря Окт 25, 2006 9:22 am ]
Заглавие:  Re: решение!

techboy написа:
Намерих решение на двата си проблема

"Found label after column..."

премахвам следните редове за регистриране на устройството
Код:

@ DEVICE pic16F676
@ DEVICE pic16F676, WDT_ON
@ DEVICE pic16F676, PWRT_ON
@ DEVICE pic16F676, PROTECT_OFF
@ DEVICE pic16F676, MCLR_ON
@ DEVICE pic16F676, INTRC_OSC_NOCLKOUT


и вториият

Код:
Source file path exceeds 62 characters....   


Необходимо е било пътя до *.bas файла да е по къс от 62 символа. Просто преместих файла някъде по наблизко. например D:/PIC/xxx и стана.


Мерси все пак :) Сега да се върна на качването на Кода на пика :D

Защо не работиш направо с MPLAB на асемблер, там няма да имаш такива грешки , не забравяй че 676 има на последните 4ри байта записан код на честотата му, и в началото на програмата трябва да имаш процедура за изчитане :)
Нещо такова :
list p=16F676
#include "p16F676.inc"
__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF

;==========================================================
org 0x000
GOTO Main

DATA 0x00
DATA 0x00

org 0x004
GOTO Prekysvane

Tmp equ 0x26
Tmp1 equ 0x27
Status1 equ 0x22
;----------------------------------------------------
Main


CLRWDT
clrf PORTA
clrf PORTC
CLRF INTCON
MOVLW B'00000111'
MOVWF CMCON
BSF STATUS,RP0
CALL 0x3FF
MOVWF OSCCAL

MOVLW B'10000100'
MOVWF OPTION_REG ;w -- > option reg
CLRF ANSEL
MOVLW B'00100111'
MOVWF TRISA
CLRF TRISC
BCF STATUS,RP0
..............................
..............................

Автор:  techboy [ Сря Окт 25, 2006 11:52 am ]
Заглавие: 

plameniv да ама немога да резбера това MPLAB и тези адреси ли какво са DATA 0x00, много необятно ми изглежда. В университета сме писали на PASCAL и затуй се хванах с Microcode studio (Като програма на която пиша) и PIC BASIC PRO(на която компилирам) и асемблирането го прави MPLAB. Тя MicroCode STudio ги свързва тези програмки и ми вади .HEx файла като резултат.

Горната програмка не тръгна на пикчето, написах мн. по-лесна да видя какво ще стане.

Код:
TRISA=%000111 'èìàìå 5 I/O íà ïîðòîâåòå À ñ âõîäîâå RA0,RA1, RA2
TRISC=%000000 'Âñè÷êè ñà èçõîäè íà portC

   
ADCON1=7  'çàáðàíÿâà ïîëçâàíåòî íà ÀÖÏ â ÷èïà

PORTC=0


    PORTC.0=1
    PORTC.1=0
    PORTC.2=1
    PORTC.3=0
    PORTC.4=1
   
end

Като резултат тя "почти" тръгна да кажем. Имаше за цел да подава 1 на изходите на които имам светодиоди. И през един 3 светодиода да светят. Като цяло светят но слабо и като докосна MCLR пина с пръст светят силно както им е реда.
Вероятно наистина зациклих с туй дефиниране на DEVICE.

Интересното е че на софтуера за програмиране на микроконтролера имам следните опции
Изображение
и се чудих дали оттука не се определя дали да имам MCLR, FOSC и пр.

Автор:  plameniv [ Сря Окт 25, 2006 12:08 pm ]
Заглавие:  Hm

techboy написа:
plameniv да ама немога да резбера това MPLAB и тези адреси ли какво са DATA 0x00, много необятно ми изглежда. В университета сме писали на PASCAL и затуй се хванах с Microcode studio (Като програма на която пиша) и PIC BASIC PRO(на която компилирам) и асемблирането го прави MPLAB. Тя MicroCode STudio ги свързва тези програмки и ми вади .HEx файла като резултат.

Горната програмка не тръгна на пикчето, написах мн. по-лесна да видя какво ще стане.

Код:
TRISA=%000111 'èìàìå 5 I/O íà ïîðòîâåòå À ñ âõîäîâå RA0,RA1, RA2
TRISC=%000000 'Âñè÷êè ñà èçõîäè íà portC

   
ADCON1=7  'çàáðàíÿâà ïîëçâàíåòî íà ÀÖÏ â ÷èïà

PORTC=0


    PORTC.0=1
    PORTC.1=0
    PORTC.2=1
    PORTC.3=0
    PORTC.4=1
   
end

Като резултат тя "почти" тръгна да кажем. Имаше за цел да подава 1 на изходите на които имам светодиоди. И през един 3 светодиода да светят. Като цяло светят но слабо и като докосна MCLR пина с пръст светят силно както им е реда.
Вероятно наистина зациклих с туй дефиниране на DEVICE.

Интересното е че на софтуера за програмиране на микроконтролера имам следните опции
Изображение
и се чудих дали оттука не се определя дали да имам MCLR, FOSC и пр.

Кое не можеш да разбереш, че то толкова лесно и удобно е направено че няма на къде , само малко от ASM трябва да отбираш :?
Няма да ти тръгне защото не си заложил това което ти казах , а това което аз ти пуснах се слага в началото на програмата за инициализация на регистри честота и чак след това си слагаш това което искаш да прави , и за да го прави циклично се прави един затворен цикъл :)
Нещо такова
;Начало
;.....
;.....
Loop
;.....
GOTO Loop

Автор:  techboy [ Сря Окт 25, 2006 12:57 pm ]
Заглавие: 

ами май при BAsic Pro e нещо такова:
Код:
@DEVICE PIC16F676
@DEVICE PIC16F676, WDT_ON
@DEVICE PIC16F676, PWRT_ON
@DEVICE PIC16F676, PROTECT_OFF
@DEVICE PIC16F676, MCLR_ON
@DEVICE PIC16F676, INTRC_OSC_NOCLKOUT


Но ми вади грешки когато го пусна с тия редове

Ilegal opcode (pic16F676)
и на 6te реда с тези инициализации

Автор:  plameniv [ Сря Окт 25, 2006 2:10 pm ]
Заглавие:  Hm

techboy написа:
ами май при BAsic Pro e нещо такова:
Код:
@DEVICE PIC16F676
@DEVICE PIC16F676, WDT_ON
@DEVICE PIC16F676, PWRT_ON
@DEVICE PIC16F676, PROTECT_OFF
@DEVICE PIC16F676, MCLR_ON
@DEVICE PIC16F676, INTRC_OSC_NOCLKOUT


Но ми вади грешки когато го пусна с тия редове

Ilegal opcode (pic16F676)
и на 6te реда с тези инициализации

Дава ти грешка защото най вероятно не е така начина да си заредиш конфугарацията на контролера.
Аз мога да ти дам съвет само ако го правиш на асемблер , който работи с BAsic Pro той да каже :oops:
Има си google за тази цел потърси например това pic16f676 pas и все някъде ще изскочи някой готов код и само си го преправи :)
Но ако сега започваш да се занимаваш с тия неща много по лесно ще ти е да си купиш книгата на младконструктор , микроконтролери 1 част, там има доста добри обяснения нищо че повечето са за 16F84 само си сменяш настройките в MPLAB за този процесор и готово.
Пропуснах да ти кажа че преди да правиш запис във флаша на този контролер , прочети последните 4 байта и си ги запиши на лист, преди всеки запис ги въвеждай най отдолу и тогава , иначе ще изтриеш това което е дал пройзводителя за честотата и ще трябва да го правиш с външен кварц :)

Автор:  techboy [ Сря Окт 25, 2006 4:14 pm ]
Заглавие: 

Намерих Проблема!
При PicBasic Pro се дефинира така:
@ DEVICE PIC16F676, WDT_ON, PWRT_ON, PROTECT_OFF, MCLR_ON, INTRC_OSC_NOCLKOUT като за асемблер си използвам пак Pic basic Pro.
Половината ми светодиоди светнаха, но останалите които си споделят пиновете с A/D входовете ми светят слабо.

Това ли е инструкцията за спиране на А/Д входовете? ADCON1=7 при PicBasic Pro? :?

Автор:  plameniv [ Сря Окт 25, 2006 4:40 pm ]
Заглавие:  Hehe

techboy написа:
Намерих Проблема!
При PicBasic Pro се дефинира така:
@ DEVICE PIC16F676, WDT_ON, PWRT_ON, PROTECT_OFF, MCLR_ON, INTRC_OSC_NOCLKOUT като за асемблер си използвам пак Pic basic Pro.
Половината ми светодиоди светнаха, но останалите които си споделят пиновете с A/D входовете ми светят слабо.

Това ли е инструкцията за спиране на А/Д входовете? ADCON1=7 при PicBasic Pro? :?

Ми лека полека ще си изчистиш грешките , виж моя пример по нагоре , в него има една инструкция CLRF Ansel :)

Автор:  techboy [ Сря Окт 25, 2006 5:12 pm ]
Заглавие: 

Яд ме е че няма литература като хората за PICBasic Pro и се мъча да издърпвам оттук оттам дефиници и команди, и писането им.

Автор:  plameniv [ Сря Окт 25, 2006 6:45 pm ]
Заглавие:  Mda

techboy написа:
Яд ме е че няма литература като хората за PICBasic Pro и се мъча да издърпвам оттук оттам дефиници и команди, и писането им.

Абе я мини на асемблер и всичко ще си дойде на място :D :lol:
Инсталираш си MPLAB и почваш в него да си бачкаш като хората има си всичко от А до Я за да си тестваш програмата трасираш за грешки и т.н. преди да флашнеш пикльото :D

Прикачени файлове:
test.JPG
test.JPG [ 127.52 KiB | Прегледано 1978 пъти ]

Автор:  techboy [ Сря Окт 25, 2006 7:25 pm ]
Заглавие: 

:evil: Хареса ми да пиша на PBP

Това MPLAB ми е много необятно....

Ще се мъча така и накрая ако пак нестане.
Или ще изкормя всеки крак на 16F676 като се смея на глас :axe: и се наслаждавам или ще мина на MPLAB :toimonster: и ще гледам как ме погълва животното

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/