Перейти к содержанию

Нужна помощь в программировании


Starina48

Рекомендуемые сообщения

1 час назад, Alex сказал:

Вам и был сразу же, первым постом, совет по смене компилятора

Алекс ну зачем вы так? , хайтек9.60 был одним из самых адекватных компиляторов правда только в стандартной версии  , но для задач ТС это вообще не критично, я практически все проекты делал на хайтек9.60стд пока по прошлому году не перешел на вын7 , теперь никак с ним снова не получается подружить мплаб8.92 , мплаб его видит но при попытке подключения к проекту валится с критической ошибкой, пришлось хусым8 ставить, все лучше чем никроз, хотя по сравнению с хайтеком г..вно редкое единственный плюс поддержка новых камней. не верите? вот наглядный пример:

элементарный код

Скрытый текст

/* подпрограмма обработки прерываний */
void interrupt timer_isr(void)
{ static unsigned char	Count;


if (TMR1IF)
   {
     TMR1IF=0;

        T1CON=0x00;
        TMR1L=CONST_TMR1L;
        TMR1H=CONST_TMR1H;
        TMR1ON=1;
     if(Count==99)
       {
        Count=0; 
        flag.FL1SEC=1;
       }
      else
       {
        Count++;
       } 
      if(Count==0) LED=1;
      if(Count==20) LED=0;
  }
} // end interrupt timer0_isr
void dalay_time(unsigned int timer)
{
  	while(timer--)
    {
    	while(!flag.FL1SEC);
        flag.FL1SEC=0;     
    }
}

/** demonstration of various built-in delay mechanisms */
void main(void)
{
            INTCON=0x00;
            PIE1=0x00;
            GPIO=0x00;
            CMCON=0x07; //отключаем компараторы
            TRISIO=0b00000000; // GP0- ВХОД
            ANSEL=0;

        T1CON=0x00;
        TMR1L=CONST_TMR1L;
        TMR1H=CONST_TMR1H;
        TMR1ON=1;


           PEIE=1;
           TMR1IE=1;
           GIE=1;



            
	while(1)
    {
      NOP();
      RELAY_1=1;
      dalay_time(8);
      RELAY_1=0;
      dalay_time(7200);
      RELAY_2=1;
      dalay_time(8);
      RELAY_2=0;
      dalay_time(7200);
      NOP();
           
	} // end while(1)
}

 

результат дизасма хекса

Скрытый текст

; Program

    Org 0x0000

;   Reset-Vector
    GOTO LADR_0x000B

    Org 0x0004

;   Interrupt-Vector
    MOVWF LRAM_0x5E
    SWAPF STATUS,W
    BCF STATUS,RP0        
    MOVWF LRAM_0x20
    MOVF PCLATH,W     ; накой хрен сохранение в контексте  
    MOVWF LRAM_0x21   ; если размер камня < 2кб
    GOTO LADR_0x0042  
LADR_0x000B           ; накой хрен разрыв прерывания
                      ; функцией main()
    BSF STATUS,RP0       
    CALL LADR_0x03FF
    MOVWF T1CON           
    BCF STATUS,RP0       
    GOTO LADR_0x0010     ; ЧТО ЭТО ЗА ХРЕНЬ ????
LADR_0x0010              ; ??????
    CLRF LRAM_0x24
    CLRF LRAM_0x25
    CLRF STATUS
    GOTO LADR_0x0014     ;АНАЛОГИЧНО
LADR_0x0014              ; ЧТО ЭТО ЗА ХРЕНЬ ????
    CLRF INTCON
    BSF STATUS,RP0        
    CLRF PIR1            
    BCF STATUS,RP0        
    CLRF GPIO             
    MOVLW 0x07
    MOVWF CMCON           
    BSF STATUS,RP0        
    CLRF GPIO             
    CLRF ADCON0            
    BCF STATUS,RP0       
    CLRF T1CON            
    MOVLW 0x04
    MOVWF TMR1L           
    MOVLW 0xD9
    MOVWF TMR1H           
    BSF T1CON,0         
    BSF INTCON,PEIE
    BSF STATUS,RP0        
    BSF PIR1,0            
    BSF INTCON,GIE
