mplab combined .asm with .c

Discussion about projects that used PIC Microcontroller, Hardware Interface, Programming Algorithm and etc......

mplab combined .asm with .c

Postby pingubrow2 » Fri Dec 30, 2011 12:31 am

how can I combined two project files in one , one of them is .c and the other .asm so I can have the final file works with both .asm and .c. to tell you the truth I am doing a project, temp sensor using lm35 and lcd 16*2 HD447082 . i have the temp sensor done with c and the lcd with assembly now I want to make them together so the final piece will work.

I am using hi tech for c(c18 compiler) and the microchip is pic18f4455 but that doesn't matter. I done some research on this I found something on linker but i have no idea of using this because there wasn't any instruction just some details about what is a linker anyway if someone had this problem and he/she fixed it can you help me by tell me what to do.

thx.

if you want more information tell me and I will post it .
pingubrow2
Newbie
 
Posts: 15
Joined: Sat Sep 03, 2011 4:18 am

Re: mplab combined .asm with .c

Postby ABSF » Fri Dec 30, 2011 9:14 am

Wow! if that is possible, I would implement it on my PicBasic Pro programs with the smaller programs written in asm. :mrgreen:

The simpler solution is to embed your asm program into your C18 program using the #asm/#endasm pseudo in C compiler.

Once the C program is compiled into asm/obj codes. Not sure if it is compitible with the asm program you wrote. Besides, how does the c program talk to the LCD in asm? Do they share same common global strings and variables for communication? The asm programs are normally not relocatable meaing that it would occupy a rigid program location and all the labels are related to the ORG of the program. Once it is combined with C obj codes, the jump addresses would be wrong.

I'll wait for the C experts to come in to discuss on this interestig subject. :)

Allen
The next war will determine NOT who is right BUT what is left.
User avatar
ABSF
Professional
 
Posts: 810
Joined: Wed Nov 10, 2010 9:32 am
Location: E Malaysia

Re: mplab combined .asm with .c

Postby shahrul » Fri Dec 30, 2011 9:30 am

I'm also don't know. That is possible? :D
User avatar
shahrul
Professional
 
Posts: 812
Joined: Sat May 16, 2009 9:54 pm
Location: Selangor

Re: mplab combined .asm with .c

Postby Brian Griffin » Fri Dec 30, 2011 11:32 am

ABSF WROTE:Wow! if that is possible, I would implement it on my PicBasic Pro programs with the smaller programs written in asm. :mrgreen:

The simpler solution is to embed your asm program into your C18 program using the #asm/#endasm pseudo in C compiler.

Once the C program is compiled into asm/obj codes. Not sure if it is compitible with the asm program you wrote. Besides, how does the c program talk to the LCD in asm? Do they share same common global strings and variables for communication? The asm programs are normally not relocatable meaing that it would occupy a rigid program location and all the labels are related to the ORG of the program. Once it is combined with C obj codes, the jump addresses would be wrong.

I'll wait for the C experts to come in to discuss on this interestig subject. :)

Allen


