0% found this document useful (0 votes)
20 views

Ca Lab Programs

The documents cover code examples for various microcontroller operations including block transfer, binary search, bubble sort, factorial, Fibonacci, GPIO, timers, UART, ADC, interrupts and stepper motor control. The code examples demonstrate how to implement these operations using ARM assembly language and C on an LPC2148 microcontroller.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Ca Lab Programs

The documents cover code examples for various microcontroller operations including block transfer, binary search, bubble sort, factorial, Fibonacci, GPIO, timers, UART, ADC, interrupts and stepper motor control. The code examples demonstrate how to implement these operations using ARM assembly language and C on an LPC2148 microcontroller.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Block transfer

AREA sam,CODE,READONLY
start
LDR r0,=0x40000000 ;Source Bock
LDR r1,=0X40000050 ;Destination Block
LDR r2,[r0],#0x4 ; No of elements
L ldr r3,[r0],#0x4 ; Load the element
str r3,[r1],#0x4 ; Store the element
subs r2,r2,#01 ; decrement the counter
BNE L ;Branch to L if r2 not equal to zero
l B l
end

Block transfer with overlap

AREA sam,CODE,READONLY
start
LDR r0,=0x40000000 ;Source Bock
LDR r2,[r0],#0x4 ; No of elements
add r3,r0,r2, LSL #2 ; Move the pointer to the last
location + 1
L ldr r4,[r3,#-0x4] ; Load the last element in the block
str r4,[r3],#-0x4 ; Store the element to the location
next to the laast element
subs r2,r2,#01 ; decrement the counter
BNE L ;Branch to L if r2 not equal to zero
l B l
end

code for expression solving

AREA add1,CODE,READONLY
;ax2+bx+c
start
LDR r0,=0x40000000
LDM r0,{r1-r4} ; r1=x r2=a r3=b r4=c
mul r5,r1,r1 ;x2
mul r2,r5,r2 ;ax2 note that src(r2) and result(r2) register can
be same but the second and result operand should not be same
mul r1,r3,r1 ;bx
add r1,r1,r2 ;ax2+bx
add r1,r1,r4
str r1,[r0,#0x10]
l b l
end

AREA add1,CODE,READONLY
;b2-4ac
start
LDR r0,=0x40000000
LDM r0,{r1-r3} ; r1=a r2=b r3=c
mul r4,r2,r2 ; b2
LSL r1,#2 ;4a
mul r1,r3,r1 ;4ac
sub r1,r4,r1 ;b2-4ac
str r1,[r0,#0x0c]
l b l
end

Binary Search

Binary Search Byte Operation

AREA add1, CODE, READONLY


ENTRY
LDR r0,=0x40000000
mov r13, #0x00
LDRB r1,[r0]
LDRB r2,[r0,#0x01]!
mov r3, #0x00
mov r4,r1

rep cmp r3,r4


BGT exit
add r5,r3,r4
LSR r5,#0x01
LDRB r7,[r0,r5]
cmp r7,r2
BGE HE
add r3,r5,#0x01
B rep

HE BEQ Found
sub r4,r5,#0x01
B rep

Found mov r13, #0x11


exit

L bL end

bubble sort

area sort,code,readonly
start
ldr r0,=0x40000000
ldr r1,[r0]

outer mov r2,r1


ldr r0,=0x40000004

inner ldr r4,[r0]


ldr r5,[r0,#04]
cmp r4,r5
BLE continue
str r4,[r0]
str r5,[r0,#-0x04]

continue subs r2,r2,#1


bne inner
subs r1,r1,#1
bne outer
l bl
end

FACTORIAL

AREA factorial,CODE,READONLY
MOV r5,#0X40000000
LDR r5, [r5] ;input argument n
BL lpush
l B l
lpush
SUB sp, sp, #8 ; adjust stack for 2 items
STR lr, [sp, #4] ; save the return address
STR r5, [sp, #0] ; save the argument n
CMP r5, #1 ; Compare n with 1
BGT L1 ; if n > = 1 go to L1
b lpop
L1 SUB r5, #1 ; n argument gets n-1
BL lpush ; call fact with n-1
lpop
MOV r12, r5 ; save the return value
LDR r5, [sp, #0] ;restore argument n
LDR lr, [sp, #4] ;restore the return address
ADD sp, sp, #8 ;adjust stack pointer to pop 2 items
MUL r5, r12, r5 ;return n * fact(n-1)
MOV pc, lr ;return to the caller
END

FIBANACCI

AREA EXP-1, CODE, READONLY


START
LDR r0,=0X40000000
LDR r1,[r0]
LDR r2,=0X4000000C
LDR r3,[r2]
SUB r1,r1,#2
LOOP LDR r4,[r2,#-4]
LDR r5,[r2,#-8]
ADD r3,r4,r5
STR r6,[r2]
ADD r2,r2,#4
SUBS r1,r1,#1
BNE LOOP
L B L
END
GPIO LED

#include<LPC21xx.h>
void delay();
int main()
{
PINSEL0=0X0000000;
IO0DIR=0X0000000;
while(1)
{
IO0SET=0XFFFFFFFF;
delay();
IO0CLR=0XFFFFFFFF;
delay();
}
return 0;
}
void delay()
{
int i,j;
for(i=0;i<500;i )
for(j=0;j<500;j );
}

GPIO SWITCH

#include<LPC21xx.h>
void delay();
int main()
{
PINSEL0=0X00000000;
PINSEL2=0X00000000;
IODIR0=0X00000000;
IODIR1=0X00FF0000;
while(1)
{
if(IOPIN0 & 0X00008000)
{
IOSET1=0X00550000;
delay();
IOCLR1=0X00550000;
delay();
}
else
{
IOSET1=0X00AA0000;
delay();
IOCLR1=0X00AA0000;
delay();
}
}
}
void delay()
{
int i,j;
for(i=0;i<1000;i )
for(j=0;j<1000;j );
}
TIMER

#include<lpc214x.h>
void pll()
{
PLL0CFG=0X24;
PLL0CON=0X01;
PLL0FEED=0Xaa;
PLL0FEED=0X55;
while(!(PLL0STAT &(1 10)));
PLL0CON=0X03;
PLL0FEED=0Xaa;
PLL0FEED=0X55;
VPBDIV=0X01;
}
void delay(unsigned int z)
{
T0CTCR=0X0;
T0TCR=0X00;
T0PR=59999;
T0TCR=0X01;
while(T0TC<z);
T0TCR=0X00;
T0TC=0X0;
}
int main()
{
PINSEL1=0X00000000;
IODIR0=0X00FF0000;
IOCLR0=0X00FF0000;
pll();
while(1)
{
IOSET0=0X00FF0000;
delay(500);
IOCLR0=0X00FF0000;
delay(500);
}
}

UART
#include<LPC214X.h>
void pll()
{
PLL0CFG=0X24;
PLL0CON=0X01;
PLL0FEED=0XAA;
PLL0FEED=0X55;
while(!(PLL0STAT&(1 10)));
PLL0CON=0X03;
PLL0FEED=0XAA;
PLL0FEED=0X55;
VPBDIV=0X01;
}
void uart()
{
PINSEL0=0X5;
U0LCR=0X83;
U0DLM=0X1;
U0DLL=0X87;
U0LCR=0X03;
}
char rx()
{
unsigned char c;
while((U0LSR &(1 0)) 0);
c=U0RBR;
return c;
}
void tx(unsigned char c)
{
while((U0LSR &(1 8)) 0);
U0THR=c;
}
int main()
{
unsigned char c;
pll();
uart();
while(1)
{
c=rx();
tx(0);
}
}
ADC

#include<lpc214x.h>
int main(void)
{
unsigned int val;
PINSEL1=0X01000000;
SCS=0X03;
FIO1MASK=0XFF00FFFF;
FIO1DIR=0X00FF0000;
FIO1PIN=0X00000000;
AD0CR=0X00200E02;
while(1)
{
AD0CR |=0x01000000;
do{
val=AD0DR1;
}
while((val&0x80000000) 0);
FIO1PIN=(val 8);
}
return 0;
}

HARDWARE INTERRUPT

#include<LPC214X.h>
void delay(void);
void ext();
irq void Ext(void);
int main(void)
{
IO0DIR=0X00000000;
IO1DIR=0X00FF0000;
ext();
while(1)
{
IO1SET=0X00FF0000;
delay();
IO1CLR=0X00FF0000;
delay();
}
}
void ext()
{
EXTMODE=0X02;
EXTPOLAR &=~(0X02);
PINSEL0=0X20000000;
VICIntSelect &=~(1 !5);
VICVectAddr5=(unsigned int)Ext;
VICVectCntl5=(1 5)| 15;
VICIntEnable=(1 15);
}
irq void Ext(void)
{
IO1SET=0X00550000;
delay();
IO1CLR=0X00550000;
EXTINT |=0X02;
VICVectAddr=0;
}
void delay()
{
int i,j;
for(i=0;i<1000;i )
{
for(j=0;j<1000;j )
{
}
}
}

STEPPER MOTOR

#include<lpc214x.h>
unsigned long i;
void delay(unsigned int);
int main()
{
int a=200;
IO1DIR=0X00FF0000;
i=0X00100000;
while(a)
{
IO1SET=i;
delay(10000);
IO1CLR=0X00FF0000;
i=i 1;
if(i 0x00000000)
{
i=0x00100000;
}
a=a-1;
}
}
void delay(unsigned int count)
{
unsigned int i,j=0;
for(i=0;i count;i )
for(j=0;j 89;j );
}

#include<lpc214x.h>
unsigned long i;
void delay(unsigned int);
int main()
{
int a=50;
IO1DIR=0X00FF0000;
i=0X00100000;
while(a)
{
IO1SET=i;
delay(10000);
IO1CLR=0X00FF0000;
i=i 1;
if(i 0x00000000)
{
i=0x00100000;
}
a=a-1;
}
}
void delay(unsigned int count)
{
unsigned int i,j=0;
for(i=0;i count;i )
for(j=0;j 80;j );
}

You might also like