Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Assembly Language Programming (ALP) Forum (http://www.go4expert.com/forums/assembly-language-programming-forum/)
-   -   Help with commenting on my code (http://www.go4expert.com/forums/help-commenting-code-t28296/)

Darkstar3000 28Apr2012 23:31

Help with commenting on my code
 
1 Attachment(s)
So I have this question

Write an assembly language program for PIC 16F684 to switch ON LEDs to count in binary from 0 to 7. Allow a delay of about 1second between the change.Write the program, verify its operation by executing it

I wrote the program but I'm not sure if it does the job correctly since I'm not really comfortable with assembly language so can anyone take a look at it and tell me if it's doing what the question specifies and if my comments are correct. I can't test it out as I'm currently on vacation so I just need a verification of my work.

I'm using MPLAB V8.84
Here's a link to the asm

Code:

; WRITTEN BY           
; DATE                  28/04/12
; FILE SAVED AS        BinaryCounter.asm
; DEVICE                PIC16F684
; FUNCTION                                PROGRAM COUNTS FROM 0 TO 7 IN BINARY
; -----------------------  EQUATES    ------------------------------------
PORTA  EQU    05h    ;LABELS THE PORTA REGISTER AS "PORTA"
;DELAY COUNTERS
COUNT1 EQU 20h;
COUNT2 EQU 21h

;------------------------ CONSTANTS -----------------------------------------
;IDENTIFIES CONSTANTS FOR REQUIRED LEDS
;I/O for LEDS
#define TRIS_D0_D1        B'00001111'        ; TRISIO SETTING FOR D0 AND D1
#define TRIS_D2_D3        B'00101011'        ; TRISIO SETTING FOR D2 AND D3

; the LEDS
#define D0        B'00010000'                ; D0 LED
#define D1        B'00100000'                ; D1 LED
#define D2        B'00010000'                ; D2 LED
#define D3        B'00000100'                ; D3 LED

; ----------------------- MAIN PROGRAM ------------------------------------
START  ORG    0X00    ;'ORG' SPECIFIES THE MEMORY LOCATION OF THE PROGRAM

; LED 0 ON
LOOP0
        MOVLW  TRIS_D0_D1;                ;PUT 00001111 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                        ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D0                      ;PUT 00010000 INTO W
        MOVWF  PORTA                  ;MOVE W ONTO PORTA
               
                ;Delay:
                decfsz    COUNT1,1      ;DECREASE THE VALUE OF COUNT1 BY 1
                                                                ;AND SKIP NEXT LINE IF RESULT IS ZERO
        goto      LOOP0          ;IF COUNT1 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP0       
        decfsz    COUNT2,1      ;DECRESE THE VALUE OF COUNT2 BY 1
                                                                ;AND SKIP NEXT LINE IF RESULT IT ZERO       
        goto      LOOP0          ;IF COUNT2 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP0


; LED 1 ON
LOOP1
        CLRF    PORTA;                        ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D0_D1;    ;PUT 00001111 INTO W       
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D1                          ;PUT 00100000 INTO W
        MOVWF  PORTA                          ;MOVE W ONTO PORTA
               
                ;Delay:
                decfsz    COUNT1,1      ;DECREASE THE VALUE OF COUNT1 BY 1
                                                                ;AND SKIP THE NEXT LINE IF RESULT IS ZERO
        goto      LOOP1        ;IF COUNT1 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP1
        decfsz    COUNT2,1      ;DECREASE THE VALUE OF COUNT2 BY 1
        goto      LOOP1        ;GO TO LOOP1

; LED 1 & 2 ON
LOOP2
        ;1
        CLRF    PORTA;                    ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D0_D1                ;PUT 00001111 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D1                          ;PUT 00100000 INTO W       
        MOVWF  PORTA                          ;MOVE W ONTO PORTA
               
                ;2
                CLRF    PORTA                    ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D2_D3                ;PUT 00101011 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D2                          ;PUT 00010000 INTO W
        MOVWF  PORTA                          ;MOVE W ONTO PORTA
               
                ;Delay:
                decfsz    COUNT1,1                ;DECREASE THE VALUE OF COUNT1 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO
        goto      LOOP2        ;IF COUNT IS ZERO,CARRY ON OTHERWISE
                                                                ;GO TO LOOP 2
        decfsz    COUNT2,1      ;DECRESE THE VALUE OF COUNT2 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO       
        goto      LOOP2        ;IF COUNT2 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP2
; LED 3 ON
LOOP3

        CLRF    PORTA                    ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D2_D3;                ;PUT 00101011 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D3                          ;PUT 00000100 INTO W
        MOVWF  PORTA                          ;MOVE W ONTO PORTA
               
                ;Delay:
                decfsz    COUNT1,1      ;DECREASE THE VALUE OF COUNT1 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO       
        goto      LOOP3          ;IF COUNT1 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP3
        decfsz    COUNT2,1      ;DECREASE THE VALUE OF COUNT2 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO
        goto      LOOP3                ;IF COUNT2 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP3
               
; LED 3 & 1 ON
LOOP4

        CLRF    PORTA                    ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D2_D3;                ;PUT 00101011 INTO W               
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D3                          ;PUT 00000100 INTO W
        MOVWF  PORTA                        ;MOVE W TO PORTA
               
                CLRF    PORTA                                ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D0_D1                ;PUT 00001111 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D1                          ;PUT 00010000 INTO W
        MOVWF  PORTA                        ;MOVE W ONTO PORTA
               
                ;Delay:
                decfsz    COUNT1,1      ;DECREASE THE VALUE OF COUNT1 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO       
        goto      LOOP4        ;IF COUNT1 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP4
        decfsz    COUNT2,1      ;DECREASE THE VALUE OF COUNT2 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO
        goto      LOOP4        ;IF COUNT1 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP4

; LED 3 & 2 ON               
LOOP5
        CLRF    PORTA                        ;CLEAR THE CONTENTS OF PORTA                               
                MOVLW  TRIS_D2_D3                ;PUT 00101011 INTO W       
        TRIS    PORTA                  ;       
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D3                          ;PUT 00000100 INTO W
        MOVWF  PORTA                        ;MOVE W TO PORTA
               
                CLRF    PORTA                        ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D2_D3;                ;PUT 00101011 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D2                          ;00010000
        MOVWF  PORTA                        ;MOVE W TO PORTA
               
                ;Delay:
                decfsz    COUNT1,1      ;DECREASE THE VALUE OF COUNT1 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO
        goto      LOOP5        ;IF COUNT1 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP5
        decfsz    COUNT2,1      ;DECREASE THE VALUE OF COUNT2 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO       
        goto      LOOP5                ;IF COUNT2 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP5

; LED 3 & 2 & 1
LOOP6
   
            CLRF    PORTA                        ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D2_D3                ;PUT 00101011 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D3                          ;PUT 00000100 INTO W
        MOVWF  PORTA                        ;MOVE W TO PORTA
               
                CLRF    PORTA                        ;CLEAR THE CONTENTS OF PORTA
                MOVLW  TRIS_D2_D3                ;PUT 00101011 INTO W
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR THE CONTENTS OF PORTA
        MOVLW  D2                          ;PUT 00010000 INTO W
        MOVWF  PORTA                        ;MOVE W TO PORTA
               
                CLRF    PORTA                        ;CLEAR CONTENTS OF PORTA       
                MOVLW  TRIS_D0_D1                ;PUT 00001111 INTO W       
        TRIS    PORTA                  ;
        CLRF    PORTA                  ;CLEAR CONTENTS OF PORTA
        MOVLW  D1                          ;PUT 00010000 INTO W
        MOVWF  PORTA                        ;MOVE W TO PORTA
               
                ;Delay:
                decfsz    COUNT1,1      ;DECREASE THE VALUE OF COUNT1 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO
        goto      LOOP6        ;IF COUNT1 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP6
        decfsz    COUNT2,1      ;DECREASE THE VALUE OF COUNT2 BY 1
                                                                ;AND SKIP THE NEXT LINE IF THE RESULT IS ZERO       
        goto      LOOP6        ;IF COUNT2 IS ZERO, CARRY ON OTHERWISE
                                                                ;GO TO LOOP6

               

        END

If the code is messy I've attached a zip file with the asm

xpi0t0s 29Apr2012 00:31

Re: Help with commenting on my code
 
Strange request. The assignment says "verify its operation by executing it" - so why don't you do that?

"I wrote the program" Are you sure about that? It seems quite advanced code for someone who is "not comfortable with assembly language" and thinks "execute it" means "post it on a forum for people to comment on".

Methinks the task is actually to modify the given program so that it works as described. Correct?

Darkstar3000 29Apr2012 04:30

Re: Help with commenting on my code
 
Quote:

Originally Posted by xpi0t0s (Post 94606)
Strange request. The assignment says "verify its operation by executing it" - so why don't you do that?

"I wrote the program" Are you sure about that? It seems quite advanced code for someone who is "not comfortable with assembly language" and thinks "execute it" means "post it on a forum for people to comment on".

Methinks the task is actually to modify the given program so that it works as described. Correct?


Well I don't have a PIC so I can't check if it works correctly. Also I put it together based on the samples we were given throughout the weeks, most of it is just leeched from these examples and I don't really have an idea on what's going on.


All times are GMT +5.5. The time now is 04:27.