Jump to content

LiSiY5

Members
  • Content Count

    9
  • Joined

  • Last visited

Posts posted by LiSiY5


  1. Работаю в Mplab X 5.40, написал основной код программы для Pic16 на Си и есть небольшой код на ассемблере. Так вот, подскажите как правильно сделать переход на подпрограмму с Си на ассемблер и назад. Может на каком либо примере где-то есть. Заранее всем спасибо.


  2. Помогите пожалуйста, что может быть? Код написан на ассемблере, симулятор  работает, все ОК. Прошиваю и нет реакции на смену 1/0 на входах. Выхода работают, моргают, а вход никак.

    Код с конфигурацией прилогаю, Help me please)))

    LIST p=16F877A
    	__CONFIG 3F4Eh; кварц 20MHz
    ;===============================================================================================
    ; Определение положения регистров специального назначения. 
    ;===============================================================================================
    OPTION_REG  equ        80h
    Status      equ        03h         ; Регистр Status.
    PortA       equ        05h         ; Регистр PortA.
    TrisA       equ        85h         ; Регистр TrisA - банк 1.
    PortB       equ        06h         ; Регистр PortB.
    TrisB       equ        86h         ; Регистр TrisB - банк 1.
    IntCon      equ        0Bh         ; Регистр IntCon.
    ADCON0      equ        1Fh         ; Регистр установок компаратора
    
    ;===============================================================================================
    ; Определение названия и положения регистров общего назачения.
    ;===============================================================================================
    
    SecH_1      equ        20h         ; старший разряд счетчика
    SecL_1      equ        21h         ; младший разряд счетчика
    but			equ			22h
    
    ;=============================================================================================
    ; Точка входа в программу.
    ;=============================================================================================
                org        0           ; Начать выполнение программы 
                goto       Start1      ; с подпрограммы START.
    
    ;=============================================================================================
    ; Инициализация порта А
    ;=============================================================================================
    
    Start1      clrf       PortA       ; очистить порт А
                movlw      .7          ; Выключить компараторы и активировать порты входа-выхода
                movwf      ADCON0      ; 
    			bsf       Status,5    ; Установить банк 1.
                movlw      3FH          ; портА работает на вход
                movwf      TrisA       ; входы 6,7 работают в режиме генератора
    ;=============================================================================================
    ; Инициализация порта B
    ;=============================================================================================
                clrf       TrisB       ; портВ работает на выход
    
                movlw      0           ; Включить подтягивающие резисторы порта В.
                movwf      OPTION_REG  ; На входе INT прерывания - по заднему фронту.
                bcf        Status,5    ; Установить банк 0.
                bcf        Status,6    ; Установить банк 0.
    ;--------------------------------------------------------------------------------------------
    ; анализ кнопки
    ;--------------------------------------------------------------------------------------------
    Start       clrwdt
    			btfsc      PortA,1     ; eсли А1=1
                bsf			but,0
    			btfsc	   PortA,2
    			bcf			but,0
    			btfsc		but,0
    			goto        pusk
    			goto		Start
    pusk		bsf        PortB,0     ; включить В0
                call		zad50
                bcf        PortB,0     ; выключить В0
    			call		zad50
    	    
    
                goto        Start
    
    ;--------------------------------------------------------------------------------------------
    ; задержка 50 мс 
    ;--------------------------------------------------------------------------------------------
    zad50      movlw      .244        ; Закладка в регистр W константы .244  
                movwf      SecH_1      ; Копирование константы .244 из регистра W в регистр SecH_1.         
                                     
                movlw      .173        ; Закладка в регистр W константы .173
                movwf      SecL_1      ; Копирование константы .173 из регистра W в регистр SecL_1.
    
    PAUSE_D     clrwdt                 ; Сброс сторожевого таймера WDT
                    
                decfsz     SecL_1,F    ; Декремент содержимого младшего разряда счетчика SecL_1
                goto       PAUSE_D     ; Если результат декремента не=0, то переход в ПП PAUSE_D.                    
      
                decfsz     SecH_1,F    ; Если результат декремента =0, то инкремент старшего разряда счетчика SecH_1
                goto       PAUSE_D     ; Если результат инкремента не=0, то переход в ПП PAUSE_D.
                return                 ; Если результат инкремента =0, то программа исполняется далее.
    
    
                end                    ;конец

     


  3. Разрешите объяснить, Я хочу полный код под мои конфигурационные биты на Pic16f877a. Мне необходимо получить переменную, назовем ADC, которая меняет значение от 0 до 1023, при изменении напряжения на входе AN0 от 0В до 5В. Далее сравнивая переменную с задаными const постараюсь получить на выходе то что задумано. Не судите строго, после перенесенного менингита сложно все вспоминаеться...


  4. Задачка стала по-сложнее, надо организовать АЦП преобразователь, кто то работал? Подскажите, а то с Google не могу договориться. Исходные конфигурационные данные и обвязку прилагаю(работа: по изменению потенциала на AN0 меняются выходы RB0-RB7). Всем спасибо за помощь.

    
    // PIC16F877A Configuration Bit Settings
    
    // 'C' source line config statements
    
    // CONFIG
    #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
    #pragma config WDTE = ON        // Watchdog Timer Enable bit (WDT enabled)
    #pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
    #pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
    #pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
    #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
    #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
    #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
    
    // #pragma config statements should precede project file includes.
    // Use project enums instead of #define for ON and OFF.
    
    #include <xc.h>
    
    #define _XTAL_FREQ 20000000

     

    ADC.PDF


  5. 28.08.2020 в 18:49, IMXO сказал:

    и что это Вам даст? конфигирация пишется под обвязку МК и применяемый программатор , в соответствии с описанием компилятора

    можно конечно попробовать помочь , от Вас  html на МК с описанием битов конфигурации из папки доков компилятора, инклюд , схема обвязки МК , и модель программатора и метод програмирования.

    Спрыгиваю на более простой МК PIC16F877A, использую програматор РicKit3, компилятор ХС8, программа MPLAB X IDE, биты конфигурации:

    // CONFIG
    #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
    #pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
    #pragma config PWRTE = ON       // Power-up Timer Enable bit (Power-up Timer is enabled)
    #pragma config CP = OFF 

     

    Хочу программу, при RA0==1 включается RB0=1.

    Подскажите пожалуйста.


  6. Ребята помогите, Я начинаю изучение Pic и не могу создать первую прогу. Сам программирую на LD, FBD, ASM, но тут не могу стартонуть, с выходами все получается, а вот с входами проблемка. Есть код на Си, подскажите в чем ошибка. Буду очень благодарен любой информации.


    // PIC16F18877 Configuration Bit Settings

    // 'C' source line config statements

    // CONFIG1
    #pragma config FEXTOSC = HS     // External Oscillator mode selection bits (HS (crystal oscillator) above 4MHz; PFM set to high power)
    #pragma config RSTOSC = EXT1X   // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits)
    #pragma config CLKOUTEN = OFF   // Clock Out Enable bit (CLKOUT function is disabled; i/o or oscillator function on OSC2)
    #pragma config CSWEN = ON       // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
    #pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable bit (FSCM timer enabled)

    // CONFIG2
    #pragma config MCLRE = ON       // Master Clear Enable bit (MCLR pin is Master Clear function)
    #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
    #pragma config LPBOREN = OFF    // Low-Power BOR enable bit (ULPBOR disabled)
    #pragma config BOREN = ON       // Brown-out reset enable bits (Brown-out Reset Enabled, SBOREN bit is ignored)
    #pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices)
    #pragma config ZCD = OFF        // Zero-cross detect disable (Zero-cross detect circuit is disabled at POR.)
    #pragma config PPS1WAY = ON     // Peripheral Pin Select one-way control (The PPSLOCK bit can be cleared and set only once in software)
    #pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a reset)

    // CONFIG3
    #pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
    #pragma config WDTE = ON        // WDT operating mode (WDT enabled regardless of sleep; SWDTEN ignored)
    #pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software control; keyed access not required)
    #pragma config WDTCCS = SC      // WDT input clock selector (Software Control)

    // CONFIG4
    #pragma config WRT = OFF        // UserNVM self-write protection bits (Write protection off)
    #pragma config SCANE = available// Scanner Enable bit (Scanner module is available for use)
    #pragma config LVP = ON         // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/Vpp pin function is MCLR.)

    // CONFIG5
    #pragma config CP = OFF         // UserNVM Program memory code protection bit (Program Memory code protection disabled)
    #pragma config CPD = OFF        // DataNVM code protection bit (Data EEPROM code protection 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 20000000


    void main(void) {
        TRISB=0;
        PORTB=0;
        TRISA=11111111;
        PORTA=11111111;
        TRISA=11111111;
        if(PORTAbits.RA0 == 1) { RB0 = 1;}

        return;
    }
     

×
×
  • Create New...