# Fish Feeder Idea...Help Regards

#### Dan Soze

##### Member
Hello Dan

This is the hex file I already get. Its working 100%.
Congratulations and well done.

To go a bit further with this example I would like to mention that there are at least 8 places in the code that are style bugs in how the statements are written.

Let me explain what a style bug is and why this is an important concept.

A style bug occurs when the syntax used in a statement is inconsistent with other similar statements in the same project.

Style bugs do not usually cause the application to fail to work properly. The problems that they cause are in the mind of the developer when projects become large. In a small project, like this one, inconsistent style is no real problem. In larger projects with hundreds of files, tens of thousands of lines of code and multiple developers then consistent usage of style is essential to maintain sanity.

When anyone starts to learn how to develop code it is important to experiment with various styles then adopt the style that helps you create clear and consistent code for the computer language you will use. When working with a group there needs to be a style guide that all group members approve of and will use consistently.

So for additional credit find at least 8 statements where I used correct but inconsistent syntax or formatting.

For even more credit add comments, in any language you are most at home with, that clearly and concisely describes how this example code works. Warning: This is something of a trap because I used an advanced technique or two when implementing the Timer Zero interrupt service routine. When you understand the HOW and more importantly the WHY of the choices I made for this implementation you will have learned a lot of important things about the PIC12F675 Timer Zero hardware.

#### manoj soorya

##### Member
Hi Dan,

But I dont understand some syntax.
A style bug occurs when the syntax used in a statement is inconsistent with other similar statements in the same project.

How to and where to use the correct syntax used in a statement is inconsistent with other similar statements... Its much difficult to me.

But I will try to learn........I will keep It in my mind what you like to teach me.

Thank you so much Dan.

#### Dan Soze

##### Member
But I don't understand some syntax.

How to and where to use the correct syntax used in a statement is inconsistent with other similar statements... Its much difficult to me.
In matters of style the notion of good or bad is based on experience. Often this experience is that of the person judging the style, in other cases it can be the collected experiences of many people.

At present you may not have enough experience to have formed a useful sense of what style could mean in this context.

This is my code with comments of where I went wrong in the style of the code I created:
Code:
    list n=0, c=150, r=dec
; File: main.asm
; Target: PIC12F675
; Created: 2018-02-23
; Author: Dan1138
;*********************************************************************
;                          ___ ___
;                   VDD ->|1  U  8|<- VSS
;                  LED1 <>|2     7|<> LED3
;                  LED2 <>|3     6|<> LED4
;                  SW1n ->|4     5|<> LED5
;                          ¯¯¯¯¯¯¯
;                         PIC12F675
;
;*********************************************************************
;
;  If the switch is Press and hold (My timer output is enable for 1 Minute minimum) either Press, all LED will be ON.
;  After 1 Second, LED 1 Turn Off,
;  After 2 Second, LED 2 Turn Off
;  After 4 Second, LED 3 Turn Off
;  After 6 Second, LED 4 Turn Off
;  After 8 Second, LED 5 Turn Off.
;
;  (5 LED is used for Manual Timer selection for the Motor will Enable..)
;
;*********************************************************************
;*********************************************************************
#include <p12f675.inc>
ERRORLEVEL -302         ; Suppress warning: Register in operand not in bank 0.
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_ON & _CP_OFF & _CPD_OFF

#define TIMER0_INTERRUPTS_PER_SECOND D'4000'
;
; BUG 1: LED defines not used should be removed
;
;#define LED1 GPIO,5
;#define LED2 GPIO,4
;#define LED3 GPIO,0
;#define LED4 GPIO,2
;#define LED5 GPIO,1

#define SW1n GPIO,3

ISR_DATA    UDATA_SHR  H'20' ; 0x20 ; BUG 2: Inconsistent syntax use H'20'
WREG_save       res 1
STATUS_save     res 1

TIMER_DATA  UDATA_SHR
IntsInOneSecond res 2
Seconds         res 1

RESET_CODE  CODE H'000' ; 0x000 ; BUG 3: Inconsistent syntax use H'000'
goto    Start

ISR_CODE    CODE H'004' ; 0x004 ; BUG 4: Inconsistent syntax use H'004'
movwf   WREG_save
movf    STATUS,W
movwf   STATUS_save

btfsc   INTCON,TMR0IE
btfss   INTCON,TMR0IF
goto    ISR_Exit
bcf     INTCON,TMR0IF
movlw   D'256'-D'250'+D'3' ;256-250+3  ; BUG 5: Inconsistent syntax use D'256'-D'250'+D'3'
movlw   -1
skpc
skpnc
goto    ISR_Exit
movlw   HIGH(TIMER0_INTERRUPTS_PER_SECOND-1)
movwf   IntsInOneSecond+1
movlw   LOW(TIMER0_INTERRUPTS_PER_SECOND-1)
movwf   IntsInOneSecond
incf    Seconds,F