LADR_0x0029
    NOP
    BCF STATUS,RP0       
    BSF GPIO,0            
    MOVLW 0x08
    MOVWF LRAM_0x22
    CLRF LRAM_0x23
    CALL LADR_0x0061
    BCF GPIO,0           
    CALL LADR_0x003D
    CALL LADR_0x0061
    BSF GPIO,1            
    MOVLW 0x08       ; занесение константы
    MOVWF LRAM_0x22  ; в функцию dalay_time(8)
    CLRF LRAM_0x23   ; вопросов нет, все логично
    CALL LADR_0x0061
    BCF GPIO,1            
    CALL LADR_0x003D  ; накой этот вызов?
    CALL LADR_0x0061
    NOP
    GOTO LADR_0x0029
LADR_0x003D           ; тупое увеличение 
    MOVLW 0x20        ; времени исполнения 
    MOVWF LRAM_0x22   ; кода с 4 до 8 машюциклов
    MOVLW 0x1C
    MOVWF LRAM_0x23
    RETURN
LADR_0x0042
    BTFSS PIR1,0          
    GOTO LADR_0x005A
    BCF PIR1,0            
    CLRF T1CON            
    MOVLW 0x04
    MOVWF TMR1L          
    MOVLW 0xD9
    MOVWF TMR1H           
    BSF T1CON,0           
    MOVF LRAM_0x25,W
    XORLW 0x63
    BTFSS STATUS,Z
    GOTO LADR_0x0052
    CLRF LRAM_0x25
    BSF LRAM_0x24,7
    GOTO LADR_0x0053
LADR_0x0052
    INCF LRAM_0x25,F
LADR_0x0053
    MOVF LRAM_0x25,F
    BTFSC STATUS,Z
    BSF GPIO,2            
    MOVF LRAM_0x25,W
    XORLW 0x14
    BTFSC STATUS,Z
    BCF GPIO,2           
LADR_0x005A
    MOVF LRAM_0x21,W
    MOVWF PCLATH         
    SWAPF LRAM_0x20,W
    MOVWF STATUS
    SWAPF LRAM_0x5E,F
    SWAPF LRAM_0x5E,W
    RETFIE
LADR_0x0061
    MOVLW 0x01
    SUBWF LRAM_0x22,F
    MOVLW 0x00
    BTFSS STATUS,C
    DECF LRAM_0x23,F
    SUBWF LRAM_0x23,F
    INCF LRAM_0x22,W
    BTFSC STATUS,Z
    INCF LRAM_0x23,W
    BTFSC STATUS,Z
    RETURN
LADR_0x006C
    BTFSS LRAM_0x24,7
    GOTO LADR_0x006C
    BCF LRAM_0x24,7
    GOTO LADR_0x0061

    End

 

 

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Ну, так никто и не говорит, что хайтек - гоуноу. Я тоже им пользовался. Просто сейчас он уже неактуален, вот и всё...
А XC8 - это тот же HI-TECH PRO (для 12/16 серии), только название поменяли. Под 18-ые камушки, он - MCC18. Если я не ошибаюсь ...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

7 минут назад, Alex сказал:

А XC8 - это тот же HI-TECH PRO (для 12/16 серии)

тот да не тот, выше дописал пост, что вытворяет восьмой хусым

причем изменение оптимизации никак не влияет

Ссылка на комментарий
Поделиться на другие сайты

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Хорошо, спасибо. Сейчас буду пробовать скачать и установить.  Неожиданно новые  посты открылись Alex и IMXO  и я теперь весь в думах У меня 7 винда, стоит ли менять что то. Поменял MPLAN на 8.91 а HI там 9.50.

Изменено пользователем Starina48
дописал
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В 2/10/2019 в 19:20, Starina48 сказал:

наверно двух буквенное обозначение порта прогу смущает

Попробуйте использовать GPIO0 и GPIO1 вместо GP0 и GP1.

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

2 часа назад, Starina48 сказал:

задачу решить не удалось

Почему ? Что не получилось ?

 

