Jump to content

Bugrim

Members
  • Content Count

    217
  • Joined

  • Last visited

Community Reputation

2 Обычный

About Bugrim

  • Rank
    Постоялец
  • Birthday 09/28/1980

Информация

  • Пол
    Мужчина
  • Город
    г. Запорожье, Украина

Электроника

  • Стаж в электронике
    10-20 лет

Recent Profile Visitors

5625 profile views
  1. Не раз накалываюсь. Присваивается не правильное значение, однако программа отрабатывает правильно. Вероятней всего для данного камня это не имеет значения. Использую PIC16F886, компилятор XC8, v1.33.
  2. Объявлены массивы: unsigned char dekady[4][10],dekadyBCD[4][10]; Начальный адрес первого 0х110, второго 0х190. Функция void inc_chass(char *chas_dec,char *chas_bcd); Тогда вызов функции inc_chass(&dekady[1][0],&dekadyBCD[1][0]); должен передать указателю chas_dec значение 0х11А, а указателю chas_bcd значение 0х19А. Однако при прогоне в протеусе указателю chas_dec присваивается значение 0x0F1A, почему мне не понятно. Указателю chas_bcd присваивается правильное значение 0х19А.
  3. Да так и есть - предупреждение "illegal conversion between pointer types". Однако переписав вызов функции: inc_chass(&(dekady[1][0]),&(dekadyBCD[1][0])); //увеличить час приводит не совсем к нужному результату: chas_dec=0x0F1A, должен быть 0х11А, chas_bcd=0х19А, что есть правильно. Я знаю, однако, в дальнейшем, необходимо будет передавать указатель на разные области массива.
  4. Опять затупил. Помогите разобраться. Объявлены массивы: unsigned char dekady[4][10],dekadyBCD[4][10]; Начальный адрес первого 0х110, второго 0х190. Есть функция void inc_chass(unsigned char *chas_dec,unsigned char *chas_bcd){ if (++(*chas_dec)==24) *chas_dec=0; *chas_bcd=bin_to_bcd(*chas_dec); *(chas_bcd+1)=*chas_bcd&0x0f; *chas_bcd=(*chas_bcd>>4)&0x0f; } Ее прототип: void inc_chass(char *chas_dec,char *chas_bcd); Вызов функции: inc_chass(dekady,dekadyBCD[1][0]); //увеличить час Но в функцию передаются не те данные, которые хочу, т.е. не адрес начала массива "dekady" (0х110) и не адрес "dekadyBCD[1][0]" (0х19А), а вот что: Где не прав, подскажите. Может это длина адреса виновата, которая в char не помещается?
  5. Проверит на самой стабильной версии - работает. Теперь стабильный протеус найти надо.
  6. Может все таки протеус глючит? Подскажите стабильную версию.
  7. ANSEL=0. Но только в даташите, не сказано что данный регистр влияет на работу порта В.
  8. Добрый день. Прошу помоши. Упорно не хочет читать единицу RB0. МК - PIC16F886. Для моделирования использую MPLABX+Proteus 8.4, язык ХС8 v1.33. #include <xc.h> /*#include "I2Cmay.h" #include "LCD.h" #include "Monitor.h" #include "main.h"*/ #define _XTAL_FREQ (8000000) #include <stdio.h> #include <stdlib.h> // CONFIG1 #pragma config FOSC = EXTRC_CLKOUT// Oscillator Selection bits (RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) #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 BOREN = OFF // Brown Out Reset Selection bits (BOR disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled) #pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) // CONFIG2 #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) void main(void) { unsigned int temp; //nastroyka (); TRISB=0b00000001; while(1){ if (RB0==0){ RB1=1; RB1=0; } NOP(); } } Внешнея подтяжка к 5В, однако постоянно заходит на строки в условии. Состояние регистров ANSELH=0, CCP1CON=0, CM2CON1=2, IOCB=0, INTCON=1, TRISB=1. В чем проблема не понимаю, грешил на протеус, переустановил с 8.1 на 8.4 - не помогло. Чего я не так делаю?
  9. То есть устанавливать не бит а записывать порт. Тогда: //при записи единицы PORTB|=mask[kanal]; //при записи нуля PORTB&=~mask[kanal]; При таком подходе маска не нужна, необходимо канал задавать правильно (1,2,4). //при записи единицы PORTB|=kanal; //при записи нуля PORTB&=~kanal; Вроде бы просто, а не догнал. Спасибо.
  10. Доброго времени суток. Использую XC8 v1.3 Есть задача общаться программно по 1wire в PIC. Для этого выделено 3 вывода (RB0, RB1, RB2). На каждом весит свой датчик. Для работы с каждым выводом будут использоваться одинаковые функции (например: void wire_vivod_byte(char data, char kanal) ). Как можно в теле функции обратиться к RB0, RB1 или RB2 в зависимости от переменной kanal. Через if (kanal==0)..., или swith (kanal)..., я реализовать могу, а вот хочется что бы переменная kanal выступала в роли смещения.
  11. А в критической ситуации защитный диод не спасет? Да и многие схемы без них, как инет показывает.
  12. Вымыл тщательно. При сборке подгоняли, поэтому забыл допаять конденсаторы в снабберной цепи (потом вспомнил), так и висят на одной ноге (выпаивал для проверки). Работает 3 день без нареканий. По пыли таки, вероятней всего, утечка была.
×
×
  • Create New...