LiSiY5
-
Постов
9 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные LiSiY5
-
-
Работаю в Mplab X 5.40, написал основной код программы для Pic16 на Си и есть небольшой код на ассемблере. Так вот, подскажите как правильно сделать переход на подпрограмму с Си на ассемблер и назад. Может на каком либо примере где-то есть. Заранее всем спасибо.
0 -
Помогите пожалуйста, что может быть? Код написан на ассемблере, симулятор работает, все ОК. Прошиваю и нет реакции на смену 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 ;конец
0 -
Разрешите объяснить, Я хочу полный код под мои конфигурационные биты на Pic16f877a. Мне необходимо получить переменную, назовем ADC, которая меняет значение от 0 до 1023, при изменении напряжения на входе AN0 от 0В до 5В. Далее сравнивая переменную с задаными const постараюсь получить на выходе то что задумано. Не судите строго, после перенесенного менингита сложно все вспоминаеться...
0 -
Задачка стала по-сложнее, надо организовать АЦП преобразователь, кто то работал? Подскажите, а то с 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
0 -
Спасибо, все заработало.
0 -
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.
Подскажите пожалуйста.
0 -
Увы не получается, может у кого то есть код на данный контроллер на Си или ассемблере с конфигурационными байтами. Первый код хочу по входу А0 включается выход В0.
0 -
Ребята помогите, Я начинаю изучение 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;
}
0
Переходы в программе
в PIC
Опубликовано
Может у кого то есть мануал на русском для компилятора xc8? Не могу найти нормальную ссылку...