18CSL48 Merged
18CSL48 Merged
LABORATORY MANUAL OF
PREPARED BY
Mr. ABHISHEK N B.E., M.Tech.,
ASSISTANCE PROFESSOR
DEPARTMENT OF ELECTRONICS AND COMMUNICATION ENGINEERING
JNANAVIKAS INSTITUTE OF TECHNOLOGY
MICROCONTROLLER AND EMBEDDED SYSTEMS LABORATORY
(Effective from the academic year 2021 -2022)
SEMESTER – IV
Course Code: 18CSL48 CIE Marks: 40 Number of Contact Hours/Week: 0:2:2 SEE Marks: 60
Total Number of Lab Contact Hours: 36 Exam Hours: 03 Credits – 2
Course Learning Objectives: This course (18CSL48) will enable students to:
• Develop and test Program using ARM7TDMI/LPC2148
• Conduct the experiments on an ARM7TDMI/LPC2148 evaluation board using evaluation version of
Embedded 'C' & Keil Uvision-4 tool/compiler.
Programs List:
PART A
4. Write a program to add an array of 16 bit numbers and store the 32 bit result in internal RAM
5. Write a program to find the square of a number (1 to 10) using look-up table.
8. Write a program to count the number of ones and zeros in two consecutive memory locations.
PART –B
11. Interface a Stepper motor and rotate it in clockwise and anti-clockwise direction.
12. Determine Digital output for a given Analog input using Internal ADC of ARM controller.
14. Interface a 4x4 keyboard and display the key code on an LCD.
16. Display the Hex digits 0 to F on a 7-segment LED interface, with an appropriate delay in between.
TABLE OF CONTENTS
1 Introduction 1-5
5 Write a program to add an array of 16 bit numbers and store the 32 bit 10-11
result in internal RAM
9 Write a program to count the number of ones and zeros in two 20-21
consecutive memory locations.
14 Determine Digital output for a given Analog input using Internal ADC of 30-33
ARM controller.
16 Interface a 4x4 keyboard and display the key code on an LCD. 36-41
INTRODUCTION
An embedded system is an electronic/electro-mechanical system designed to perform a specific
function and is a combination of both hardware and firmware (software). An embedded system
combines mechanical, electrical, and chemical components along with a computer, hidden inside, to
perform a single dedicated purpose.
There are more computers on this planet than there are people, and most of these computers are
single-chip microcontrollers that are the brains of an embedded system. Embedded systems are a
ubiquitous component of our everyday lives. We interact with hundreds of tiny computers every day that
are embedded into our houses, our cars, our bridges, our toys, and our work. As our world has become
more complex, so have the capabilities of the microcontrollers embedded into our devices. Therefore, the
world needs a trained workforce to develop and manage products based on embedded microcontrollers.
The ARM microcontroller stands for Advance Risk Machine; it is one of the extensive and most
licensed processor cores in the world. The first ARM processor was developed in the year 1978 by
Cambridge University, and the first ARM RISC processor was produced by the Acorn Group of
Computers in the year 1985.
These processors are specifically used in portable devices like digital cameras, mobile phones,
home networking modules and wireless communication technologies and other embedded systems due
to the benefits, such as low power consumption, reasonable performance, etc. This article gives an
overview of ARM architecture with each module’s principle of working.
Keil MDK is the complete software development environment for a wide range of ARM Cortex-
M based microcontroller devices. MDK includes the μVision IDE and debugger, Arm C/C++ compiler,
and essential middleware components. It supports all silicon vendors with more than 6,000 devices and is
easy to learn and user.
• Single flash sector/full chip erase in 400 ms and programming of 256 bytes in 1 ms.USB 2.0
Full-speed compliant device controllers with 2 kB of endpoint RAM. The LPC2146/48 provides 8
kB of on-chip RAM accessible to USB by DMA.
• One or two (LPC2141/42 vs. LPC2144/46/48) 10-bit ADCs provide a total of 6/14 analog inputs, with
conversion times as low as 2.44 μs per channel. Single 10-bit DAC provides variable analog output
(LPC2142/44/46/48 only). Two 32-bit timers/external event counters (with four capture and four compare
channels each), PWM unit (six outputs) and watchdog.
• Low power Real-Time Clock (RTC) with independent power and 32 kHz clock input. Multiple serial
interfaces including two UARTs (16C550), two Fast I2Cbus (400 kbit/s), SPI and SSP with buffering
and variable data length capabilities.
• Vectored Interrupt Controller (VIC) with configurable priorities and vector addresses. Up to 45 of
5 V tolerant fast general purpose I/O pins in a tiny LQFP64 package. Up to 21
externals interrupt pins available.
• 60MHz maximum CPU clock available from programmable on-chip PLL with settling time of
100μs.On-chip integrated oscillator operates with an external crystal from 1 MHz to 25 MHz Power
saving modes include Idle and Power down.
• Individual enable/disable of peripheral functions as well as peripheral clock scaling for additional
power optimization. Processor wake-up from Power-down mode via external interrupt or BOD.
Single power supply chip with POR and BOD circuits: CPU operating voltage range of 3.0 V to 3.6 V
(3.3 V ± 10 %) with 5 V tolerant I/O pads.
• The external power can be AC or DC, with a voltage between (9V/12V, 1A output) at 230V AC
input. The ARM board produces +5V using an LM7805 voltage regulator, which provides supply
to the peripherals.
• LM1117 Fixed +3.3V positive regulator used for processor & processor related peripherals.
• NXP (Philips) NXP Semiconductors produce a range of Microcontrollers that feature both on-chip
Flash memory and the ability to be reprogrammed using In-System Programming technology.
PIN DIAGRAM
1. Go to EXE folder and then uvision4.2 in the CD and run Keil4 Arm.exe file.
2. Next
3. Click on the option “I agree to all the terms of...” and then give Next
4. Next
5. Give name and the mail id (it might be any mail id) and then Next
6. Click Finish to complete the installation.
8. Open Keil uVision4 IDE software by double clicking on “Keil Uvision4” icon.
9. Go to “Project” then to “New uVision Project” and save it with a name in the respective project
folder, already you created.
10. Select the device as “NXP” In that “LPC2148” then press OK and then press “YES” button to add
“startup’s” file.
11. In startup file go to Configuration Wizard. In Configuration Wizard window uncheck PLL Setup and
check VPBDIV Setup.
12. Go to “File” In that “New” to open an editor window. Create your source file and use the header file
“lpc21xx.h” in the source file and save the file. Colour syntax highlighting will be enabled once the file is
saved with a extension such as “.C “.
13. Right click on “Source Group 1” and select the option “Add Existing Files to Group Source
Group 1“add the *.C source file(s) to the group.
14. After adding the source file you can see the file in Project Window.
15. Then go to “Project” in that “Translate” to compile the File (s). Check out the Build output window.
16. Right click on Target1 and select options for Target Target1.
PART -A
RESULT:
Program No: 2 write a program to find the sum of first 10 integer numbers.
AIM: To write a program to find the sum of first 10 integer numbers using ARM7TDMI/LPC2148 using
an evaluation board/simulator and the required software tool.
RESULT:
RESULT:
Program No: 4 write a program to add an array of 16 bit numbers and store the 32
bit result in internal RAM
AIM: To write a program to add an array of 16 bit numbers and store the 32 bit results in internal RAM using an
evaluation board/simulator and the required software tool.
RESULT:
Program No:5 Write a program to find the square of a number (1 to 10) using look-
up table.
AIM: To write a program to find the square of a number (1 to 10) using look-up table. using
ARM7TDMI/LPC2148 using an evaluation board/simulator and the required software tool.
RESULT:
LARGEST
AREA RESET, CODE, READONLY
START
ENTRY ; MARK FIRST INSTRUCTION TO EXECUTE
MOV R5, #6 ; INTIALISE COUNTER TO 6(I.E. N=7)
LDR R1,=VALUE1 ; LOADS THE ADDRESS OF FIRST VALUE
LDR R2, [R1],#4 ; WORD ALIGN T0 ARRAY ELEMENT
LOOP
LDR R4,[R1], #4 ; WORD ALIGN T0 ARRAY ELEMENT
CMP R2, R4 ; COMPARE NUMBERS
BHI LOOP1 ; IF THE FIRST NUMBER IS > THEN GOTO LOOP1
MOV R2, R4 ; IF THE FIRST NUMBER IS < THEN MOV CONTENT R4 TO R2
LOOP1
SUBS R5, R5, #1 ; DECREMENT COUNTER
CMP R5, #0 ; COMPARE COUNTER TO 0
BNE LOOP ; LOOP BACK TILL ARRAY ENDS
LDR R4,=RESULT ; LOADS THE ADDRESS OF RESULT
STR R2, [R4] ; STORES THE RESULT IN R2
STOP B STOP ; ARRAY OF 32 BIT NUMBERS(N=7)
VALUE1
DCD 0X44444444
DCD 0X22222222
DCD 0X11111111
DCD 0X33333333
DCD 0XAAAAAAAA
DCD 0X88888888
DCD 0X99999999
AREA DATA2, DATA, READWRITE ; TO STORE RESULT IN GIVEN ADDRESS
RESULT DCD 0X400000000
END ; MARK END OF FILE
RESULT:
SMALLEST
RESULT:
ASCENDING
RESULT:
DESCENDING
AREA RESET, CODE, READONLY
START
ENTRY ; MARK FIRST INSTRUCTION TO EXECUTE
MOV R8,#4 ; INTIALISE COUNTER TO 4(I.E. N=4)
LDR R2,=CVALUE ; ADDRESS OF CODE REGION
LDR R3,=DVALUE ; ADDRESS OF DATA REGION
LOOP0
LDR R1,[R2],#4 ; LOADING VALUES FROM CODE REGION
STR R1,[R3],#4 ; STORING VALUES TO DATA REGION
SUBS R8,R8,#1 ; DECREMENT COUNTER
CMP R8,#0 ; COMPARE COUNTER TO 0
BNE LOOP0 ; LOOP BACK TILL ARRAY ENDS
START1
MOV R5,#3 ; INTIALISE COUNTER TO 3(I.E. N=4)
MOV R7,#0 ; FLAG TO DENOTE EXCHANGE HAS
OCCURED
LDR R1,=DVALUE ; LOADS THE ADDRESS OF FIRST VALUE
LOOP
LDR R2,[R1],#4 ; WORD ALIGN T0 ARRAY ELEMENT
LDR R3,[R1] ; LOAD SECOND NUMBER
CMP R2,R3 ; COMPARE NUMBERS
BGT LOOP2 ; IF THE FIRST NUMBER IS > THEN GOTO LOOP2
STR R2,[R1],#-4 ; INTERCHANGE NUMBER R2 & R3
STR R3,[R1] ; INTERCHANGE NUMBER R2 & R3
MOV R7,#1 ; FLAG DENOTING EXCHANGE HAS TAKEN PLACE
ADD R1,#4 ; RESTORE THE PTR
LOOP2
SUBS R5,R5,#1 ; DECREMENT COUNTER
CMP R5,#0 ; COMPARE COUNTER TO 0
BNE LOOP ; LOOP BACK TILL ARRAY ENDS
CMP R7,#0 ; COMPARING FLAG
BNE START1 ; IF FLAG IS NOT ZERO THEN GO TO START1 LOOP
STOP B STOP ; ARRAY OF 32 BIT NUMBERS(N=4) IN CODE REGION
CVALUE
DCD 0X44444444
DCD 0X11111111
DCD 0X33333333
DCD 0X22222222
AREA DATA1, DATA, READWRITE ; ARRAY OF 32 BIT NUMBERS IN DATA
DVALUE ;REGION
DCD 0X40000000
END ; MARK END OF FILE
Program No: 8 Write a program to count the number of ones and zeros in two
consecutive memory locations.
AIM: To Write a program to count the number of ones and zeros in two consecutive memory locations
using ARM7TDMI/LPC2148 using an evaluation board/simulator and the required software tool
AREA RESET, CODE, READONLY
START
ENTRY ; MARK FIRST INSTRUCTION TO EXECUTE
MOV R2,#0 ; COUNTER FOR ONES
MOV R3,#0 ; COUNTER FOR ZEROS
MOV R7,#2 ; COUNTER TO GET TWO WORDS
LDR R6,=VALUE ; LOADS THE ADDRESS OF VALUE
LOOP MOV R1, #32 ; 32 BITS COUNTER
LDR R0,[R6],#4 ; GET THE 32 BIT VALUE
LOOP0 MOVS R0,R0, ROR #1 ; RIGHT SHIFT TO CHECK CARRY BIT (1'S/0'S)
BHI ONES ; IF CARRY BIT IS 1 GOTO ONES BRANCH OTHERWISE NEXT
ZEROS ADD R3,R3,#1 ; IF CARRY BIT IS 0 THEN INCREMENT THE COUNTER BY 1(R3)
B LOOP1 ; BRANCH TO LOOP1
ONES ADD R2,R2,#1 ; IF CARRY BIT IS 1 THEN INCREMENT THE COUNTER BY 1(R2)
SUBS R1,R1,#1 ; COUNTER VALUE DECREMENTED BY 1
BNE LOOP0 ; IF NOT EQUAL GOTO TO LOOP0 CHECKS 32BIT
SUBS R7,R7,#1 ; COUNTER VALUE DECREMENTED BY 1
CMP R7,#0 ; COMPARE COUNTER R7 TO 0
BNE LOOP ; IF NOT EQUAL GOTO TO LOOP
STOP B STOP
VALUE DCD 0X00000003, 0X00000002 ; TWO VALUES IN AN ARRAY
END ; MARK END OF FILE
RESULT:
PART- B
Select “Use Memory Layout for Target Dialog”. To come out of this window press OK.
11. Go to “Project” in that “Build Target” for building all source files such as “.C”,”.ASM”, “.h”, files,
etc…This will create the *.HEX file if no warnings & no Errors. Check out the Build output window.
FLASHMAGIC:
Step1. Communications:
1. Device : LPC2148
2. Com Port : COM1
3. Baud Rate: 9600
4. Interface : None(ISP)
5. Oscillator : 12MHz
Step2. ERASE:
1. Select “Erase Blocks Used By Hex File”.
1. Browse and select the Hex file which you want to download.
Step4. Options
1. Select “Verify after programming”.
Step5. Start:
2. Click Start to download the hex file to the controller.
After downloading the code the program starts executing in the hardware, then remove the
ISP jumper JP7.
#include <lpc214x.h>
void uart_interrupt(void)__irq;
int main(void)
{
PINSEL0=0X0000005; //select TXD0 and RXD0 lines
U0LCR = 0X00000083; //enable baud rate divisor loading and
U0DLM = 0X00; //select the data format
U0DLL = 0x13; //select baud rate 9600 bps
U0LCR = 0X00000003;
U0IER = 0X03; //select Transmit and Receive interrupt
rx_flag = 0x00;
tx_flag = 0x00;
while(1)
{
while(rx_flag == 0x00); //wait for receive flag to set
rx_flag = 0x00; //clear the flag
while(tx_flag == 0x00); //wait for transmit flag to set
tx_flag = 0x00; //clear the flag
}
}
// Do this forever
void uart_interrupt(void)__irq
{
temp = U0IIR;
temp = temp & 0x06;
if(temp == 0x02)
{
tx_flag = 0xff;
VICVectAddr=0;
}
else if(temp == 0x04)
{
U0THR = U0RBR;
rx_flag = 0xff;
VICVectAddr=0;
}
}
#include<lpc214x.h> void
clock_wise (void); void
anti_clock_wise (void);
unsigned int j=0;
int main()
{
IO0DIR= 0X00000900;
IO0SET= 0X00000100;
//P0.8 should always high.
while(1)
{
clock_wise();
for(j=0;j<400000;j++);
anti_clock_wise(); //delay
for(j=0;j<400000;j++);
} //delay
} //End of while(1)
//End of Main
void clock_wise(void)
{
IO0CLR = 0x00000900;
for(j=0;j<10000;j++); //stop motor and also turn off relay
IO0SET = 0X00000900; //small delay to allow motor to turn off motor
//Selecting the P0.11 line for clockwise and turn on
}
void anti_clock_wise(void)
{
IO0CLR = 0X00000900;
for(j=0;j<10000;j++); //stop motor and also turn off relay
IO0SET = 0X00000100; //small delay to allow motor to turn off
} //not selecting the P0.11 line for Anti clockwise
Program No:11 Interface a Stepper motor and rotate it in clockwise and anti-
clockwise direction
AIM: To write a program to Interface a Stepper motor and rotate it in clockwise and anti-clockwise direction using an
ARM7TDMI/LPC2148 evaluation board using evaluation version of Embedded 'C' & Keil Uvision-4 tool/compiler.
#include <LPC21xx.H>
void clock_wise(void);
void anti_clock_wise(void);
int main(void)
{
PINSEL0 = 0x00FFFFFF; //P0.12 to P0.15 GPIo
IO0DIR |= 0x0000F000; //P0.12 to P0.15 output
while(1)
{
for(j=0;j<50;j++) // 20 times in Clock wise Rotation
clock_wise();
} // End of while(1)
} // End of main
void clock_wise(void)
{
var1 = 0x00000800; //For Clockwise
for(i=0;i<=3;i++) // for A B C D Stepping
{
var1 = var1<<1; //For Clockwise
var2 = ~var1;
var2 = var2 & 0x0000F000;
IO0PIN = ~var2;
void anti_clock_wise(void)
{
var1 = 0x00010000; //For Anticlockwise
IO0PIN = ~var2;
for(k=0;k<3000;k++); //for step speed variation
}
}
Program No:12 Determine Digital output for a given Analog input using Internal
ADC of ARM controller
AIM: To write a program to Interface Determine Digital output for a given Analog input using Internal ADC of ARM
controller using an ARM7TDMI/LPC2148 evaluation board using evaluation version of Embedded 'C' & Keil
Uvision-4 tool/compiler.
#include <lpc214x.h>
#include <Stdio.h>
void lcd_init(void);
void wr_cn(void);
void clr_disp(void);
void delay(unsigned int);
void lcd_com(void);
void wr_dn(void);
void lcd_data(void);
int main()
{
PINSEL1 = 0X00040000; //AD0.4 pin is selected(P0.25)
IO0DIR = 0x000000FC; //configure o/p lines for lcd
delay(3200);
lcd_init(); //LCD initialization
delay(3200);
clr_disp(); //clear display
delay(3200); //delay
ptr = dis;
temp1 = 0x80; //Display starting address of first line 1 th pos
lcd_com();
delay(800);
while(*ptr!='\0')
{
temp1 = *ptr;
lcd_data();
ptr ++;
}
ptr1 = arr;
while(*ptr1!='\0')
{
temp1 = *ptr1;
lcd_data();
ptr1 ++;
}
//infinite loop
while(1)
{
//CONTROL register for ADC
AD0CR = 0x01200010; //command register for ADC-AD0.4
temp1 = 0x89;
lcd_com();
delay(1200);
ptr = var1;
while(*ptr!='\0')
{
temp1=*ptr;
lcd_data();
ptr++;
}
temp1 = 0xc9;
lcd_com();
delay(1200);
ptr1 = var;
while(*ptr1!='\0')
{
temp1=*ptr1;
lcd_data();
ptr1++;
}
} // end of while(1)
} //end of main()
//lcd initialization
void lcd_init()
{
temp2=0x30;
wr_cn();
delay(800);
temp2=0x30;
wr_cn();
delay(800);
temp2=0x30;
wr_cn();
delay(800);
temp2=0x20;
wr_cn();
delay(800);
temp1 = 0x28;
lcd_com();
delay(800);
temp1 = 0x0c;
lcd_com();
delay(800);
temp1 = 0x06;
lcd_com();
delay(800);
temp1 = 0x80;
lcd_com();
delay(800);
}
void lcd_com(void)
{
temp2= temp1 & 0xf0;
wr_cn();
temp2 = temp1 & 0x0f;
temp2 = temp2 << 4;
wr_cn();
delay(500);
}
Program No: 13 Interface a DAC and generate Triangular and Square waveforms
AIM: To write a program to Interface a DAC and generate Triangular and Square waveforms using an
ARM7TDMI/LPC2148 evaluation board using evaluation version of Embedded 'C' & Keil Uvision-4 tool/compiler.
TRIANGULAR WAVEFORM
#include <LPC21xx.h>
int main ()
{
unsigned long int temp=0x00000000;
unsigned int i=0;
IO0DIR=0x00FF0000;
while(1)
{
// output 0 to FE
for(i=0;i!=0xFF;i++)
{
temp=i;
temp = temp << 16;
IO0PIN=temp;
}
// output FF to 1
for(i=0xFF; i!=0;i--)
{
temp=i;
temp = temp << 16;
IO0PIN=temp;
}
} //End of while(1)
} //End of main()
SQUARE WAVEFORM
#include <lpc21xx.h>
void delay(void);
int main ()
{
PINSEL0 = 0x00000000 ; // Configure P0.0 to P0.15 as
GPIO
PINSEL1 = 0x00000000 ; // Configure P0.16 to P0.31 as
GPIO
IO0DIR = 0x00FF0000 ;
while(1)
{
IO0PIN = 0x00000000;
delay();
IO0PIN = 0x00FF0000;
delay();
}
}
void delay(void)
{
unsigned int i=0;
for(i=0;i<=95000;i++);
}
Program No: 14 Interface a 4x4 keyboard and display the key code on an LCD
AIM: To write a program to a 4x4 keyboard and display the key code on an LCD
#include<lpc21xx.h>
#include<stdio.h>
void lcd_init(void);
void clr_disp(void);
void lcd_com(void);
void lcd_data(void);
void wr_cn(void);
void wr_dn(void);
void scan(void);
void get_key(void);
void display(void);
void delay(unsigned int);
void init_port(void);
{
// __ARMLIB_enableIRQ();
init_port(); //port intialisation
delay(3200); //delay
lcd_init(); //lcd intialisation
delay(3200); //delay
clr_disp(); //clear display
delay(500); //delay
ptr = disp;
temp1 = 0x81; // Display starting address
lcd_com();
delay(800);
while(*ptr!='\0')
{
temp1 = *ptr;
lcd_data();
ptr ++;
}
//........KEYPAD Working.........//
while(1)
{
get_key();
display();
}
} //end of main()
scan();
delay(100); //delay
if(flag == 0xff)
break;
} // end of for
if(flag == 0xff)
break;
} // end of while
for(i=0;i<16;i++)
{
if(scan_code[i] == res1) //equate the scan_code with res1
{
result = ASCII_CODE[i]; //same position value of ascii code
break; //is assigned to result
}
}
} // end of get_key();
void scan(void)
{
unsigned long int t;
temp2 = IO1PIN; // status of port1
temp2 = temp2 & 0x000F0000; // Verifying column key
if(temp2 != 0x000F0000) // Check for Key Press or Not
{
delay(1000); //delay(100)//give debounce delay check again
temp2 = IO1PIN;
temp2 = temp2 & 0x000F0000; //changed condition is same
void display(void)
{
ptr = disp0;
temp1 = 0x80; // Display starting address of first line lcd_com();
while(*ptr!='\0')
{
temp1 = *ptr;
lcd_data();
ptr ++;
}
ptr = disp1;
temp1 = 0xC0; // Display starting address of second line lcd_com();
while(*ptr!='\0')
{
temp1 = *ptr;
lcd_data();
ptr ++;
}
temp1 = 0xC6; //display address for key value lcd_com();
temp1 = result;
lcd_data();
}
temp = 0x30;
wr_cn();
delay(3200);
temp = 0x30;
wr_cn();
delay(3200);
temp = 0x20;
wr_cn();
delay(3200);
// load command for lcd function setting with lcd in 4 bit mode,
// 2 line and 5x7 matrix display
temp = 0x28;
lcd_com();
delay(3200);
temp1 = 0x0C;
lcd_com();
delay(800);
temp1 = 0x80;
lcd_com();
delay(800);
}
void lcd_data(void)
{
temp = temp1 & 0xf0;
wr_dn();
temp= temp1 & 0x0f;
temp= temp << 4;
wr_dn();
delay(100);
}
void lcd_com(void)
{
temp = temp1 & 0xf0;
wr_cn();
temp = temp1 & 0x0f;
temp = temp << 4;
wr_cn();
delay(500);
}
void clr_disp(void)
{
// command to clear lcd display
temp1 = 0x01;
lcd_com();
delay(500);
}
void init_port()
{
IO0DIR = 0x000000FC; //configure o/p lines for lcd
IO1DIR = 0XFFF0FFFF;
}
AIM: To write a program to Demonstrate the use of an external interrupt to toggle an LED On/Off using an
ARM7TDMI/LPC2148 evaluation board using evaluation version of Embedded 'C' & Keil Uvision-4 tool/compiler.
#include<lpc214x.h>
// Function prototypes
void lcd_init(void);
void wr_cn(void);
void clr_disp(void);
void delay(unsigned int);
void lcd_com(void);
void wr_dn(void);
void lcd_data(void);
void LCD(void);
void Extint1_Isr(void) __irq; //declaration of ISR
int main(void)
{
IO1DIR |= 0X02000000; //P1.25 int led
IO1SET = 0X02000000;
PINSEL0 =0X000000c0; //P0.3 EINT1
EXTMODE =0x01; //edge i.e falling egge trigger and active low
EXTPOLAR= 0X00;
VICVectAddr0 = (unsigned long) //Assign the EINT0 ISR function
Extint1_Isr; VICVectCntl0 = 0x20 | 15; //Assign the VIC channel EINT1 to interrupt priority 0
VICIntEnable |= 0x00008000; //Enable the EINT1 interrupt
}
}
Program No:16 Display the Hex digits 0 to F on a 7-segment LED interface, with
an appropriate delay in between
AIM: To write a program to Demonstrate the use of an external interrupt to toggle an LED On/Off using an
ARM7TDMI/LPC2148 evaluation board using evaluation version of Embedded 'C' & Keil Uvision-4 tool/compiler.
#include <LPC21XX.h>
while(1)
{
IO0SET |= ALLDISP; // select all digits
IO0CLR = 0x00FF0000; // clear the data lines to 7-segment displays
IO0SET = Disp[Switchcount]; // get the 7-segment display value from the
array