Например TDA7294

Форум РадиоКот :: Просмотр темы - Не правильная компиляция СИ кода в HEX / MPLAB X | C
Форум РадиоКот
https://radiokot.ru/forum/

Не правильная компиляция СИ кода в HEX / MPLAB X | C
https://radiokot.ru/forum/viewtopic.php?f=58&t=154174
Страница 1 из 1

Автор:  Lublu_megy [ Чт апр 12, 2018 23:06:18 ]
Заголовок сообщения:  Не правильная компиляция СИ кода в HEX / MPLAB X | C

Всем привет! Пытаюсь освоить PIC12F629. В качестве IDE выбрал MPLAB X. Сделал блинк, компилирую... загружаю в PicKit 3 Programmer... и не работает. PIC выдаёт 0.10 вольт на пине. Посмотрел в HEX и тут вижу: в самом начале какой-то "2BFD" на 000. На "3e2" уже начинаются какие-то данные. Почему так произходит? (При компиляции ассеблерского кода всё нормально.)
ИзображениеИзображение
Спойлер
Код:
// CONFIG
#pragma config FOSC = EXTRCCLK  // Oscillator Selection bits (RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-Up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = ON       // GP3/MCLR pin function select (GP3/MCLR pin function is MCLR)
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>
#include <pic12f629.h>

#define  _XTAL_FREQ 4000000

void main(void){
    //Вспомогательная переменная
    //для организации временной задержки
    unsigned long counter;
     
    //Настройка портов ввода/вывода PIC12F675
    //Выключение подтягивающих резисторов
    WPU = 0x00;
   
    //Запретить использование подтягивающих резисторов
    OPTION_REGbits.nGPPU = 1;
    // отключить компаратор 
    CMCON = 0x07;
     
    //Настрока выходов GP4, GP5 на выход
    TRISIO = 0;
     
    //Установка на выходах GP4, GP5 лог. 0
    GPIO = 0;
     
    //Бесконечный цикл.
    while(1){
        GPIO4 ^=1;   //выв. 3 инверсия бита 4
        //Задержка на 1 сек
        __delay_ms(1000);
    }
     
}

Автор:  oleg110592 [ Пт апр 13, 2018 10:49:48 ]
Заголовок сообщения:  Re: Не правильная компиляция СИ кода в HEX / MPLAB X | C

... и не работает

поправил, расположил тут:
viewtopic.php?p=3352979#p3352979
в протеусе мигает
з.ы. у этих пиков, насколько помню, в начале программы должна быть команда загрузки константы для внутреннего RC генератора или переход в конец. А компилятор вроде с давних времен код с конца размещал.

Автор:  КРАМ [ Сб апр 14, 2018 07:50:26 ]
Заголовок сообщения:  Re: Не правильная компиляция СИ кода в HEX / MPLAB X | C

Посмотрел в HEX и тут вижу: в самом начале какой-то "2BFD" на 000. На "3e2" уже начинаются какие-то данные. Почему так произходит?

0x2BFD это команда goto 0x03FD, то есть безусловный переход по адресу 0x03FD.
Так как в исходном коде нет обработчика прерываний, кода по вектору 0х0004 нет.
Размещение кода "снизу" флеша - стандартная фича микрочиповских компиляторов для 8-разрядных контроллеров. Сверху (младшие адреса) обычно размещаются таблицы констант. Даже тело обработчика прерываний размещается снизу, а на векторе 0004 тоже обычно goto.
PS. Далее исполнение выглядит так (в коде нет вызова калибровочной константы):

Код:
0x03FD  0x0183  clrf  STATUS
0x03FE  0x2BE2  goto 0x03E2

0x03E2  0x1683  bsf  STATUS, RP0
0x03E3  0x0195  clrf  WPU                        ; WPU=0x00
0x03E4  0x1781  bsf  OPTION_REG, GPPU
0x03E5  0x3007  movlw  0x07
0x03E6  0x1283  bcf  STATUS, RP0
0x03E7  0x0099  movwf  CMCON0             ; CMCON=0x07
0x03E8  0x1683  bsf  STATUS, RP0
0x03EA  0x0185  clrf  TRISIO                    ; TRISIO=0x00
0x03EB  0x1283  bcf  STATUS, RP0
0x03EC  0x0185  clrf  GPIO                       ; GPIO=0x00
0x03ED  0x1283  bcf  STATUS, RP0
0x03EE  0x3010  movlw  0x10

..... 

Автор:  Lublu_megy [ Вс апр 15, 2018 00:01:00 ]
Заголовок сообщения:  Re: Не правильная компиляция СИ кода в HEX / MPLAB X | C

... и не работает

поправил, расположил тут:
viewtopic.php?p=3352979#p3352979
в протеусе мигает
з.ы. у этих пиков, насколько помню, в начале программы должна быть команда загрузки константы для внутреннего RC генератора или переход в конец. А компилятор вроде с давних времен код с конца размещал.

Урааа!!! Работает!! Только надо было поправить GPIO4 на GPIO2. Я рад как ребёнок!!!!11 :)) :lol: :) 8) :love: :wink: :))) :idea:
Изображение
Код:
Спойлер
Код:
#pragma config FOSC = INTRCIO  //
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-Up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF       //
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#define  _XTAL_FREQ 4000000

void main(void){
    //Вспомогательная переменная
    //для организации временной задержки
    unsigned long counter;
     
    //Настройка портов ввода/вывода PIC12F675
    //Выключение подтягивающих резисторов
    WPU = 0x00;
   
    //Запретить использование подтягивающих резисторов
    OPTION_REGbits.nGPPU = 1;
    // отключить компаратор
    CMCON = 0x07;
     
    //Настрока выходов GP4, GP5 на выход
    TRISIO = 0;
     
    //Установка на выходах GP4, GP5 лог. 0
    GPIO = 0;
     
    //Бесконечный цикл.
    while(1){
        GPIO2 ^=1;   //выв. 3 инверсия бита 4
        //Задержка на 1 сек
        __delay_ms(1000);
    }
}


Вложения:
Комментарий к файлу: pic12f629 blink C
MAIN.c [1.42 KiB]
Скачиваний: 579
Комментарий к файлу: pic12f629 blink
worked_test.X.production.hex [215 байт]
Скачиваний: 587

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/