23 часа назад, IMXO сказал:

результат дизасма хекса

А уровень оптимизации какой ?
В халявном варианте он спецом раздувает код. В PRO не должно быть такого...

Ссылка на комментарий
Поделиться на другие сайты

Попробовал.
Простенький код для ТС'а :

Скрытый текст

#include "xc.h"
__CONFIG ( WDTDIS & LP & MCLREN & UNPROTECT );
//***********************************************************************************************************/
#define	OUT1             GPIO0
#define	TRIS_OUT1        TRISIO0
#define	OUT2             GPIO1
#define	TRIS_OUT2        TRISIO1
//***********************************************************************************************************/

//***********************************************************************************************************/
void interrupt _isr(){
static bit  b=0;
if(TMR1IF){
    TMR1IF=0;
    TMR1 -= 500;
    b=!b;
    OUT1 = b;
    OUT2 = !b;
}
}
//***********************************************************************************************************/

//***********************************************************************************************************/
void main(){
CMCON=7;
//--------------------------
TRIS_OUT1=0;
OUT1=0;
TRIS_OUT2=0;
OUT2=0;
//--------------------------
TMR1 = -500;
T1CON=0;
TMR1ON=1;
TMR1IE=1;
//--------------------------
PEIE=1;
GIE=1;
while(1){
}
}
//***********************************************************************************************************/

 

 

Free Mode :

Цитата

    Program space        used    4Dh (    77) of   400h words   (  7.5%)
    Data space           used     7h (     7) of    40h bytes   ( 10.9%)

Скрытый текст

1:                 #include "xc.h"
2:                 __CONFIG ( WDTDIS & LP & MCLREN & UNPROTECT );
3:                 //***********************************************************************************************************/
4:                 #define	OUT1             GPIO0
5:                 #define	TRIS_OUT1        TRISIO0
6:                 #define	OUT2             GPIO1
7:                 #define	TRIS_OUT2        TRISIO1
8:                 //***********************************************************************************************************/
9:                 
10:                //***********************************************************************************************************/
11:                void interrupt _isr(){
   004    00DE     MOVWF 0x5e
   005    0E03     SWAPF STATUS, W
   006    1283     BCF STATUS, 0x5
   007    00A0     MOVWF 0x20
   008    0804     MOVF FSR, W
   009    00A1     MOVWF 0x21
   00A    080A     MOVF PCLATH, W
   00B    00A2     MOVWF 0x22
   00C    085F     MOVF 0x5f, W
   00D    00A3     MOVWF 0x23
   00E    2817     GOTO _isr
   017    1C0C     BTFSS PIR1, 0
12:                static bit  b=0;
13:                if(TMR1IF){
   018    2830     GOTO 0x30
14:                    TMR1IF=0;
   019    100C     BCF PIR1, 0
15:                    TMR1 -= 500;
   01A    30F4     MOVLW 0xf4
   01B    028E     SUBWF TMR1, F
   01C    3001     MOVLW 0x1
   01D    1C03     BTFSS STATUS, 0
   01E    038F     DECF TMR1H, F
   01F    028F     SUBWF TMR1H, F
16:                    b=!b;
   020    3001     MOVLW 0x1
   021    06A4     XORWF 0x24, F
17:                    OUT1 = b;
   022    1C24     BTFSS 0x24, 0
   023    2827     GOTO 0x27
   024    1283     BCF STATUS, 0x5
   025    1405     BSF GPIO, 0
   026    2829     GOTO 0x29
   027    1283     BCF STATUS, 0x5
   028    1005     BCF GPIO, 0
18:                    OUT2 = !b;
   029    1824     BTFSC 0x24, 0
   02A    282E     GOTO 0x2e
   02B    1283     BCF STATUS, 0x5
   02C    1485     BSF GPIO, 0x1
   02D    2830     GOTO 0x30
   02E    1283     BCF STATUS, 0x5
   02F    1085     BCF GPIO, 0x1
19:                }
20:                }
   030    0823     MOVF 0x23, W
