| | |
Please help with the assembly code
![]() |
•
•
Join Date: Oct 2005
Posts: 11
Reputation:
Solved Threads: 0
Hey,
I am willing to use the following code in one phase of my project. The problem is that i dont understand this assembly language, In school I took it in different form...
Mov ax, bx
out 11, AL bla bla...
here the registers is different and everything is different....
All I need is to know what are the input and output pins...
say port A0-A3 INPUT
PORT B0-B7 OUTPUT
bc i really dont know the input and output ports in the code...
the code is to be used on pic16f628 here is the microcontroller datasheet in case u need it
http://ww1.microchip.com/downloads/e...Doc/40300C.pdf
and here is the code:
thnx a lot in advance
I am willing to use the following code in one phase of my project. The problem is that i dont understand this assembly language, In school I took it in different form...
Mov ax, bx
out 11, AL bla bla...
here the registers is different and everything is different....
All I need is to know what are the input and output pins...
say port A0-A3 INPUT
PORT B0-B7 OUTPUT
bc i really dont know the input and output ports in the code...
the code is to be used on pic16f628 here is the microcontroller datasheet in case u need it
http://ww1.microchip.com/downloads/e...Doc/40300C.pdf
and here is the code:
Assembly Syntax (Toggle Plain Text)
;Tutorial 7_5 ;Serial routines - display received bytes on LED's ;Nigel Goodwin 2003 LIST p=16F628 ;tell assembler what chip we are using include "P16F628.inc" ;include the defaults for the chip ERRORLEVEL 0, -302 ;suppress bank selection messages ;sets the configuration settings (oscillator type etc.) cblock 0x20 ;start of general purpose registers count ;used in looping routines count1 ;used in delay routine counta ;used in delay routine countb ;used in delay routine Xmit_Byte ;holds byte to xmit Rcv_Byte ;holds received byte Bit_Cntr ;bit counter for RS232 Delay_Count ;delay loop counter endc SER_PORT Equ PORTA SER_TRIS Equ TRISA SER_IN Equ 0x07 SER_OUT Equ 0x06 LED_PORT Equ PORTB LED_TRIS Equ TRISB org 0x0000 Start movlw 0x07 movwf CMCON ;turn comparators off (make it like a 16F84) Initialise clrf count clrf PORTA clrf PORTB BSF STATUS, RP0 ;select bank 1 clrf LED_TRIS ;make LED_Port all outputs BCF STATUS, RP0 ;select bank 0 call SER_INIT ;initialise serial port Loop call Rcv_RS232 movwf LED_PORT ;transfer byte to LED's call XMIT_RS232 ;echo character back goto Loop ;Serial routines SER_INIT BSF STATUS, RP0 ;select bank 1 BCF SER_TRIS, SER_OUT ;set B6 as an output BSF SER_TRIS, SER_IN ;set B7 as an input BCF STATUS, RP0 ;select bank 0 BSF SER_PORT, SER_OUT ;set SER_OUT high RETURN XMIT_RS232 MOVWF Xmit_Byte ;move W to Xmit_Byte MOVLW 0x08 ;set 8 bits out MOVWF Bit_Cntr BCF SER_PORT, SER_OUT CALL Bit_Delay Ser_Loop RRF Xmit_Byte , f ;send one bit BTFSS STATUS , C BCF SER_PORT, SER_OUT BTFSC STATUS , C BSF SER_PORT, SER_OUT CALL Bit_Delay DECFSZ Bit_Cntr , f ;test if all done GOTO Ser_Loop BSF SER_PORT, SER_OUT CALL Bit_Delay RETURN Rcv_RS232 BTFSC SER_PORT, SER_IN ;wait for start bit GOTO Rcv_RS232 CALL Start_Delay ;do half bit time delay BTFSC SER_PORT, SER_IN ;check still in start bit GOTO Rcv_RS232 MOVLW 0x08 ;set up to read 8 bits MOVWF Bit_Cntr CLRF Rcv_Byte Next_RcvBit CALL Bit_Delay BTFSS SER_PORT, SER_IN BCF STATUS , C BTFSC SER_PORT, SER_IN BSF STATUS , C RRF Rcv_Byte , f DECFSZ Bit_Cntr , f ;test if all done GOTO Next_RcvBit CALL Bit_Delay MOVF Rcv_Byte, W RETURN Start_Delay MOVLW 0x0C MOVWF Delay_Count Start_Wait NOP DECFSZ Delay_Count , f GOTO Start_Wait RETURN Bit_Delay MOVLW 0x18 MOVWF Delay_Count Bit_Wait NOP DECFSZ Delay_Count , f GOTO Bit_Wait RETURN ;Delay routines Long_Delay call Delay255 call Delay255 call Delay255 call Delay255 return Delay255 movlw 0xff ;delay 255 mS goto d0 Delay100 movlw d'100' ;delay 100mS goto d0 Delay50 movlw d'50' ;delay 50mS goto d0 Delay20 movlw d'20' ;delay 20mS goto d0 Delay10 movlw d'10' ;delay 10mS goto d0 Delay1 movlw d'1' ;delay 1mS goto d0 Delay5 movlw 0x05 ;delay 5.000 ms (4 MHz clock) d0 movwf count1 d1 movlw 0xC7 movwf counta movlw 0x01 movwf countb Delay_0 decfsz counta, f goto $+2 decfsz countb, f goto Delay_0 decfsz count1 ,f goto d1 retlw 0x00 ;end of Delay routines end
thnx a lot in advance
Hi,
I suggest you to download the main PIC 16F84A manual. (or the one related to your PIC) There you will see a list of registers and opcodes. Actually for PIC registers is like memory (there are a lot of theme) and the only register is working register which is W. For example you can't move a value to a register directly you have to load it to working register first : movlw .01010101; movwf TRISA
The TRIS_ registers adjust wether the pins of the related port (TRISA -> PORTA) are to be used for input or output. (not both are possible for all port/pins) There also are two memory (register) banks you have to set
BSF STATUS, RP0 ; bit set status register bit RP0 to select bank 1
clrf TRISA ;make PORTA all pins outputs
BCF STATUS, RP0 ;select back bank 0
PORTA,PORTB,... are on bank 0 and TRISA, TRISB, ... are on bank 1 (check register map on the reference)
clrf PORTA; clear all bits/pins of PORTA
Those are the basics, post if you need any more knowledge.
Loren Soth
I suggest you to download the main PIC 16F84A manual. (or the one related to your PIC) There you will see a list of registers and opcodes. Actually for PIC registers is like memory (there are a lot of theme) and the only register is working register which is W. For example you can't move a value to a register directly you have to load it to working register first : movlw .01010101; movwf TRISA
The TRIS_ registers adjust wether the pins of the related port (TRISA -> PORTA) are to be used for input or output. (not both are possible for all port/pins) There also are two memory (register) banks you have to set
BSF STATUS, RP0 ; bit set status register bit RP0 to select bank 1
clrf TRISA ;make PORTA all pins outputs
BCF STATUS, RP0 ;select back bank 0
PORTA,PORTB,... are on bank 0 and TRISA, TRISB, ... are on bank 1 (check register map on the reference)
clrf PORTA; clear all bits/pins of PORTA
Those are the basics, post if you need any more knowledge.
Loren Soth
Best regards,
Loren Soth
Crimson K. Software _________________________________________________________________ Crimson K. Blog
Loren Soth
Crimson K. Software _________________________________________________________________ Crimson K. Blog
![]() |
Similar Threads
- assembly code alteration for real time clock controller (Assembly)
- Reverse String - Assembly Language (Assembly)
- What resulit of this code?! (Assembly)
- Question: Where are good Assembly Compilers? (Assembly)
- Please AnyBody Can Help Me To Build Assembly Code Infix To Postfix It So Hard T_T (Assembly)
- Free Win32 Assembly Source Codes (Assembly)
- Introduction to 80 x 86 Assembly Language and Computer Architecture - no CD - help (Assembly)
- My Sample ASM Code (Assembly)
- Using x86 Assembly Language with Microsoft Visual C++ (C++)
Other Threads in the Assembly Forum
- Previous Thread: Segmentation fault || Istruction OUT
- Next Thread: OOPic Microcontroller - Assembly Language Programming
| Thread Tools | Search this Thread |





