Hola soy nuevo por aquí, pero a ver si me podeis hechar una mano a portar un programa a este mundillo de los PIC, el caso esque yo uso arduino pero ha caido en mis manos este PIC 16f648A y el programa que es para controlar un display a traves de un 74HC595, creo q con este pic es mas q suficiente para el proyecto, el programa es mas caompleto pero lo he reducido para ir aprendiendo, tampoco quiero que me lo deis hecho quiero aprender de donde salen las cosas.
Con la declaracion de las variables y pins me lio, creo q en el PIC solo con declarar los puertos vale, entonces serian 3 salidas y una entrada q es un boton.
digitalwrite cuando esta en HIGH seria por lo que he leido como output_high(pin) y cuando esta en LOW output_low(pin).
byte nArray[10];
byte nArray2[10];
byte estadoboton1=0;
int d=7;
void setup() {
pinMode(pin9, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin10, OUTPUT);
pinMode(pin3,INPUT);
nArray2[0] = 0x40; // 0
nArray2[1] = 0x79; // 1
nArray2[2] = 0x24; // 2
nArray2[3] = 0x30; // 3
nArray2[4] = 0x19; // 4
nArray2[5] = 0x12; // 5
nArray2[6] = 0x02; // 6
nArray2[7] = 0x58; // 7
nArray2[8] = 0x00; // 8
nArray2[9] = 0x10; // 9
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin,MSBFIRST, nArray2[7]);
digitalWrite(latchPin, 1);
}
void loop() {
estadoboton1 = digitalRead(boton1);
if(estadoboton1 == HIGH) {
if(d>0){ d--;
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin,MSBFIRST, nArray2[d]);
digitalWrite(latchPin, 1);
delay(500);
}
else{d=9;}
}
}
}
Segun mis casi nulos conocimientos el incio de la portacion seria algo así:
#include <16f628a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use fast_io(b)
byte nArray[10]={0x40, 0x79, 0x24, 0x30, 0x19,0x12,0x02, 0x58, 0x00,0x10}
byte estadoboton1=0;
int d=7;
void main(void)
{
set_tris_b(0x00001000); //puertos rb0-2 como salida y rb3 como entrada
disable_interrupts(GLOBAL); //todas interrupciones desactivadas lo he leido por ahi pero no se para que sirve
estadoboton1 = input_state(PIN_B3)
if(estadoboton1 == HIGH) {
if(d>0){ d--;
output_low(PORT_B2)
shiftOut(PORT_B0, PORT_B1,MSBFIRST, nArray2[d]); // la funcion esta creo q si existe pero no se si funciona igual
output_high(PORT_B2)
delay(500); //esto no se si existe en ccs o es de otra forma
}
else{d=9;}
}
}
Seguro que he metido varios hachazos pero a ver que os parece o como mejorarlo.