Professional Documents
Culture Documents
NO: 1
STUDY OF ARM
DATE:
AIM:
APPARATUS REQUIRED:
THEORY:
The LPC2141/2/4/6/8 microcontrollers are based on a 32/16 bit ARM7TDMI-S
CPU with real-time emulation and embedded trace support, that combines the
microcontroller with embedded high speed flash memory ranging from 32 kB to 512 kB.
A 128-bit wide memory interface and a unique accelerator architecture enable 32-bit code
execution at the maximum clock rate. For critical code size applications, the alternative
16-bit Thumb mode reduces code by more than 30 % with minimal performance penalty.
Due to their tiny size and low power consumption, LPC2141/2/4/6/8 are ideal for
applications where miniaturization is a key requirement, such as access control and point-
of-sale. A blend of serial communications interfaces ranging from a USB 2.0 Full Speed
device, multiple UARTs, SPI, SSP to I2Cs, and on-chip SRAM of 8 kB up to 40 kB,
make these devices very well suited for communication gateways and protocol
converters, soft modems, voice recognition and low end imaging, providing both large
buffer size and high processing power. Various 32-bit timers, single or dual 10-bit
ADC(s), 10-bit DAC, PWM channels and 45 fast GPIO lines with up to nine edge or
level sensitive external interrupt pins make these microcontrollers particularly suitable for
industrial control and medical systems.
ARCHITECTURAL OVERVIEW
ARM7TDMI-S PROCESSOR
The ARM7TDMI-S is a general purpose 32-bit microprocessor, which offers high
performance and very low power consumption. The ARM architecture is based on
Reduced Instruction Set Computer (RISC) principles, and the instruction set and related
decode mechanism are much simpler than those of microprogrammed Complex
Instruction Set Computers. This simplicity results in a high instruction throughput and
impressive real-time interrupt response from a small and cost-effective processor core.
Pipeline techniques are employed so that all parts of the processing and memory systems
can operate continuously. Typically, while one instruction is being executed, its successor
is being decoded, and a third instruction is being fetched from memory.
The ARM7TDMI-S processor also employs a unique architectural strategy known
as THUMB, which makes it ideally suited to high-volume applications with memory
restrictions, or applications where code density is an issue.
The key idea behind THUMB is that of a super-reduced instruction set.
Essentially, the ARM7TDMI-S processor has two instruction sets:
• The standard 32-bit ARM instruction set.
• A 16-bit THUMB instruction set.
The THUMB set’s 16-bit instruction length allows it to approach twice the
density of standard ARM code while retaining most of the ARM’s performance
advantage over a traditional 16-bit processor using 16-bit registers. This is possible
because THUMB code operates on the same 32-bit register set as ARM code.
THUMB code is able to provide up to 65% of the code size of ARM, and 160% of
the performance of an equivalent ARM processor connected to a 16-bit memory system.
The ARM7TDMI-S processor is described in detail in the ARM7TDMI-S Datasheet that
can be found on official ARM website
RESULT :
EX.NO: 2(a) ADC
DATE :
AIM :
APPARATUS REQUIRED:
PROGRAM:
#include <LPC214x.H>
#include <STRING.H>
int main()
INIT_PLL();
INIT_GPIO();
LCD_INIT();
INIT_ADC();
LCDSTR(0x000000C0,"VOLTAGE = ");
while(1)
TEMP = READ_ADC();
ADC = 1000*(TEMP*(3.901/1024));
LCD_CMD(0x000000CA);
CONVERT_ADC(ADC);
for(j=1;j<1200;j++);
void INIT_GPIO()
{
IO0DIR =0x00000E00; // P0.8 ----- P0.15 LCD DATA
IO1DIR =0X00FF0000; // P1.21 --- P1.23 LCD CONTROL
void INIT_PLL()
{
PLL0CFG=0x00000024; // TO GENERATE 60 MHZ CCLK
PLL0CON=0x00000001;
PLL0FEED=0x000000AA; // UPDATE THE PLL REGISTER
PLL0FEED=0x00000055;
TEMP = VALUE;
for(b=0;b<16;b++)
TEMP = TEMP<<1;
}
IO1SET = TEMP;
IO1CLR = ~TEMP;
IO0CLR = RW;
IO0SET = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
unsigned int b;
for(b=0;b<16;b++)
LCMD = LCMD<<1;
IO1SET = LCMD;
IO1CLR = ~LCMD;
IO0CLR = RW;
IO0CLR = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
LCD_CMD(ADDRESS);
LENGTH = strlen(MSG);
for(COUNT=0;COUNT<LENGTH;COUNT++)
LCD_DATA(*MSG);
MSG++;
void LCD_INIT()
{
LCD_CMD(0x00000038);
LCD_CMD(0x0000000C);
LCD_CMD(0x00000001);
LCD_CMD(0x00000006);
}
void INIT_ADC()
PINSEL1 |= 0x01000000;
AD0CR = 0x00200602;
int READ_ADC()
{
int VAL;
do
VAL >>=6;
return(VAL);
return;
RESULT:
EX.NO: 2(b) DAC
DATE :
AIM :
APPARATUS REQUIRED:
PROGRAM:
#include<lpc214x.h>
#include"math.h"
unsigned int t;
while (--b!=0);
int main()
int value=0x3ff;
PINSEL1 = 0X00080000;
while(1)
{
value = 512+400*sin(t*0.01745);
DACR = value<<6;
if(++t==360)t=0;
}
}
RESULT
EX. NO: 3 PWM
DATE:
AIM :
APPARATUS REQUIRED:
PROGRAM:
#include<LPC214x.h>
/*
************************************************************************
**********************
* Function : PwmInit
* Description : Routine for 120 Khz Frequency Generation
* Parameters : None
************************************************************************
**********************
*/
void INIT_ADC(void);
int READ_ADC(void);
unsigned int PWM=0;
void PwmInit()
{
PINSEL0 = 0X00008000; // Enable PWM2 -- P0.7
PWMLER = 0X00000004; // Set latch register
PWMPR = 0X00000000; // Prescale 0
PWMMR0 = 0X000003FF; // 120 KHz Frequency
PWMMR2 = 0X000003FF; // 50% Duty Cycle 7C 0,62,124,186
PWMMCR = 0X00000002; // Set only Match0 control
PWMPCR = 0X00000400;
PWMTCR = 0X00000009;
}
int main()
{
PwmInit();
INIT_ADC();
//IO0DIR = 0x000000FF;
//IO0CLR &= 0x000000FF;
while(1)
{
PWM = READ_ADC();
if(PWM>0x000003FF) PWM=0x000003FF;
PWMMR2 = PWM;
PWMTCR = 0X00000000;
PWMTCR = 0X00000009;
}
}
void INIT_ADC()
{
PINSEL1 |= 0x01000000;
AD0CR = 0x00200602;
}
int READ_ADC()
{
int VAL;
AD0CR |= 0x01000000; /* Start A/D Conversion */
do
{
VAL = AD0DR1; /* Read A/D Data Register */
}
while (!(VAL & 0x80000000)); /* Wait for end of A/D
Conversion */
AD0CR &= ~0x01000000; /* Stop A/D Conversion */
VAL >>=6;
VAL = VAL & 0x3FF;
return(VAL);
}
RESULT:
EX. NO: 4(a) RTC
DATE:
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include <LPC214x.H>
#include <STRING.H>
void SETTIME(void)
{
CCR = 0x02;
HOUR = 0;
MIN = 0;
SEC = 0;
CCR = 0x11;
}
int main()
{
SETTIME();
INIT_GPIO();
LCD_INIT();
LCDSTR(0x00000080,"REAL TIME CLOCK ");
LCDSTR(0x000000C0," ");
while(1)
{
LCD_CMD (0x000000C3);
LCD_DATA(HOUR/10 + '0');
LCD_DATA(HOUR%10 + '0');
LCD_DATA(':') ;
LCD_DATA(MIN/10 + '0');
LCD_DATA(MIN%10 + '0');
LCD_DATA(':') ;
LCD_DATA(SEC/10 + '0');
LCD_DATA(SEC%10 + '0');
}
}
void DELAY(unsigned int VALUE)
{
unsigned int i,j;
for(i=0;i<VALUE;i++)
{
for(j=1;j<1200;j++);
}
}
void INIT_GPIO()
{
IO0DIR =0x00000E00; // P0.8 ----- P0.15 LCD DATA
IO1DIR =0X00FF0000; // P1.21 --- P1.23 LCD CONTROL
}
void LCD_DATA(unsigned char VALUE)
{
unsigned int b,TEMP;
TEMP = VALUE;
for(b=0;b<16;b++)
{
TEMP = TEMP<<1;
}
IO1SET = TEMP;
IO1CLR = ~TEMP;
IO0CLR = RW;
IO0SET = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCD_CMD(unsigned int LCMD)
{
unsigned int b;
for(b=0;b<16;b++)
{
LCMD = LCMD<<1;
}
IO1SET = LCMD;
IO1CLR = ~LCMD;
IO0CLR = RW;
IO0CLR = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCDSTR(unsigned char ADDRESS,char *MSG)
{
unsigned char COUNT,LENGTH;
LCD_CMD(ADDRESS);
LENGTH = strlen(MSG);
for(COUNT=0;COUNT<LENGTH;COUNT++)
{
LCD_DATA(*MSG);
MSG++;
}
}
void LCD_INIT()
{
LCD_CMD(0x00000038);
LCD_CMD(0x0000000C);
LCD_CMD(0x00000001);
LCD_CMD(0x00000006);
}
RESULT:
EX. NO: 4(b) SERIAL PORT
DATE:
AIM:
APPARATUS REQUIRED :
PROGRAM:
#include <LPC214x.H> /* LPC21xx definitions*/
#include "SERIAL.H"
int main(void)
{
int j=0;
init_serial (); /* initialise serial port with
9600bps*/
sendchar ('A'); /* transmit char A */
j=50;
while(j++ < 1000);
while(1)
{
sendchar (getchar()); /* receive and
transmit char*/
}
}
RESULT:
EX. NO: 5(a) HEX KEY WITH LCD
DATE :
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include <LPC214x.H>
#include <STRING.H>
#define O1 0X00E00000
#define O2 0X00D00000
#define O3 0X00B00000
#define O4 0X00700000
#define I1 0x000E0000
#define I2 0x000D0000
#define I3 0x000B0000
#define I4 0x00070000
#define CLR 0x00F00000
int main()
{
INIT_PLL();
INIT_GPIO();
LCD_INIT();
LCDSTR(0x00000080,"Matrix KeyPad ");
LCDSTR(0x000000C0,"Key Pressed: ");
while(1)
{
IO0CLR = CLR;
IO0SET = O1;
delay(10);
if(scan(I1))LCDSTR(0x000000CC,"0"); //S1
if(scan(I2))LCDSTR(0x000000CC,"4"); //S5
if(scan(I3))LCDSTR(0x000000CC,"8"); //S9
if(scan(I4))LCDSTR(0x000000CC,"C"); //S13
IO0CLR = CLR;
IO0SET = O2;
if(scan(I1))LCDSTR(0x000000CC,"1"); //S2
if(scan(I2))LCDSTR(0x000000CC,"5"); //S6
if(scan(I3))LCDSTR(0x000000CC,"9"); //S10
if(scan(I4))LCDSTR(0x000000CC,"D"); //S14
IO0CLR = CLR;
IO0SET = O3;
if(scan(I1))LCDSTR(0x000000CC,"2"); //S3
if(scan(I2))LCDSTR(0x000000CC,"6"); //S7
if(scan(I3))LCDSTR(0x000000CC,"A"); //S11
if(scan(I4))LCDSTR(0x000000CC,"E"); //S15
IO0CLR = CLR;
IO0SET = O4;
if(scan(I1))LCDSTR(0x000000CC,"3"); //S4
if(scan(I2))LCDSTR(0x000000CC,"7"); //S8
if(scan(I3))LCDSTR(0x000000CC,"B"); //S12
if(scan(I4))LCDSTR(0x000000CC,"F"); //S16
}
}
char scan(int keystatus) /* scanning a a key */
{
while((IO0PIN & 0X000F0000)==keystatus)
{
delay(50);
if((IO0PIN & 0X000F0000)== 0X000F0000)return(1);
}
return(0) ;
}
void INIT_GPIO()
{
IO0DIR =0x00F00E00; // P0.8 ----- P0.15 LCD DATA
IO1DIR =0X00FF0000; // P1.21 --- P1.23 LCD CONTROL
}
void INIT_PLL()
{
PLL0CFG=0x00000024; // TO GENERATE 60 MHZ CCLK
PLL0CON=0x00000001;
PLL0FEED=0x000000AA; // UPDATE THE PLL REGISTER
PLL0FEED=0x00000055;
while(!(PLL0STAT & 0x00000400)); // CHECK WHETHRT THE CCLK IS
GENERATED EXAXT VALUE
PLL0CON=0x00000003; // CONNECT PLL
PLL0FEED=0x000000AA; // UPDATE THE PLL REGISTER
PLL0FEED=0x00000055;
VPBDIV=0x00000002; // PCLK=1/2*CCLK
}
void LCD_DATA(unsigned char VALUE)
{
unsigned int b,TEMP;
TEMP = VALUE;
for(b=0;b<16;b++)
{
TEMP = TEMP<<1;
}
IO1SET = TEMP;
IO1CLR = ~TEMP;
IO0CLR = RW;
IO0SET = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCD_CMD(unsigned int LCMD)
{
unsigned int b;
for(b=0;b<16;b++)
{
LCMD = LCMD<<1;
}
IO1SET = LCMD;
IO1CLR = ~LCMD;
IO0CLR = RW;
IO0CLR = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCDSTR(unsigned char ADDRESS,char *MSG)
{
unsigned char COUNT,LENGTH;
LCD_CMD(ADDRESS);
LENGTH = strlen(MSG);
for(COUNT=0;COUNT<LENGTH;COUNT++)
{
LCD_DATA(*MSG);
MSG++;
}
}
void LCD_INIT()
{
LCD_CMD(0x00000038);
LCD_CMD(0x0000000C);
LCD_CMD(0x00000001);
LCD_CMD(0x00000006);
}
RESULT:
EX. NO: 5(b) To display a message on LCD
DATE :
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include <LPC214x.H>
#include <STRING.H>
int main()
{
INIT_PLL();
INIT_GPIO();
LCD_INIT();
while(1)
{
LCDSTR(0x00000080,"*ChipMax Design-");
LCDSTR(0x000000C0,"*Labs- BANGALORE");
}
}
void DELAY(unsigned int VALUE)
{
unsigned int i,j;
for(i=0;i<VALUE;i++)
{
for(j=1;j<1200;j++);
}
}
void INIT_GPIO()
{
IO0DIR =0x0000FF00; // P0.8 ----- P0.15 LCD DATA
IO1DIR =0X00F00000; // P1.21 --- P1.23 LCD CONTROL
}
void INIT_PLL()
{
PLL0CFG=0x00000024; // TO GENERATE 60 MHZ CCLK
PLL0CON=0x00000001;
PLL0FEED=0x000000AA; // UPDATE THE PLL REGISTER
PLL0FEED=0x00000055;
RESULT:
EX.NO: 6(a) EXTERNAL EEPROM
DATE:
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include <LPC21xx.H>
#include <STRING.H>
}
void DELAY(unsigned int VALUE)
{
unsigned int i,j;
for(i=0;i<VALUE;i++)
{
for(j=1;j<1200;j++);
}
}
void INIT_GPIO()
{
IO0DIR =0x00F00E00; // P0.8 ----- P0.15 LCD DATA
IO1DIR =0X00FF0000; // P1.21 --- P1.23 LCD CONTROL
}
void LCD_DATA(unsigned char VALUE)
{
unsigned int b,TEMP;
TEMP = VALUE;
for(b=0;b<16;b++;
{
TEMP = TEMP<<1;
}
IO1SET = TEMP;
IO1CLR = ~TEMP;
IO0CLR = RW;
IO0SET = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCD_CMD(unsigned int LCMD)
{
unsigned int b;
for(b=0;b<16;b++)
{
LCMD = LCMD<<1;
}
IO1SET = LCMD;
IO1CLR = ~LCMD;
IO0CLR = RW;
IO0CLR = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCDSTR(unsigned char ADDRESS,char *MSG)
{
unsigned char COUNT,LENGTH;
LCD_CMD(ADDRESS);
LENGTH = strlen(MSG);
for(COUNT=0;COUNT<LENGTH;COUNT++)
{
LCD_DATA(*MSG);
MSG++;
}
}
void LCD_INIT()
{
LCD_CMD(0x00000038);
LCD_CMD(0x0000000C);
LCD_CMD(0x00000001);
LCD_CMD(0x00000006);
}
void delay(unsigned int del)
{
while(del-- > 0);
}
void i2c_init(void)
{
PINSEL0 = 0X50;
I2CONCLR = 0X0000002C; /* clears AA,I2C
interrupt flag,START flag bit*/
I2CONSET = 0X00000044; /* enable i2c */
I2SCLL = 0xFFFF; /* bitrate = 400kHz */ // 70,5
I2SCLH = 0xFFFF;;
}
void i2c_start()
{
I2CONSET |= 0x00000020; /* Set STA flag */
while (I2STAT != 0x00000008); /* Wait for Status Set - 0x08 */
}
void i2c_write(char dat , char status)
{
I2DAT = dat;
I2CONSET = 0X00000004;
I2CONCLR = 0X00000028;
while (I2STAT != status); /* Wait for Status Set */
}
void i2c_stop(void)
{
I2CONSET |= 0x00000014;
I2CONCLR = 0x00000008; /* Stop I2C and Start Bit */
}
char i2c_read(void)
{
I2CONSET = 0X00000004;
I2CONCLR = 0X00000028;
RESULT:
EX. NO: 6(b) EXTERNAL INTERRUPT
DATE :
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include<lpc21xx.h>
void DELAY(unsigned long VALUE);
unsigned int A = 0x00010000;
void ext_interrupt(void)__irq
{
EXTINT = 0X02; /* Clear interrupt flag
*/
DELAY(5000000);
VICVectAddr = 0x00000000; /*
Acknowledge Interrupt */
}
void init_ext(void)
{
PINSEL0 |= 0X20000000; /* enable
EXT1 */
EXTMODE = 0X02; /*
edge sensitive */
EXTPOLAR = 0X02; /*
on rising edge */
VICVectAddr0 =(unsigned int)ext_interrupt; /* Set Interrupt Vector in 0 */
VICVectCntl0 = 0x0000002F; /* Use it for
EXT1 Interrupt */
VICIntEnable = 0x00008000; /* enable
EXT1 INTERRUPT */
}
int main(void)
{
IO0DIR = 0X00FF0000;
init_ext();
while(1)
{
IO0SET |= A; /* Port0 00-07 High */
DELAY(1000000);
IO0CLR |= A; /* Port0 00-07 High */
A <<=1;
if(A==0x01000000) A=0x00010000;
DELAY(1000000);
}
}
void DELAY(unsigned long VALUE)
{
while(VALUE>0)
{
VALUE--;
}
}
RESULT :
EX.NO: 7 Mailbox
DATE :
AIM :
APPARATUS REQUIRED:
PROGRAM :
#include <RTL.h>
#include <LPC21xx.H>
#include <stdio.h>
OS_TID tsk1;
OS_TID tsk2;
typedef struct
{
float voltage;
float current;
U32 counter;
}T_MEAS;
os_mbx_declare (MsgBox,16);
_declare_box (mpool,sizeof(T_MEAS),16);
void init_serial ()
{
PINSEL0 = PINSEL0 | 0X00000005;
U0LCR = 0X83;
U0DLL = 0Xbb;
U0DLM = 0X00;
U0LCR = 0X03;
}
os_tsk_delete_self ();
}
RESULT :
EX.NO : 8 LED BLINK
DATE :
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include <LPC214X.H>
void DELAY(unsigned long VALUE);
unsigned char A = 0x01;
int main()
{
IO0DIR = 0x000000FF; /* Port0 00-07 as output*/
while(1) /* Infinite loop*/
{
IO0SET |= A; /* Port0 00-07 High */
DELAY(1000000);
IO0CLR |= A; /* Port0 00-07 High */
A <<=1;
if(A==0x00) A=0x01;
DELAY(1000000);
}
}
void DELAY(unsigned long VALUE)
{
while(VALUE>0)
{
VALUE--;
}
}
RESULT :
EX. NO :9(a) STEPPER MOTOR
DATE :
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include<LPC214X.H>
#define O1 0X000000E0
#define O2 0X000000D0
#define O3 0X000000B0
#define O4 0X00000070
#define I1 0x0000000E
#define I2 0x0000000D
#define I3 0x0000000B
#define I4 0x00000007
int main(void){
IO0DIR = 0X00FF00F0;
while(1){
unsigned char I;
IO0CLR = CLR;
IO0SET = O1;
while(scan(I1)) //S1
{
for(I=0;I<4;I++)
{
IO0SET |= CLOCK[I];
IO0CLR |= ~CLOCK[I];
delay(5);
}
}
while(scan(I2)) //S5
{
for(I=0;I<4;I++)
{
IO0SET |= CLOCK[I];
IO0CLR |= ~CLOCK[I];
delay(10);
}
}
IO0CLR = CLR;
IO0SET = O2;
while(scan(I1)) //S2
{
for(I=0;I<4;I++)
{
IO0SET |= ANTI_CLOCK[I];
IO0CLR |= ~ANTI_CLOCK[I];
delay(5);
}
}
while(scan(I2)) //S6
{
for(I=0;I<4;I++)
{
IO0SET |= CLOCK[I];
IO0CLR |= ~CLOCK[I];
delay(50);
}
}
IO0CLR = CLR;
IO0SET = O4;
while(scan(I4)) //S7
{
for(I=0;I<4;I++)
{
IO0SET |= CLOCK[I];
IO0CLR |= ~CLOCK[I];
delay(90);
}
}
}
}
RESULT :
EX. NO: 9(b) Temperature Sensor
DATE :
AIM :
APPARATUS REQUIRED:
PROGRAME:
#include <LPC214x.H>
#include <STRING.H>
void INIT_GPIO()
{
IO0DIR =0x00000E00; // P0.8 ----- P0.15 LCD DATA
IO1DIR =0X00FF0000; // P1.21 --- P1.23 LCD CONTROL
}
void INIT_PLL()
{
PLL0CFG=0x00000024; // TO GENERATE 60 MHZ CCLK
PLL0CON=0x00000001;
PLL0FEED=0x000000AA; // UPDATE THE PLL REGISTER
PLL0FEED=0x00000055;
while(!(PLL0STAT & 0x00000400)); // CHECK WHETHRT THE CCLK IS
GENERATED EXAXT VALUE
int READ_ADC()
{
int VAL;
AD0CR |= 0x01000000; /* Start A/D Conversion */
do
{
VAL = AD0DR1; /* Read A/D Data Register */
}
while (!(VAL & 0x80000000)); /* Wait for end of A/D
Conversion */
AD0CR &= ~0x01000000; /* Stop A/D Conversion */
VAL >>=6;
VAL = VAL & 0x3FF;
return(VAL);
}
void CONVERT_ADC(unsigned int ADC)
{
unsigned int CNT1,CNT2,CNT3,CNT4;
unsigned char DATA1,DATA2,DATA3,DATA4;
CNT1 = ADC % 10000/1000;
CNT2 = ADC % 1000/100;
CNT3 = ADC % 100/10;
CNT4 = ADC % 10/1;
DATA1 = CNT1 | 0x30;
DATA2 = CNT2 | 0x30;
DATA3 = CNT3 | 0x30;
DATA4 = CNT4 | 0x30;
LCD_DATA(DATA1);
LCD_DATA(DATA2);
LCD_DATA(DATA3);
LCD_DATA('.');
LCD_DATA(DATA4);
return;
}
RESULT:
EX.NO: 10(a) ZIGBEE NODE A
DATE :
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include <LPC214x.H>
#include <STRING.H>
#define O1 0X00E00000
#define O2 0X00D00000
#define O3 0X00B00000
#define O4 0X00700000
#define I1 0x000E0000
#define I2 0x000D0000
#define I3 0x000B0000
#define I4 0x00070000
int main()
{
init_serial();
INIT_PLL();
INIT_GPIO();
LCD_INIT();
LCDSTR(0x00000080," Zig Bee Based ");
LCDSTR(0x000000C0,"Motor Controller");
DELAY(6000);
while(1)
{
IO0CLR = CLR;
IO0SET = O1;
while(scan(I1))
{
LCDSTR(0x000000C0,"Running C-wise ");
sendchar('C');
}
IO0CLR = CLR;
IO0SET = O2;
while(scan(I1))
{
LCDSTR(0x000000C0,"Running AC-wise ");
sendchar('A');
}
LCDSTR(0x000000C0,"Motor Stopped ");
}
}
void DELAY(unsigned int VALUE)
{
unsigned int i,j;
for(i=0;i<VALUE;i++)
{
for(j=1;j<1200;j++);
}
}
void INIT_GPIO()
{
IO0DIR =0x00F00E00; // P0.8 ----- P0.15 LCD DATA
IO1DIR =0X00FF0000; // P1.21 --- P1.23 LCD CONTROL
}
void INIT_PLL()
{
PLL0CFG=0x00000024; // TO GENERATE 60 MHZ CCLK
PLL0CON=0x00000001;
PLL0FEED=0x000000AA; // UPDATE THE PLL REGISTER
PLL0FEED=0x00000055;
while(!(PLL0STAT & 0x00000400)); // CHECK WHETHRT THE CCLK IS
GENERATED EXAXT VALUE
PLL0CON=0x00000003; // CONNECT PLL
PLL0FEED=0x000000AA; // UPDATE THE PLL REGISTER
PLL0FEED=0x00000055;
VPBDIV=0x00000002; // PCLK=1/2*CCLK
}
void LCD_DATA(unsigned char VALUE)
{
unsigned int b,TEMP;
TEMP = VALUE;
for(b=0;b<16;b++)
{
TEMP = TEMP<<1;
}
IO1SET = TEMP;
IO1CLR = ~TEMP;
IO0CLR = RW;
IO0SET = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCD_CMD(unsigned int LCMD)
{
unsigned int b;
for(b=0;b<16;b++)
{
LCMD = LCMD<<1;
}
IO1SET = LCMD;
IO1CLR = ~LCMD;
IO0CLR = RW;
IO0CLR = RS;
IO0SET = E;
DELAY(50);
IO0CLR = E;
}
void LCDSTR(unsigned char ADDRESS,char *MSG)
{
unsigned char COUNT,LENGTH;
LCD_CMD(ADDRESS);
LENGTH = strlen(MSG);
for(COUNT=0;COUNT<LENGTH;COUNT++)
{
LCD_DATA(*MSG);
MSG++;
}
}
void LCD_INIT()
{
LCD_CMD(0x00000038);
LCD_CMD(0x0000000C);
LCD_CMD(0x00000001);
LCD_CMD(0x00000006);
}
{
PINSEL0 = PINSEL0 | 0X00000005;
U0LCR = 0X83;
U0DLL = 0XC3;
U0DLM = 0X00;
U0LCR = 0X03;
}
AIM:
APPARATUS REQUIRED:
PROGRAM:
#include <LPC21xx.H>
#include "serial.h"
int main(void)
{
init_serial ();
IO0DIR = 0X00FF0000;
while(1)
{
SBUF= getchar();
if(SBUF=='C')
{
IO0SET |= CLOCK[0];
IO0CLR |= ~CLOCK[0];
delay(5);
IO0SET |= CLOCK[1];
IO0CLR |= ~CLOCK[1];
delay(5);
IO0SET |= CLOCK[2];
IO0CLR |= ~CLOCK[2];
delay(5);
IO0SET |= CLOCK[3];
IO0CLR |= ~CLOCK[3];
delay(5);
}
if(SBUF=='A')
{
IO0SET |= ANTI_CLOCK[0];
IO0CLR |= ~ANTI_CLOCK[0];
delay(5);
IO0SET |= ANTI_CLOCK[1];
IO0CLR |= ~ANTI_CLOCK[1];
delay(5);
IO0SET |= ANTI_CLOCK[2];
IO0CLR |= ~ANTI_CLOCK[2];
delay(5);
IO0SET |= ANTI_CLOCK[3];
IO0CLR |= ~ANTI_CLOCK[3];
delay(5);
}
}
}
void delay(int n)
{
int i,j;
for (i=1; i<=n; i++)
for(j=0; j<=10000; j++);
}
///// ----------------
RESULT:
EX.NO: 11 DC MOTOR
DATE :
AIM:
APPARATUS REQUIRED:
PROGRAM :
#include<LPC214X.H>
#define O1 0X00E00000
#define O2 0X00D00000
#define O3 0X00B00000
#define O4 0X00700000
#define I1 0x000E0000
#define I2 0x000D0000
#define I3 0x000B0000
#define I4 0x00070000
{
IO0SET |= PWM1;
IO0CLR |= PWM2;
}
while(scan(I2)) //S5
{
IO0CLR |= PWM2;
IO0SET |= PWM1;
delay(30);
IO0CLR |= PWM1;
delay(10);
}
IO0CLR = CLR;
IO0SET = O2;
while(scan(I1)) //S2
{
IO0SET |= PWM2;
IO0CLR |= PWM1;
}
while(scan(I2)) //S6
{
IO0CLR |= PWM2;
IO0SET |= PWM1;
delay(15);
IO0CLR |= PWM1;
delay(15);
}
IO0CLR = CLR;
IO0SET = O3;
while(scan(I2)) //S7
{
IO0CLR |= PWM2;
IO0SET |= PWM1;
delay(10);
IO0CLR |= PWM1;
delay(30);
}
}
}
char scan(int keystatus) /* scanning a a key */
{
while((IO0PIN & 0X000F0000)==keystatus)
{
return(1);
}
return(0);
}
void delay(int n) /* generates one milisecond delay */
{
int i,j;
for (i=1; i<=n; i++)
for(j=0; j<=10000; j++);
}
RESULT: