* Use unsigned char, as unsigned short is a 16-bit value
* Increment and decrement PWM value by 1 instead of 16
* Alternate fixed LED state based on increasing/decreasing PWM duty
* Ignore /funclist file
+++ /dev/null
-_led_init: CODE, 1847 0 11
-_pwm_set: CODE, 1858 0 11
-_pic_init: CODE, 1837 0 10
-_delay: CODE, 1912 0 28
-_led_set: CODE, 1869 0 16
-_main: CODE, 1940 0 108
-_pwm_init: CODE, 1885 0 27
-Total: 211
\ No newline at end of file
#include <pic16f1827.h>
#define RUNAT32MHZ /* else 16 MHz */
#include <pic16f1827.h>
#define RUNAT32MHZ /* else 16 MHz */
-#define BRIGHT_STEP 16 /* starts at 0 */
-#define BRIGHT_STEPS 16 /* includes 0 */
#define LEDBIT 0x01 /* PORTB.3 */
#if defined(RUNAT32MHZ)
#define LEDBIT 0x01 /* PORTB.3 */
#if defined(RUNAT32MHZ)
-void led_set(unsigned short led)
+void led_set(unsigned char led)
{
if (led)
PORTB |= LEDBIT;
{
if (led)
PORTB |= LEDBIT;
-void pwm_set(unsigned short step)
+void pwm_set(unsigned char step)
- CCPR1L = step * BRIGHT_STEP;
- for (unsigned counter = 0; counter < 50000; counter++);
+ for (unsigned counter = 0; counter < 10000; counter++);
- unsigned short fwd = 1;
- short int step = 0;
- short int led = 0;
+ unsigned char fwd = 1;
+ unsigned char step = 0;
pic_init();
led_init();
pwm_init();
while (1) {
pic_init();
led_init();
pwm_init();
while (1) {
- led = 1 - led;
- led_set(led);
pwm_set(step);
if (fwd == 0) {
step--;
pwm_set(step);
if (fwd == 0) {
step--;
+ if (step == 0xff) { /* rollover */
+ led_set(0);
}
} else /* fwd == 1 */ {
step++;
}
} else /* fwd == 1 */ {
step++;
- if (step == BRIGHT_STEPS) {
+ if (step == 0) { /* rollover */
+ led_set(1);