Stránka 1 z 2
PIC16F876A nejde __delay_ms(500);
Napsal: 11 kvě 2015, 20:28
od toMajstr
Dobrý den, promiňte že zase otravuju, snažil jsem neprogramovat blikání ledkou pro PIC16F876A ale program se zastaví na prvním __delay_ms(500);
takže ledka svítí (když se dá první zhasnout ledku, tak zase zůstane zhaslá). Mám definovanou frekvenci krystalu, u PIC16F630 mi to šlo bez problému. Nevíte někdo čím to je?
edit: používám XC8 compiler
Napsal: 11 kvě 2015, 21:47
od toMajstr
Ano simuloval, v real pic simulatoru a fungovalo to, tady je kód
Kód: Vybrat vše
/*
* File: main.c
* Author: TOSHIBA
*
* Created on 19. duben 2015, 18:22
*/
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <pic16f876a.h>
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#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)
#define _XTAL_FREQ 4000000
int main(int argc, char** argv) {
ADCON1 = 0b00000110;
CMCON = 0b00000111;
TRISA = 0b00000000;
PORTA = 0b00000000;
while(1){
PORTA = 0b00000001;
__delay_ms(500);
PORTA = 0b00000010;
__delay_ms(500);
PORTA = 0b00000000;
__delay_ms(500);
}
return (EXIT_SUCCESS);
}
Napsal: 12 kvě 2015, 09:40
od Pawalo
PWRTE zapnout, BOREN vypnout, LVP vypnout. nevidim nikde nastavení MCLR a na pin MLCR odpor 10k na VDD. a pak vyzkoušet. střílim jen od voka takže nic nezaručuju
![Smile :)](./images/smilies/icon_smile.gif)
Napsal: 12 kvě 2015, 10:56
od Jeejda_teda_puvodne
Napsal: 12 kvě 2015, 16:23
od toMajstr
Jak to vypnu? ale kód je snad dobrej když to šlo v simulátoru, ne?
Napsal: 12 kvě 2015, 16:56
od Pawalo
PWRTE = ON
BOREN = OFF
LVP = OFF
k Cčku sem teda jen trochu přičmuchával, tak si nejsem tak uplně jistej ale hodnota do delay_ms nemá nějakou hranici ?? skus tam dát třebas 100 a udělat tich příkazů 5.
Napsal: 12 kvě 2015, 17:09
od toMajstr
už to de, a když jsem to vrátil na 500 tak to de taky, asi nějaká anomálie
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Napsal: 12 kvě 2015, 19:04
od Jeejda_teda_puvodne
Napsal: 12 kvě 2015, 19:55
od MiloPS3
spis bych rek ze se tam predava 8bit hodnota , coz pri hodnote 500 je prekroceno
a nebo taky ne , koukni se do helpu co tam pisou, nebo sem nasel ze je to omezeny podle pouzityho krystalu
Napsal: 14 kvě 2015, 06:09
od toMajstr
Na PIC16f630 jsem měl stejnou frekvenci a delay 1 sekundu, takže tím to nebude, ne?
Napsal: 14 kvě 2015, 14:14
od MiloPS3
tak se koukni do disasembleru jak vypada delay...
Napsal: 14 kvě 2015, 20:41
od Jeejda_teda_puvodne
Napsal: 15 kvě 2015, 06:13
od petrfilipi
Jeejda píše:... 10 ms a sčítej, aspoň u toho bude MCU moct dělat i něco jinýho.
Jak to myslíš? Co to je "něco jiného"?
Podle mě je jedno, zdali máš delay 100x10ms nebo 1x1s. Řekl bych, že stejně můžeš odskočit jen do přerušení, a do toho odskočíš jak z čekání 10ms, tak 1s.
PF
Napsal: 15 kvě 2015, 12:03
od MiloPS3
nerek bych ze sou to kravyny, spis se nauci najit chybu ( a mozna i do budoucna) a nebude tu mozna tolik topiku ...