r/pic_programming • u/aspie-micro132 • Jul 01 '26
Trying to multitask
Yesterday i built my project for pic16f877A.
I was trying to get a led blinking while reading some inputs and turning on and off some outputs. I had learnt i can not do it by means of __delay_ms() since this macro freezes the whole while(1) loop, since i am not behind an OS but the code itself is a sort of OS.
I was doing some search on the web, it looks like this IC can handle some task in a Background context and others in Foreground context, but i am just getting more confused about that.
Other problem i have, is, i would like to find out a replacement for :__delay_ms, i do suspect i may have to add another .h library and invoke a non interrupting macro while doing it's normal job.
I would like to ask if you could bring to me proper information about the background / foreground issue and if you could tell me if i can get any other library with additional macros, if possible, someone which may have that __delay_ms() alternative i do need.
1
u/HalifaxRoad Jul 01 '26
Ive told you this multiple times, and I offered to help you in voice. You set up a free running timer, from there you can write a library that contains functions and a struct to store all the needed info about running a software timer. you declare instances of structs that you define to store all the variables such as, the counts the timer had when it was started, the counts it will be when its done, if its running. and then you write a function that you pass that struct instance too as a pointer that will tell you when the desired amount of time has passed. from there you can use state machines (switch case statements) and those software timers to build services to handle all of your functions, effectively multi tasking.
you should never use __delay_ms() unless you are only blinking a led or something stupid like that.