21:                //***********************************************************************************************************/
22:                
23:                //***********************************************************************************************************/
24:                void main(){
   03B    3007     MOVLW 0x7
25:                CMCON=7;
   03C    1283     BCF STATUS, 0x5
   03D    0099     MOVWF CMCON
26:                //--------------------------
27:                TRIS_OUT1=0;
   03E    1683     BSF STATUS, 0x5
   03F    1005     BCF GPIO, 0
28:                OUT1=0;
   040    1283     BCF STATUS, 0x5
   041    1005     BCF GPIO, 0
29:                TRIS_OUT2=0;
   042    1683     BSF STATUS, 0x5
   043    1085     BCF GPIO, 0x1
30:                OUT2=0;
   044    1283     BCF STATUS, 0x5
   045    1085     BCF GPIO, 0x1
31:                //--------------------------
32:                TMR1 = -500;
   046    30FE     MOVLW 0xfe
   047    008F     MOVWF TMR1H
   048    300C     MOVLW 0xc
   049    008E     MOVWF TMR1
33:                T1CON=0;
   04A    0190     CLRF T1CON
34:                TMR1ON=1;
   04B    1410     BSF T1CON, 0
35:                TMR1IE=1;
   04C    1683     BSF STATUS, 0x5
   04D    140C     BSF PIR1, 0
36:                //--------------------------
37:                PEIE=1;
   04E    170B     BSF INTCON, 0x6
38:                GIE=1;
   04F    178B     BSF INTCON, 0x7
39:                while(1){
   050    2850     GOTO 0x50

 

PRO Mode :

Цитата

    Program space        used    44h (    68) of   400h words   (  6.6%)
    Data space           used     5h (     5) of    40h bytes   (  7.8%)

Скрытый текст

1:                 #include "xc.h"
2:                 __CONFIG ( WDTDIS & LP & MCLREN & UNPROTECT );
3:                 //***********************************************************************************************************/
4:                 #define	OUT1             GPIO0
5:                 #define	TRIS_OUT1        TRISIO0
6:                 #define	OUT2             GPIO1
7:                 #define	TRIS_OUT2        TRISIO1
8:                 //***********************************************************************************************************/
9:                 
10:                //***********************************************************************************************************/
11:                void interrupt _isr(){
   004    00DE     MOVWF 0x5e
   005    0E03     SWAPF STATUS, W
   006    1283     BCF STATUS, 0x5
   007    00A0     MOVWF 0x20
   008    080A     MOVF PCLATH, W
   009    00A1     MOVWF 0x21
   00A    2813     GOTO _isr
   013    1C0C     BTFSS PIR1, 0
12:                static bit  b=0;
13:                if(TMR1IF){
   014    282C     GOTO 0x2c
14:                    TMR1IF=0;
   015    100C     BCF PIR1, 0
15:                    TMR1 -= 500;
   016    30F4     MOVLW 0xf4
   017    028E     SUBWF TMR1, F
   018    3001     MOVLW 0x1
   019    1C03     BTFSS STATUS, 0
   01A    038F     DECF TMR1H, F
   01B    028F     SUBWF TMR1H, F
16:                    b=!b;
   01C    3001     MOVLW 0x1
   01D    06A2     XORWF 0x22, F
17:                    OUT1 = b;
   01E    1C22     BTFSS 0x22, 0
   01F    2823     GOTO 0x23
   020    1283     BCF STATUS, 0x5
   021    1405     BSF GPIO, 0
   022    2825     GOTO 0x25
   023    1283     BCF STATUS, 0x5
   024    1005     BCF GPIO, 0
18:                    OUT2 = !b;
   025    1822     BTFSC 0x22, 0
   026    282A     GOTO 0x2a
   027    1283     BCF STATUS, 0x5
   028    1485     BSF GPIO, 0x1
   029    282C     GOTO 0x2c
   02A    1283     BCF STATUS, 0x5
   02B    1085     BCF GPIO, 0x1
19:                }
20:                }
   02C    0821     MOVF 0x21, W
21:                //***********************************************************************************************************/
22:                
23:                //***********************************************************************************************************/
24:                void main(){
   033    3007     MOVLW 0x7
25:                CMCON=7;
   034    0099     MOVWF CMCON
26:                //--------------------------
27:                TRIS_OUT1=0;
   035    1683     BSF STATUS, 0x5
   036    1005     BCF GPIO, 0
28:                OUT1=0;
   037    1283     BCF STATUS, 0x5
   038    1005     BCF GPIO, 0
29:                TRIS_OUT2=0;
   039    1683     BSF STATUS, 0x5
   03A    1085     BCF GPIO, 0x1
30:                OUT2=0;
   03B    1283     BCF STATUS, 0x5
   03C    1085     BCF GPIO, 0x1
31:                //--------------------------
32:                TMR1 = -500;
   03D    30FE     MOVLW 0xfe
   03E    008F     MOVWF TMR1H
   03F    300C     MOVLW 0xc
   040    008E     MOVWF TMR1
33:                T1CON=0;
   041    0190     CLRF T1CON
34:                TMR1ON=1;
   042    1410     BSF T1CON, 0
35:                TMR1IE=1;
   043    1683     BSF STATUS, 0x5
   044    140C     BSF PIR1, 0
36:                //--------------------------
37:                PEIE=1;
   045    170B     BSF INTCON, 0x6
38:                GIE=1;
   046    178B     BSF INTCON, 0x7
39:                while(1){
   047    2847     GOTO 0x47

 

Что-то он попытался соптимизировать :)
 

Кстати, ТС'у (@Starina48 ), готовый проект :
1KHz.rar
В архиве проект, исходник, прошивка (hex), файл протеуса.

Скрытый текст

2019-02-13_23-59-57.thumb.png.236bf0c8c413db1c8b2d6c86fcff0745.png

 

Пользуйтесь на здоровье :)

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Alex сказал:

В PRO не должно быть такого...

это как раз в про.... с глобал и ассемблер оптимизацией

 

30 минут назад, Alex сказал:

Что-то он попытался соптимизировать :)

ничего он не пытался просто по вставлял лишние команды , типа закинул  FSR в контент

Ссылка на комментарий
Поделиться на другие сайты

 Alex, спасибо большое. Я не обратил внимание на 1кГц.rar. Видел его, но думал мой проект. Это и есть XC8? Сейчас буду разбираться. Еще раз огромное спасибо!!! 

Ссылка на комментарий
Поделиться на другие сайты

OFF

@UVV , извините, не владею олбанским... Не соблаговолите ли пояснить:

Это ваша оценка, что автор сделал выводы интересным образом?

Или вам интересно, сделал ли автор выводы?

Или вам интересно, положительно ли оценивает автор сделанные им выводы?

Удивляюсь последнее время. как люди друг друга ещё понимают? Неужели так трудно использовать знаки препинания? ...

Изменено пользователем Lexter
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Alex, установил MPLABX v.5.10 и XC 8 v.2.05. все нормально работает, но обнаружил одну странность: При загрузке .hex файла в программатор PIC KIT 2, программа загружается так: в нулевой ячейке - код, затем пустота, а продолжение программы в самом конце поля. Вся середина пустая. Чем это обьяснить? 

Ссылка на комментарий
Поделиться на другие сайты

22 минуты назад, Starina48 сказал:

Чем это обьяснить?

Командой GOTO START. А START - с того адреса, где код начинается. Прерываний, видимо, в прошивке нет.

Ссылка на комментарий
Поделиться на другие сайты

Lexter, как практически это сделать. Только начал MPLABX заниматься, еще все в тумане. Жалко , что почитать на русском негде.

Вставил проект.

MPLABX.jpg

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, Starina48 сказал:

в нулевой ячейке - код, затем пустота, а продолжение программы в самом конце поля. Вся середина пустая.

это хорошо, это значит что компилятор работает правильно. критические области в начале, основное тело в конце. а тк критических областей у тебя нет , соответственно всего одна команда перехода к основной программе.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, Starina48 сказал:

 Чем это обьяснить? 

Скажу я Вам так - просто не обращайте на это внимание. Компилятор как посчитал сделать нужным, так и сделал.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...