ISR_Exit:
movf    STATUS_save,W
movwf   STATUS
swapf   WREG_save,F
swapf   WREG_save,W
retfie
START_CODE  CODE
Start:
btfsc   STATUS,RP0
goto    OscillatorCalibrationFailed
banksel OSCCAL
call    GetOSCCAL
movwf   OSCCAL
OscillatorCalibrationFailed:
banksel ANSEL
clrf    ANSEL
clrf    TRISIO
movlw   B'11011111'
movwf   OPTION_REG
banksel INTCON
clrf    INTCON
clrf    GPIO
movlw   H'07' ; 0x07 ; BUG 6: Inconsistent syntax use H'07'
movwf   CMCON
movlw   HIGH(TIMER0_INTERRUPTS_PER_SECOND-1)
movwf   IntsInOneSecond+1
movlw   LOW(TIMER0_INTERRUPTS_PER_SECOND-1)
movwf   IntsInOneSecond
clrf    Seconds
clrf    TMR0
movlw   D'256'-D'250'+D'3' ; 256-250+3  ; BUG 7: Inconsistent syntax use D'256'-D'250'+D'3'
bsf     INTCON,TMR0IE
bsf     INTCON,GIE
;
;
;
AppStart:
clrf    GPIO
AppLoop:
btfsc   SW1n
goto    AppLoop
bcf     INTCON,TMR0IE
movlw   HIGH(TIMER0_INTERRUPTS_PER_SECOND-1)
movwf   IntsInOneSecond+1
movlw   LOW(TIMER0_INTERRUPTS_PER_SECOND-1)
movwf   IntsInOneSecond
clrf    Seconds
movlw   B'00110111' ; LED1-5 on
movwf   GPIO
bsf     INTCON,TMR0IE
AppTimeout:
movf    Seconds,W
xorlw   D'1'
skpnz
goto    LED1_off
xorlw   D'1'^D'2'
skpnz
goto    LED2_off
xorlw   D'2'^D'4'
skpnz
goto    LED3_off
xorlw   D'4'^D'6'
skpnz
goto    LED4_off
xorlw   D'6'^D'8'
skpnz
goto    LED5_off
xorlw   D'8'
sublw   D'8'
skpc
goto    WaitForButtonUp
CheckSwitch:
btfsc   SW1n
goto    AppStart
goto    AppTimeout
;
;
;
WaitForButtonUp:
btfsc   SW1n
goto    AppStart
goto    WaitForButtonUp
;
;
;
LED1_off:
movlw   B'00010111' ; LED1   off
movwf   GPIO
goto    CheckSwitch
LED2_off:
movlw   B'00000111' ; LED1-2 off
movwf   GPIO
goto    CheckSwitch
LED3_off:
movlw   B'00000110' ; LED1-3 off
movwf   GPIO
goto    CheckSwitch
LED4_off:
movlw   B'00000010' ; LED1-4 off
movwf   GPIO
goto    CheckSwitch
LED5_off:
movlw   B'00000000' ; LED1-5 off
movwf   GPIO
goto    CheckSwitch

OSCCAL_CODE CODE H'3FF' ; 0x3ff ; BUG 8: Inconsistent syntax use H'3FF'
GetOSCCAL:
end

#### manoj soorya

##### Member
Hi Dan..

I mean I dont know what is movwf, movlw, skpc, goto etc..... Its difficult to me... No Idea about these type of syntax and its use.

I am just an Electronics Hobbyest. Not no anything about programming

#### Dan Soze

##### Member
I mean I don't know what is movwf, movlw, skpc, goto etc..... Its difficult to me... No Idea about these type of syntax and its use.

I am just an Electronics Hobbyist. Not no anything about programming
Everyone starts out just like you. You also have the advantage of learning to communicate using written English. That is so much harder than PIC assembly language. Today an electronics hobbyist will eventually get involved with writing code. It is impossible to avoid now because micro-controllers have replaced most of the special purpose circuits we used in the old days.

#### manoj soorya

##### Member
Hello Dan...

In the above programme, How to change the OFF time to 5,10,15,20 and 25? It just for a curiosity....

I try Much time, But no Idea. Think This is the part I need to Change... Is it?

Code:
movf    Seconds,W
xorlw   D'1'
skpnz
goto    LED1_off
xorlw   D'1'^D'2'
skpnz
goto    LED2_off
xorlw   D'2'^D'4'
skpnz
goto    LED3_off
xorlw   D'4'^D'6'
skpnz
goto    LED4_off
xorlw   D'6'^D'8'
skpnz
goto    LED5_off
xorlw   D'8'
sublw   D'8'
skpc
goto    WaitForButtonUp

[code end]

Regards Manoj

#### Dan Soze

##### Member
Hello Dan...

In the above programme, How to change the OFF time to 5,10,15,20 and 25? It just for a curiosity....

I try Much time, But no Idea. Think This is the part I need to Change... Is it?
Code:
    movf    Seconds,W
xorlw   D'1'
skpnz
goto    LED1_off
xorlw   D'1'^D'2'
skpnz
goto    LED2_off
xorlw   D'2'^D'4'
skpnz
goto    LED3_off
xorlw   D'4'^D'6'
skpnz
goto    LED4_off
xorlw   D'6'^D'8'
skpnz
goto    LED5_off
xorlw   D'8'
sublw   D'8'
skpc
goto    WaitForButtonUp
Regards Manoj
Just curious about how much time you spent when you "try Much time".

Two days ago you posted that you "I mean I dont know what is movwf, movlw, skpc, goto etc.....", for me it took a lot more that two days to understand what statements in assembly language do and how to use them.

I think that you may need to be more familiar with assembly language programming before you will understand the answer to your question.

My best advise is to try it and see what happens.

#### manoj soorya

##### Member
Hi Dan..
Really I tried and more time spend with MPLab.
Try mean edit the previous code that you already given.

Thank You..