USER MANUAL
TABLE OF CONTENTS
PAGE
1. TECHNICAL FEATURES....................... 3
6. SAMPLE PROGRAMS
1. DANCING LIGHTS....................... 13
2. ADC DEMO............................. 15
3. REAL TIME CLOCK...................... 17
4. COUNTER USING 7-SEGMENT DISPLAY...... 19
5. MATRIX KEYBOARD...................... 23
6. I2C EEPROM........................... 25
7. SERIAL PORT.......................... 27
8. LCD.................................. 28
9. RELAY................................ 29
10. RC5 REMOTE CONTROL................... 31
UNI-PIC-SDK
1. Technical Features
1. TECHNICAL FEATURES
UNI-PIC-SDK
2. Supported ICs
2. SUPPORTED ICs
1. PIC16F627
2. PIC16F627A
3. PIC16F628
4. PIC16F628A
5. PIC16F648
6. PIC16F648A
7. PIC16F72
8. PIC16F73
9. PIC16F84
10. PIC16F84A
11. PIC16F870
12. PIC16F872
13. PIC16F873
14. PIC16F873
15. PIC16F874
16. PIC16F876
17. PIC16F876A
18. PIC16F877
19. PIC16F877A
20. PIC18F242
21. PIC18F252
22. PIC18F442
23. PIC18F452
UNI-PIC-SDK
3. Circuit Diagram
UNI-51-SDK
3. Circuit Diagram
UNI-PIC-SDK
3. Circuit Diagram
UNI-PIC-SDK
3. Circuit Diagram
UNI-PIC-SDK
4. Programming using PICFlash-ISP
UNI-PIC-SDK
4. Programming using PICFlash-ISP
Step 3: Open the hex file of your program using “Open” button.
Step 4: Click “Program” button on main window and wait for the programming to
complete.
UNI-PIC-SDK
5. Programming using ICD-2
Step 1: Install MPLAB IDE software from CD. Skip this step if it is already
installed.
UNI-PIC-SDK
5. Programming using ICD-2
Step 4: Click File->Import menu, browse and open your program’s HEX File.
You need to repeat steps 4 – 6 every time you change your program.
UNI-PIC-SDK
6. Sample Programs
SAMPLE PROGRAMS
//********************************************************************
// DANCING LIGHTS
//********************************************************************
// 1) TURN-ON ALL SWITCHES ON SW5 (FOR PORT LED's)
// 2) MAKE SURE NO JUMPERS ARE CONNECTED ANYWHERE ON THE BOARD
// 3) NO LCD SHOULD BE CONNECTED
// 4) 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF
// 5) REMOVE ICD2/PICFLASH CABLE AFTER PROGRAMMING
//********************************************************************
#include "DancingLights.h"
void main(void)
{
unsigned char i,j,k;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
UNI-PIC-SDK
6. Sample Programs
i <<= 1;
j >>= 1;
delay_ms(100);
}
}
}
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// ADC DEMO:
// THIS PROGRAM DISPLAYS ADC CH.2 and CH.3 VALUES ON LCD
//*********************************************************************
// 1) LCD IS CONNECTED ON PORT-D
// 2) CONNECT JP13 AND JP14 FOR ANALOG INPUTS TO PORT-A
// 3) MAKE SURE NO JUMPERS ARE CONNECTED ANYWHERE ON THE BOARD
// 4) ALL PORT-A PULL-UP SWITCHES (SW1) SHOULD BE TURNED OFF
// 5) 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF (SW2)
// 6) VARY VR2 AND VR3 TO CHANGE ANALOG INPUT TO ADC
//*********************************************************************
#include "ADC.h"
#include "LCD_Driver.c"
void main(void)
{
long ra2, ra3;
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while(1)
{
set_adc_channel(2);
UNI-PIC-SDK
6. Sample Programs
delay_us(10);
ra2 = Read_ADC();
set_adc_channel(3);
delay_us(10);
ra3 = Read_ADC();
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// REAL-TIME CLOCK DEMO
//*********************************************************************
// 1) USE PULL-UP ON PORT-C
// 2) LCD IS CONNECTED ON PORT-D
// 3) MAKE SURE NO OTHER JUMPERS ARE CONNECTED
// 4) ALL LED's SHOULD BE TURNED OFF (SW5)
// 5) ALL 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF (SW2)
//*********************************************************************
#include "RTC.h"
#include "LCD_Driver.c"
#include "DS1307.c"
void main(void)
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED, 0, 1);
setup_comparator(NC_NC_NC_NC);
UNI-PIC-SDK
6. Sample Programs
setup_vref(FALSE);
ds1307_init();
while(1)
{
ds1307_get_date(day, month, year, day_of_week);
ds1307_get_time(hour, minute, second);
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// 7-SEGMENT COUNTER EXAMPLE
//*********************************************************************
// 1) TURN ON ALL 7-SEGMENT DISPLAYS USING SW2
// 2) USE PULL-UP ON PORT-C
// 3) USE PULL-DOWN (GND) ON SWITCHES (JP15)
// 4) MAKE SURE NO OTHER JUMPERS ARE CONNECTED
// 5) ALL LED's SHOULD BE TURNED OFF (SW5)
// 6) AFTER PROGRAMMING PRESS SWITCH ON PIN RC0 TO INCREMENT COUNT OR
SWITCH ON
// RC1 TO DECREMENT THE COUNT
//*********************************************************************
#include "7-Segment.h"
#define NO_OF_DISPLAYS 4
#define DIS1 PIN_A0
#define DIS2 PIN_A1
#define DIS3 PIN_A2
#define DIS4 PIN_A3
#define SW_UP PIN_C0
#define SW_DN PIN_C1
int8 disp_buffer[NO_OF_DISPLAYS];
int8 index;
unsigned int16 count;
// This function is called every time the RTCC (timer0) overflows (255-
>0).
// For this program this is nearly 488 times a second
// 4MHZ/(4*8*256) = ~488
#int_rtcc
UNI-PIC-SDK
6. Sample Programs
void display_isr(void)
{
if(++index > NO_OF_DISPLAYS-1) index=0;
output_b(0x00);
output_low(DIS1);
output_low(DIS2);
output_low(DIS3);
output_low(DIS4);
switch(index)
{
case 0:
output_high(DIS1);
break;
case 1:
output_high(DIS2);
break;
case 2:
output_high(DIS3);
break;
case 3:
output_high(DIS4);
break;
}
output_b(disp_buffer[index]);
}
void update_display_buffer(void)
{
char i, buffer[5];
sprintf(buffer,"%4ld",count);
for(i=0; i<5; i++)
if(buffer[i] < 48 || buffer[i] > 57) buffer[i] = 48;
UNI-PIC-SDK
6. Sample Programs
void main(void)
{
int8 i, temp;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_8 | RTCC_8_BIT);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
index = 0;
count = 0;
temp = table[0];
for(i=0;i<NO_OF_DISPLAYS; i++)
disp_buffer[i] = temp;
while(1)
{
if(!input(SW_UP))
{
delay_ms(25);
if(!input(SW_UP))
{
if(++count>9999) count=0;
update_display_buffer();
}
UNI-PIC-SDK
6. Sample Programs
}
else if(!input(SW_DN))
{
delay_ms(25);
if(!input(SW_DN))
{
if(--count==0xFFFF)count=9999;
update_display_buffer();
}
}
delay_ms(75);
}
}
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// MATRIX KEYBOARD TEST PROGRAM
//*********************************************************************
// 1) CONNECT LCD ON PORT-B
// 2) CONNECT MATRIX KEYBOARD ON PORT-D
// 3) USE PULL-UP ON PORT-D
// 4) MAKE SURE NO OTHER JUMPERS ARE CONNECTED
// 5) ALL LED'S SHOULD BE TURNED OFF (SW5)
// 6) 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF (SW2)
// 7) REMOVE ICD-2/PICFLASH CABLE AFTER PROGRAMMING
// 8) PRESS RESET ONCE TO START THE PROGRAM
//*********************************************************************
#include "Keyboard.h"
#include "LCD_Driver.c"
#include "KBD_Driver.c"
void main(void)
{
char k, count=0;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
kbd_init();
UNI-PIC-SDK
6. Sample Programs
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// I2C EEPROM TEST PROGRAM
// THIS PROGRAM READS/WRITES TO I2C EEPROM THROUGH SERIAL-PORT
INTERFACE.
//*********************************************************************
// 1) CONNECT SERIAL PORT JUMPERS JP5 TO RC7 AND JP6 TO RC6
// 2) MAKE SURE LED SWITCHES ARE TURNED OFF (SW5)
// 3) MAKE SURE 7-SEGMENT DISPLAYS ARE TURNED OFF (SW2)
// 4) CONNECT PULL-UP ON PORT-C
// 5) VIEW OUTPUT ON SERIAL TERMINAL AT 9600 BAUD, PARITY=NONE, DATA
BITS = 8,
// STOP BITS=1 (HYPERTERMINAL/TERATERM/REALTERM)
//*********************************************************************
#include "EEPROM.h"
#include "EE2402.c"
#include <input.c>
void main(void)
{
unsigned char value, cmd;
EEPROM_ADDRESS address;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
UNI-PIC-SDK
6. Sample Programs
do
{
do
{
printf("\r\nRead or Write: ");
cmd=getc();
cmd=toupper(cmd);
putc(cmd);
}while ( (cmd!='R') && (cmd!='W') );
printf("\n\rLocation: ");
#if sizeof(EEPROM_ADDRESS)==1
address = gethex();
#else
#if EEPROM_SIZE>0xfff
address = gethex();
#else
address = gethex1();
#endif
address = (address<<8)+gethex();
#endif
if(cmd=='R')
printf("\r\nValue: %X\r\n",READ_EXT_EEPROM( address ) );
if(cmd=='W')
{
printf("\r\nNew value: ");
value = gethex();
printf("\n\r");
WRITE_EXT_EEPROM( address, value );
}
} while (TRUE);
}
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// SERIAL PORT TEST PROGRAM
//*********************************************************************
// 1) CONNECT SERIAL PORT JUMPERS JP5 TO RC7 AND JP6 TO RC6
// 1) MAKE SURE NO OTHER JUMPERS ARE CONNECTED
// 5) ALL LED's SHOULD BE TURNED OFF (SW5)
// 6) ALL 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF (SW2)
// 5) VIEW OUTPUT ON SERIAL TERMINAL AT 9600 BAUD, PARITY=NONE, DATA
BITS = 8,
// STOP BITS=1 (HYPERTERMINAL/TERATERM/REALTERM)
// ANY KEY PRESSED WILL BE ECHOED-BACK
//*********************************************************************
#include "Serial.h"
#include <stdio.h>
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// LCD TEST PROGRAM
//*********************************************************************
// 1) CONNECT LCD ON PORT-D
// 2) MAKE SURE NO JUMPERS ARE CONNECTED
// 3) LED's SHOULD BE TURNED OFF (SW5)
// 4) 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF (SW2)
//*********************************************************************
#include "LCD.h"
#include "LCD_Driver.c"
void main(void)
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while(1);
}
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// RELAY TEST PROGRAM
//*********************************************************************
// 1) CONNECT JP18 TO RC1 SIDE
// 2) CONNECT JP15 TO PULL-DOWN (PD) SIDE
// 3) CONNECT PULL-UP ON PORT-B
// 4) MAKE SURE NO OTHER JUMPERS ARE CONNECTED
// 5) ALL LED's SHOULD BE TURNED OFF (SW5)
// 6) ALL 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF (SW2)
// 7) LCD SHOULD NOT BE CONNECTED
// 8) ICD-2/PICFLASH CABLE NEEDS TO BE DISCONNECTED AFTER PROGRAMMING
//*********************************************************************
#include "Relay.h"
void main(void)
{
int1 toggle;
int8 keys;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
UNI-PIC-SDK
6. Sample Programs
{
delay_ms(50); // Key debounce delay
if(toggle)
output_high(RELAY);
else
output_low(RELAY);
UNI-PIC-SDK
6. Sample Programs
//*********************************************************************
// RC5 REMOTE CONTROL TEST PROGRAM
//*********************************************************************
// 1) CONNECT INFRARED RECEIVER IN ITS SOCKET
// 2) CONNECT JP11 TO RB0 SIDE
// 3) USE PULL-UP ON PORT-B
// 4) CONNECT JP5 TO RC7 AND JP6 TO RC6 FOR SERIAL PORT
// 5) TURN-ON RC1 SWITCH ON SW4
// 6) CONNECT JP18 TO RC1 SIDE FOR RELAY
// 7) MAKE SURE NO OTHER JUMPERS ARE CONNECTED
// 8) ALL LED's SHOULD BE TURNED OFF (SW5)
// 9) 7-SEGMENT DISPLAYS SHOULD BE TURNED OFF (SW2)
// 10) NO LCD SHOULD BE PRESENT IN LCD CONNECTOR
// 11) AFTER PROGRAMMING, PRESSING '1' ON REMOTE WILL TOGGLE THE RELAY
AND
// SIMULTANEOUSLY RC5 CODE AND COMMAND WILL BE SEND TO SERIAL PORT
WHICH CAN
// BE SEEN ON TERMINAL PROGRAM AT 9600 BAUD, DATA BITS=8, STOP
BITS=1
// AND PARITY=NONE
//*********************************************************************
#include "RC5-Remote.h"
#include <stdio.h>
#INT_EXT
void RB0_INT(void)
{
UNI-PIC-SDK
6. Sample Programs
unsigned char i;
void main(void)
{
unsigned char address, command;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(TRUE);
UNI-PIC-SDK
6. Sample Programs
printf("RC5 Decoder\n\r");
while(1)
{
if(valid_code)
{
toggle_bit = 0;
if(code & 0x0800) toggle_bit = 1;
// Extract toggle bit
address = (unsigned char)((code >> 6) & 0x1F); //
Extract address
command = (unsigned char)code & 0x3F; //
Extract command
UNI-PIC-SDK