Actually I read that in PICBasic Pro, it is possible to do inline assembly - the paid versions apparently allows you to do that. (I can't verify this!)

But, be very, very careful when you have to do inline assembly - make sure the "W" (working register) in those PIC is saved and preserved before going through the low level language. (That is not just only for the inline assembler, but in interrupts, you have to save more than just "W"!)

Here's the link if you need a guide in PicBasic pro: http://melabs.com/resources/pbpmanual/8_0.htm
PIC - UIC00B from Cytron (replacement for my broken PICKit 2), Pickit 3, MikroC for PIC
dsPIC - MikroC for dsPIC, mikromedia board (dsPIC33)
AVR - AVR Dragon
Parallax - Prop tool
User avatar
Brian Griffin
Enthusiast
 
Posts: 403
Joined: Mon Jan 17, 2011 9:36 am

Re: mplab combined .asm with .c

Postby ABSF » Fri Dec 30, 2011 9:42 pm

Brian Griffin WROTE:Actually I read that in PICBasic Pro, it is possible to do inline assembly - the paid versions apparently allows you to do that. (I can't verify this!)

But, be very, very careful when you have to do inline assembly - make sure the "W" (working register) in those PIC is saved and preserved before going through the low level language. (That is not just only for the inline assembler, but in interrupts, you have to save more than just "W"!)

Here's the link if you need a guide in PicBasic pro: http://melabs.com/resources/pbpmanual/8_0.htm


Yes, the PBP does support inline asm using "@" - for single line instruction and "asm/endasm" for group of instrictions. The version that I am having can do that and I have tried it.

From what I understand what the OP wants is 2 separate programs, one written in HTC with file ext .C and one with assembler with file ext .asm to be linked by the linker to become one executable file. That's what make me think if it is possible to do.

Allen
The next war will determine NOT who is right BUT what is left.
User avatar
ABSF
Professional
 
Posts: 810
Joined: Wed Nov 10, 2010 9:32 am
Location: E Malaysia

Re: mplab combined .asm with .c

Postby Brian Griffin » Fri Dec 30, 2011 10:20 pm

ABSF WROTE:
Brian Griffin WROTE:Actually I read that in PICBasic Pro, it is possible to do inline assembly - the paid versions apparently allows you to do that. (I can't verify this!)

But, be very, very careful when you have to do inline assembly - make sure the "W" (working register) in those PIC is saved and preserved before going through the low level language. (That is not just only for the inline assembler, but in interrupts, you have to save more than just "W"!)

Here's the link if you need a guide in PicBasic pro: http://melabs.com/resources/pbpmanual/8_0.htm


Yes, the PBP does support inline asm using "@" - for single line instruction and "asm/endasm" for group of instrictions. The version that I am having can do that and I have tried it.

From what I understand what the OP wants is 2 separate programs, one written in HTC with file ext .C and one with assembler with file ext .asm to be linked by the linker to become one executable file. That's what make me think if it is possible to do.

Allen


It is actually possible - FreeRTOS has been doing that on the MPLAB IDE where there is a .S file inside the includes.

However, it isn't easy to combine the ASM and the C together during compilation.

Are these ASM and the C files working together or independently in the system? Do the functions in C file calls the assembly routines in the ASM file?
PIC - UIC00B from Cytron (replacement for my broken PICKit 2), Pickit 3, MikroC for PIC
dsPIC - MikroC for dsPIC, mikromedia board (dsPIC33)
AVR - AVR Dragon
Parallax - Prop tool
User avatar
Brian Griffin
Enthusiast
 
Posts: 403
Joined: Mon Jan 17, 2011 9:36 am

Re: mplab combined .asm with .c

Postby pingubrow2 » Sun Jan 01, 2012 8:47 pm

First of all thx for posting.
Secondly yes both of them the .asm and .c works together , I have done the lcd with assembly because I tried with the microchip xlcd.h libary and it didn't work or I was doing the program wrong but when I was doing the lcd with c language I had some problems such as some commands weren't working and so on. If it isn't possible to combined the assembly and c to have one file works can some one show me what I am doing wrong with the lcd using c.

Someone said how I did the lcd with assembly here I am posting my lcd using assembly.
On my next post I will posting the program with c and please some one tell me what I am doing wrong ty all.

HERE IS LCD PROGRAM WITH ASSEMBLY ::
CODE: SELECT_ALL_CODE
MAIN

;WAIT FOR LCD TO TURN ON COMPLETELY 15ms NEEDED TO STABILIZE
   BSF PORTE,0         ;R/S THESE TWO BITS ARE SET HIGH SO THAT THE LCD WOULD TAKE
   BSF PORTE,1         ;R/W INTO CONSIDERATION WHEN THEY ARE CLEARED
   BSF PORTE,2         ;ENABLE BIT HIGH AS WELL

   CALL DELAY         ;DELAYS TO GIVE TIME THE LCD TO INITIALIZE COMPLETELY
   CALL DELAY         ;BOTH DELAYS ARE NEEDED

;CONVERTING TO 4 BIT MODE
   BCF PORTE,0            ;R/S INPUT LOW INDICATING THAT DATA FOLLOWING IS A COMMAND
   CALL SMALL_DELAY
   BCF PORTE,1            ;R/W LOW = WRITE COMMAND TO MODULE
   ;CALL SMALL_DELAY      ; WAIT FOR SIGNAL TO STABILIZE
   NOP
   NOP
   MOVLW B'00100000'      ;SETTING THE LCD INTO 4 BIT MODE USING BY CLEARING BIT4
   MOVWF PORTD            
   NOP                  ;*******************************************************************
   NOP                  ;* FIRST WE HAVE TO CONFIGURE THE LCD TO ACCEPT 4 BIT DATA TRANSFER*
   CALL CLOCK            ;*******************************************************************
   NOP
   NOP
   CALL DELAY


;FUNCTION SET           THIS HAS TO BE RE-SENT AGAIN AS FIRST WE NEED TO PUT THE LCD IN 4 BIT MODE
   MOVLW B'00100000'      
   MOVWF PORTD       ;4 BIT INTERFACE, 2 LINE MODE, 5*7 FORMAT
   NOP
   CALL CLOCK
   NOP
   MOVLW B'10000000'   
   MOVWF PORTD
   NOP
   CALL CLOCK
   NOP   
   NOP
   CALL DELAY

;CLEAR DISPLAY

   BCF PORTE,0            ;R/S INPUT LOW INDICATING THAT DATA FOLLOWING IS A COMMAND
   CALL SMALL_DELAY
   BCF PORTE,1            ;R/W LOW = WRITE COMMAND TO MODULE
   CALL SMALL_DELAY      ; WAIT FOR SIGNAL TO STABILIZE
      
   MOVLW B'00000000'      ;01H IS THE COMMAND TO CLEAR THE LCD
   MOVWF PORTD         
   NOP            
   NOP               
                  
   CALL CLOCK         ;ENABLE COMMAND TO ENTER LCD

   MOVLW B'00010000'   
   MOVWF PORTD      
   NOP            
   NOP               
                  
   CALL CLOCK         ;ENABLE COMMAND TO ENTER LCD
   
;DISPLAY ON, CURSOR BLINKING, CURSOR UNDERLINE ON

   BCF PORTE,0            ;R/S INPUT LOW INDICATING THAT DATA FOLLOWING IS A COMMAND
   CALL SMALL_DELAY
   BCF PORTE,1            ;R/W LOW = WRITE COMMAND TO MODULE
   CALL SMALL_DELAY      ; WAIT FOR SIGNAL TO STABILIZE
      
   MOVLW B'00000000'      ;0CH
   MOVWF PORTD      
   NOP            
   NOP            
               
   CALL CLOCK         ;ENABLE COMMAND TO ENTER LCD

   MOVLW B'11000000'      ;D3 = 1 (DEFAULT)
   MOVWF PORTD            ;D2 = DISPLAY ON
   NOP                  ;D1 = CURSOR UNDERLINE OFF
   NOP                  ;D0 = BLINKING OFF
                  
   CALL CLOCK         ;ENABLE COMMAND TO ENTER LCD

;REMARK: EVEN THOUGH WE ARE TRANSFERRING DATA IN 4 BITS MODE, WE STILL NEED TO
;WRITE IN 8 BITS MODE THE ONLY DIFFERENCE IS THAT WE HAVE TO PUT THE NIBBLE THAT WE WANT TO
;TRANSFER IN THE MOST SIGNIFICANT BYTE.


; DETERMINING THE LOCATION OF THE WORD
   BCF PORTE,0            ;R/S INPUT LOW INDICATING THAT DATA FOLLOWING IS A COMMAND
   CALL SMALL_DELAY
   BCF PORTE,1            ;R/W LOW = WRITE COMMAND TO MODULE
   ;CALL SMALL_DELAY      ; WAIT FOR SIGNAL TO STABILIZE
   NOP
   NOP   
   MOVLW B'10000000'   ;SET ADDRESS COMMAND STARTING WITH 1 THEN ENTER THE ADDRESS(B'1AAAAAAA')   
   MOVWF PORTD         
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE COMMAND TO ENTER LCD

   MOVLW B'00000000'   ;SET ADDRESS COMMAND STARTING WITH 1 THEN ENTER THE ADDRESS(B'1AAAAAAA')   
   MOVWF PORTD         ;THIS IS ADDRESS 00H HOWEVER THE MSB MUST BE EQUAL TO 1 TO INDICATE THAT
   NOP               ;THIS DATA IS AN ADDRESS
   NOP               
   CALL CLOCK         ;ENABLE COMMAND TO ENTER LCD


;CHARACTER ENTRY

   BSF PORTE,0         ;R/S LINE IN DATA TRANSFER MODE
   NOP
   NOP
   BCF PORTE,1         ;R/W LINE ON WRITE MODE
   CALL SMALL_DELAY
   NOP
   NOP

   MOVLW 'T';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'H';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'E';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW ' ';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   
   MOVLW 'T';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'E';
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP
   NOP
   CALL CLOCK

   MOVLW 'M';
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP
   NOP
   CALL CLOCK

   MOVLW 'P';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'E';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'R';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'A';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'T';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'U';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'R';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'E';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW ' ';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'I';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'S';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK


   MOVLW ':';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW ' ';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   ;==============

   MOVLW
   MOVWF TEMPRY
   MOVWF TEMPRY,PORTD
   NOP
   NOP
   CALL CLOCK
   NOP
   NOP
   SWAPF TEMPRY
   SWAPF TEMPRY,PORTD
   NOP
   NOP
   CALL CLOCK

   MOVLW B'11011111';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   MOVLW 'C';         ;SEND UPPER NIBBLE FIRST
   MOVWF TEMPRY
   MOVFF TEMPRY,PORTD
   NOP               
   NOP               
   CALL CLOCK         ;ENABLE DATA TO ENTER LCD

   NOP
   NOP
   SWAPF TEMPRY      ;HERE WE HAVE TO CHANGE THE LOWER NIBBLE
   MOVFF TEMPRY,PORTD  ;WITH THE UPPER NIBBLE AND THEN SEND THE NIBBLE
   NOP
   NOP
   CALL CLOCK

   GOTO SEND      ;THIS WILL END THE PROGRAM

CLOCK
   BSF PORTE,2         ; ENABLE LCD
   CALL SMALL_DELAY
   BCF PORTE,2         ;DISABLES LCD
   CALL SMALL_DELAY
   RETURN

DELAY
      MOVLW .2
      MOVWF COUNT1
      CLRF COUNT2
LINE2   CLRF COUNT3

LINE1   DECFSZ COUNT3,F
      GOTO LINE1
      DECFSZ COUNT2,F
      GOTO LINE2
      DECFSZ COUNT1,F
      GOTO LINE2
      RETURN

SMALL_DELAY
   MOVLW .10
   MOVWF TIMER2
LABEL2
   CLRF TIMER1
LABEL1
   DECFSZ TIMER1
   GOTO LABEL1
   DECFSZ TIMER2
   GOTO LABEL2
   RETURN

SEND

GOTO $      ; THIS WILL STOP THE MICRO FROM STARTING TO EXECUTRE THE PROGRAME AGAIN EVEN AFTER
         ; SENDING IT TO THE END DIRECTIVE

END
pingubrow2
Newbie
 
Posts: 15
Joined: Sat Sep 03, 2011 4:18 am

Re: mplab combined .asm with .c

Postby Brian Griffin » Mon Jan 02, 2012 12:50 pm

Is there a reason why you have to write the LCD routines in ASM? The 44780 LCD routine isn't that fast or time-critical and you can safely do it using C, especially in PIC18F microcontrollers.

It would be simpler if you write both of these routines in C altogether.
PIC - UIC00B from Cytron (replacement for my broken PICKit 2), Pickit 3, MikroC for PIC
dsPIC - MikroC for dsPIC, mikromedia board (dsPIC33)
AVR - AVR Dragon
Parallax - Prop tool
User avatar
Brian Griffin
Enthusiast
 
Posts: 403
Joined: Mon Jan 17, 2011 9:36 am

Re: mplab combined .asm with .c

Postby pingubrow2 » Tue Jan 03, 2012 12:01 am

@ Brian Griffin
so first I tried to do the lcd with c but I had some problems with the xlcd , can you help me please anyway then I went on asm because I have some experience on assembly. I will post you my program to see it ( the lcd with c language ).
pingubrow2
Newbie
 
Posts: 15
Joined: Sat Sep 03, 2011 4:18 am

Re: mplab combined .asm with .c

Postby Brian Griffin » Tue Jan 03, 2012 12:11 am

pingubrow2 WROTE:@ Brian Griffin
so first I tried to do the lcd with c but I had some problems with the xlcd , can you help me please anyway then I went on asm because I have some experience on assembly. I will post you my program to see it ( the lcd with c language ).


Pardon my ignorance but what's the Xlcd? Is it a specialized HD44780 serial LCD?

The LCD routines for C language is very straightforward. You can post it here.

Ah, and be sure to
CODE: SELECT_ALL_CODE
 [code]place your code between these tags.[/code]
PIC - UIC00B from Cytron (replacement for my broken PICKit 2), Pickit 3, MikroC for PIC
dsPIC - MikroC for dsPIC, mikromedia board (dsPIC33)
AVR - AVR Dragon
Parallax - Prop tool
User avatar
Brian Griffin
Enthusiast
 
Posts: 403
Joined: Mon Jan 17, 2011 9:36 am

Next

Return to PIC Microcontroller

Who is online

Users browsing this forum: No registered users and 5 guests

cron