Ca Lab Programs
Ca Lab Programs
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
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
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
HE BEQ Found
sub r4,r5,#0x01
B rep
L bL end
bubble sort
area sort,code,readonly
start
ldr r0,=0x40000000
ldr r1,[r0]
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
#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 );
}