Starina48

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

40 сообщений в этой теме

IMXO    1 449
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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    573

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 449
7 минут назад, Alex сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Starina48    0

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

Изменено пользователем Starina48
дописал

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Starina48    0

Ну что ж, очень жаль, что задачу решить не удалось.  

Закрывайте данную тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    337
В 2/10/2019 в 19:20, Starina48 сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    573
2 часа назад, Starina48 сказал:

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    573

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

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

#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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 449
1 час назад, Alex сказал:

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    573

Ну а куле делать, Микрочип ... Такие вот у него компиляторы :)
Благо для PIC32 GCC воткнули, вместо какого-нибудь своего :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Starina48    0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    573

MPLAB IDE 8.92
Но можете и в MPLAB X запустить. Создайте новый проект и добавьте туда файл main.c. Либо сделайте импорт проекта.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UVV    52

интересно автор сделал выводы положительные для себя

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lexter    341

OFF

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

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

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

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

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

Изменено пользователем Lexter
  • Одобряю 1

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Здравствуйте! В разделе Ардуино не нашел подходящей темы,  да в принципе и не совсем по ардуино вопрос. Ниже приведена часть схемы прозвонки, которая может показывать как  напряжение, так и сопротивление. Измерение напряжение происходит посредством делителя, сопротивления-знаем напряжение стабилизатора и сопротивление прецизионного резистора, и через падение напряжения Ардуино вычисляет сопротивление участка. А теперь проблема, коммутация входов происходит через реле, которое управляется кнопкой. Программно была поставлена блокировка, чтоб реле не срабатывало если есть напряжение, но увы это не помогло. Спасет ли схему от случайного попадания напряжения  (~220-380В) если я поставлю диод VD2 (чтоб защитить источник стабилизированного напряжения) и VD4 (чтоб не спалить ардуино). По сути вход ардуино высокоомный и простой стабилитрон должен выдержать.
    • Заменил, поставил новые с магазина. Да еще не сказал плоттер включается, переходит по меню и сохраняет настройки.
    • Гораздо проще применить уже готовое решение не подключая дисплея например. Я, по своей неопытности, готовые исходники с atmega8 на atmega328p примерно 2 месяца переводил. А Вы хотите, что бы кто-то взялся за неизвестный ему МК под который пишется неизвестно на чём.
    • А куда верхний полигон силовой земли потеряли? Или плата трехслойная? Если нет, то плата в принципе нерабочая.
    • Существует формула для расчёта теплового сопротивления теплоотвода:
      Q=(T2-T1)/P-Q1-Q2, где
      Т2 - максимальная температура кристалла транзистора по справочнику,
      Т1 - максимально допустимая температура в коробке с нашим устройством, 
      P - рассеиваемая на транзисторе мощность,
      Q1 - тепловое сопротивление кристалл-корпус по справочнику, 
      Q2 - тепловое сопротивление корпус-радиатор. Освежите память.