sk40c pic 16f877a crash course

24

Upload: zulko

Post on 28-Dec-2015

151 views

Category:

Documents


5 download

DESCRIPTION

Pic 16f877a details

TRANSCRIPT

Page 1: Sk40c Pic 16f877a Crash Course
Page 2: Sk40c Pic 16f877a Crash Course

INTRODUCTION

This short course provides basic

understanding about MPLAB IDE, PIC

digital I/O, PICanalog input and PIC-to-

PC communication using UART protocol.

All you need from installing the required

software until demo of some real life

application will be included. Every single

step will be explained in details and

visualization is included for your ease. By

following this step-by-step guide, you will

find that PIC is very powerful yet simple

to use tool to solve your problem.

Hardware Requirements

1. PC or Laptop with USB Port

2. SK40C 40 Pins PIC Start-Up Kit

3. PIC16F877A

4. USB ICSP PIC Programmer

5. USB to UART UC00A Converter

6. 2510-04 connector

7. Mini USB Cable

8. Breadboard

9. 12V Adapter

10. Male to Male Jumper Wires

11. Resistor 1kΩ 5pcs

12. LEDs 5pcs

13. Potentiometer 1kΩ 1pc

14. DC Motor 1pc

15. Motor Driver 1pc

Software Requirements

1. MPLAB IDE V8.89

2. HITECH C Compiler

3. PICkit 2 v2.61

4. Hyperterminal

Page 3: Sk40c Pic 16f877a Crash Course

BASIC GUIDE TO MPLAB IDE

In this tutorial, we are going to use

MPLAB V8.89 with HI-TECH C compiler

to compile and upload programs to

PIC16F877A.

Install MPLAB IDE

To install MPLAB IDE on your

system, navigate to MPLAB installer

folder and execute the setup.exe file.

Install HI-TECH C Compiler

To install HI TECH C Compiler on

your system, navigate to HI TECH C

Compiler installer folder and execute

the picc_9_83_win.exe file for PIC 10, 12

and 16.

Repeat the same steps on

PICC_18_9_80_win.exe file for PIC 18.

Page 4: Sk40c Pic 16f877a Crash Course

Install PICkit 2 v2.61

To install PICkit 2 v2.61 on your

system, navigate to PICkit installer folder

and execute the setup.exe file.

Create/Open a Project

Double click MPLAB IDE icon on

your desktop to start the program.

Go to Project on the toolbar

Project Wizard…

When a windows appear, click

Next.

Choose PIC16F877A as the type

of device that you want to use and click

Next.

Choose HI-TECH Universal

Toolsuite in Active Toolsuite. HI-TECH

ANSI C Compiler will show up in the

Toolsuite Content.

Choose a destination where the

project you create can be saved and type

the project name. After that, click NEXT>.

Page 5: Sk40c Pic 16f877a Crash Course

Add the existing file(source file,

header file) to the project by selecting the

directory folder where the files are located

and add to the project created. For source

file, it will be *.c file while header file will

be *.h file.

Click Finish.

Or if you have an existing project,

you can open the project from Project

Open File directory Select the

File (*.mcp ) click Open

Edit, Compile And Load

To view the project that you have

created or opened,

click Project View project. Your

project bar should appear.

To edit your source code, double

click on the *.c file under Source Files

After you have edited your code,

you are ready to compile and load it to

your device.

Right click on the project title

choose Build.

Page 6: Sk40c Pic 16f877a Crash Course

In order to load the file to the

device, connect the PIC ICSP programmer

(UIC00A/UIC00B) to the computer and

the device.

You can choose to load from

MPLAB IDE or using PICkit 2

Programmer software.

Load From MPLAB

Go to Programmer Select

Programmer Choose Pickit 2

Go to Programmer> Setting. Tick

the box as below.

Right click on the project title

choose Build. That’s it.

Load From Pickit 2 Programmer

Software

Open the PICkit 2 software. Go

to Tools Check Communication

Go to File Import Hex

Go to the project folder that you

created Choose the *.hex file

Page 7: Sk40c Pic 16f877a Crash Course

Click Write

That’s it. You can repeat to edit,

compile and load until you have achieve

the result you want.

BASIC GUIDE TO SK40C

Board Overview

A – DC power adapter socket for user to

plug in DC adapter. The input voltage

should be in the range of 7 – 15V.

B – USB connector for communication

between SK40C and a host controller. This

function is only valid for certain models of

PIC microcontroller. Please refer

to SK40C User Manual. The power LED

will light ON when USB cable is

connected.

C – Toggle switch to ON/OFF the power

supply from DC adapter.

D – Power indicator LED. It will light ON

as long as the input power is connected

correctly.

E – 2×5 box header for UIC00A

& UIC00B, USB ISCP Programmer.

F – 2 LEDs (connected to RB6 and RB7)

as active High output for PIC MCU. These

LEDs are controllable from PIC MCU.

G – Consist of several line of header pin

and turn pin. Header pin provide connector

for user to solder SK40C to prototype

board and use the I/O of PIC MCU. It is

fully compatible with SK40B. Turn pin

offers a simple way to check voltage with

a multimeter probe. 40 pins of PIC MCU

except OSC (connected to crystal) are

extended out to these pins. There is an

extra pin on top of MCLR which is labeled

as Vin, is connected to the input power.

H – 2x Push Button connected to RB0 and

RB1 of PIC MCU. This is extra input

button for user. It can be programmed as

input switch.

Page 8: Sk40c Pic 16f877a Crash Course

I – Reserved for UART communication.

Tx and Rx pin of SK40C are connected to

RC6 and RC7 respectively. Ensure PIC

user have the correct UART pin (RC6 and

RC7).

J – Reset button for PIC MCU.

K – 5KΩ trimmer for LCD contrast.

L – JP8 for LCD backlight. LCD Display

will have backlight if this pin is shorted.

M – JP9 is for USB. Connect this pin to

use USB port.

N – 40 pin IC socket for user to plug in

any 40 pin PIC MCU(8Bit). It can be

either 16F or 18F PIC. Of course the IC

package should be PDIP. Please ensure the

first pin is at the top side.

O – Turn pins is provided for crystal.

20MHz is the default crystal provided in

SK40C. The 20MHz crystal can be replace

with other value. Just remove and plug a

new crystal on the turn pin. No soldering

required.

P – Reserved for 2 x 16 LCD. User may

solder the LCD here if it is needed.

2 X 16 Parallel LCD Connection Pin

(Label P)

Turn Pin For Crystal (Label O)

Push Button Pin (Label I)

UART PIN (Label H)

Page 9: Sk40c Pic 16f877a Crash Course

Hardware Setup

To start, plug the PIC16F887 into

the socket that have been provided. Make

sure the PIC MCU is correctly placed in

the SK40C board. The PIN 1 is just next

to the little half moon shape or circle.

Next, connect the A-type USB to

the PC.

After that, plug in the USB (mini)

to UIC00B. The power supply indication,

green LED will light ON.

Finally, connect one side of the

programming cable to the box header of

UIC00B and the other side to the box

header of SK40C (Target device) to upload

the code. Make sure that external power

(DC adapter or battery) for SK40C is

provided when uploading.

I/O Port

The input and ouput (I/O) of the

PIC can be accessed through few methods

such as using jumper wire, plugging on to

a breadboard or soldering it on a donut

board or strip board.

Page 10: Sk40c Pic 16f877a Crash Course

PROJECTS

Digital Output

Light Emitting Diode (LED)

Project 1 : Simple LED Blinking

In this project, we are going to do a

simple LEDs blinking using the LEDs on

SK40C. Here, we are using both of the

LEDs and blink it like a police

car. Besides on learning electronic parts,

you will also learn about some coding in C

using HI-TECH C in MPLAB.

Component Needed

LEDs on SK40C

Connection

For this project, the LEDs was

already connected to the pins RB6

(PORTB.6) and RB7 (PORTB.7). So, you

only have to configure the I/O pins as an

output in programming part. To program

the PIC16F887, connect the UIC00B to the

ICSP Programmer. Make sure the power

connection is correct and ON for SK40C.

Open MPLAB and include the Project_1.c

and click to compile and build .HEX file.

After “Build Successful”, the

PICKit 2 should automatically run and

program the .HEX file into PIC16F887.

Finally, the LED1 and LED2 will be blink

like the police car.

Code Overview

__CONFIG ( 0x3F32 );

The configuration 0x3F32 used to

configure the PIC. 0x refers to

Hexadecimal whereas 3F32 means:

• Set the oscillator as high speed

• Off the watchdog timer

• On power timer

• Off brown out detect

• Disable low voltage program

• Off data EE read protect

• Off flash program write

system.h

Page 11: Sk40c Pic 16f877a Crash Course

#define _XTAL_FREQ 20000000

Besides that, same step by #define the

crystal frequency (_XTAL_FREQ)

according to your external crystal

frequency using. In here, the default

external crystal frequency using are

20000000 (20MHz).

#define SW1 RB0

Here, we have already define the switch on

SK40C board as RB0. User are no need to

define again in the main coding.

#define LED1 RB6

#define LED2 RB7

Using the code #define, we can replace the

RB6 and as LED1 and RB7 as LED2. By

doing this, we can easily remember I/O

port we are using.

#define LCD_E RB5

#define LCD_RS RB4

#define LCD DATA PORTD

Besides that, user are not required again to

define the LCD pin for SK40C. User only

required to include the system.h file.

Further detail on LCD please refer to

Project_3.

#define TX RC6

#define RX RC7

User are not required again to define the

serial comunication (UART) pin for

SK40C. User only required to include the

system.h file. Further detail on UART

please refer to Project_6.

void delay_ms(unsigned int ui_value);

Function prototype is the declaration of a

function that omits the function body but

does specify the function’s name,

argument types and return type.

Main Program

void main (void)

Figure above shows the main program. 1st

we have to type “void main(void)” at the

1st line to tell the micro-controller that this

is the starting point of the program.

Here, void main, tell the compiler the

name of the function which is main and it

does not return any data (void).

PORTA = 0;

Clear PORT A.

TRISA = 0b00000000;

is the Tri-STATE Register that declare the

I/O ports as an INPUT or OUTPUT by

(1=INPUT) and (0=OUTPUT). E.g.

TRISB = 0b00001111 is to set the

PORTB<7:4> to OUTPUT and

PORT<3:0> as INPUT.

LED1 = 0;

Then, we turn off the LED1 by giving it a

0 at initial state as shown above. So as the

LED2 too. To make it on, just change the 0

to 1.

Page 12: Sk40c Pic 16f877a Crash Course

while(1)

To make the program loop forever, we use

while (1) function. while construction

consists of a block of code and a condition.

The condition is evaluated, and if the

condition is true, the code within the block

is executed. Here, we put (1) to indicated

that the condition is true.

delay_ms(100);

is a function call is an expression

containing a simple type name and a

parenthesized argument list. The argument

list can contain any number of expression

separated by commas. It can also be

empty. In here, we put the arguments list

as 100 which is 100ms.

Comment line //

In the code, we can found the // on

the right hand side of the code. The // is

simply a comment in the code and is

ignore by the compiler. Any code that

behind the // is ignore by compiler and is

just simply there for you, or everyone to

reads the code. Comments are essential in

the code to help you to better

understanding on what going on and how

the code works. Comments can be put after

the command as in the next line of the

program.

On the other hand, you can also put

comments into the block statement by

using /* and */.

E.g.:

/* All the code within the slash and

asterisks will be ignore by compiler */

void delay_ms(unsigned int ui_value)

is an function that will be call and perform

in the main function. “void delay_ms”,

here we are telling the compiler that out

function's name is delay_ms and it does

not return any data (void).

(unsigned int ui_value)

is the parameter use to insert value

depending to our requirement. “int” mean

integer which the minimum allow range

are between -32767 to +32767 (2 Bytes).

“unsigned int” mean that the data we can

insert is between 0 to 65535.

while (ui_value-- > 0)

in this condition, if the ui_value is subtract

by one at the time and check if the

ui_value is still greater than 0. The code

within the while loop will be running for

many times until the ui_value is less than

0.

_delay_ms(1);

This is the macro from HI-TECH compiler

which will generate 1ms delay base on

value of _XTAL_FREQ.

Page 13: Sk40c Pic 16f877a Crash Course

Project 2 : LED Running

In project 2, you are about to

experience how to program an LED

running. Here, we are going to use total of

5 LEDs and will connected with a current

limiting resistor before plug into the I/O

port.

Component Needed

5 x 1kΩ Resistor

Breadboard

Jumper Wires

5 x LEDs

Connection

Connect the cathode (-ve) of all

LEDs to 1kΩ Resistors and end of

resistors are connected to the PORTA.0

until PORTA.4. On the other hand, the

anode (+ve) of all LEDs are connected to

the VDD (Power Supply).

The 1kΩ Resistors' function are to

limit the current going through them to a

safe value. So that it can protect the LEDs

from damage.

Additional Information

Light Emitting Diode (LED)

There are few method to determine

the anode and cathode side of the LED

such as :

1. The flat spot on the lens/case of the

LED is cathode.

2. The short lead (or leg) is cathode.

3. The flag symbol inside the lens is

cathode.

Resistor Colour Code

Breadboard Overview

Page 14: Sk40c Pic 16f877a Crash Course

Figure above shows that the connection of

half of the breadboard. The RED and

BLACK colour line are usually been

connect to power supply (VDD) and

ground (GND). They are connected all the

way from the beginning to the end but they

did not connect to each other.

Besides that, the orange colour line

are the part that we usually use to place the

electronic component. They are connected

in a straight line.

There is a gap in the middle of the

breadboard which are not connected to

anything. This allow you to put integrated

circuit across the gap and have each pin of

the chip go to the different set of holes and

therefore a different rail.

Code Overview

#define ex_LEDs PORTA

Using the code #define, we can replace

PORTA by ex_LEDs so that we can easily

remember the I/O port we are using.

ex_LEDs = 0b00011111;

LEDs anode are connected to VDD at

while their cathode are connected to the

PORTA.0 until PORTA.4. So it means that

to ON the LEDs, we need to give it a

LOW bit (0). To OFF the LEDs, just

simply give a HIGH bit (1) to LED1.

Our main program are start with a while

loop so that it can stay running non-stop.

Liquid Crystal Display (LCD) - Project

3 : “SK40C FKM UMP” With Parallel

LCD

For project 3, we will show you

how to interface the SK40C board will

parallel 16×2 LCD display. The

connection are simple and the coding are

easy to learn. We are going to display the

“SK40C FKM UMP” on the LCD display

by just adding a library that has been done

for you.

Component Needed

16 x 2 LCD Display

Connection

SK40C offers user an extra

connecter to directly plug in the LCD

display. User may saves a lot of time from

soldering the LCD display.

The data pin of the LCD are connected to

the PORTD while the RS of LCD are

connected to RB4 and E of LCD are

connected to RB5. Please refer to SK40C

user manual for further information.

Page 15: Sk40c Pic 16f877a Crash Course

Additional Information

Liquid Crystal Display

Before start program the LCD, we

need to know the function of each pin on

the LCD display to avoid wrong

connection.

RS – LOW (0), data bytes transfer are

treated as command.

HIGH (1), character can be transfer

to and from module.

R/W – LOW(0), write command or

character data to the module.

HIGH(1), read character data or

status information from its registers.

E – HIGH(1) to LOW(0), writing to

display.

LOW(0) to HIGH(1), reading from

display.

D0 to D7 – Eight data bus line.

There are numbers of cool experiment

inside the LCD datasheet which teach us

how to entering the text, addressing,

shifting the display, character entry mode,

user-defined graphic and 4-bits data

transfer.

LCD Backlight Control

To make your LCD looks cool, we can ON

the backlight of the LCD by just put a mini

jumper or solder to short LCD B/L.

LCD Contrast Control

There is a potential meter which is

purposely added to enable user to adjust

the different contrast of LCD. Turn left or

right to adjust the contrast level.

Code Overview

Figure above shows that we have

included an lcd.h and system.h file inside

our main program. The reason we doing

this is to separate our code in different file

and for to easily relocate back by user if

Page 16: Sk40c Pic 16f877a Crash Course

there is any error. To refer back to the

LCD program, all we need is double-click

the lcd.c and it will show up.

What’s inside “lcd.c” & “lcd.h” ?

Inside lcd.c, all the code that needed to

control the LCD have been defined such as

the coding in figure below:

lcd.h is one of header files. These

files allow programmers to separate certain

elements of a program’s source code into

reusable files. Header files commonly

contain forward declarations of classes,

subroutines, variables, and other

identifiers. Programmers who wish to

declare standardized identifiers in more

than one source file can place such

identifiers in a single header file, which

other code can then include whenever the

header contents are required.

system.h

In system.h, a name to a port has been

given using #define. Besides from defining

the crystal frequency, here, the PORT that

required to use by LCD which is RB4,

RB5 & PORTD have been defined too.

lcd_initialize();

Before we start to send any data to LCD,

the LCD should be initialized 1st. The

initialization process are such as, clear

LCD display, cursor home, cursor on/off,

display/cursor shift and function set.

lcd_home();

To make sure that the cursor is back to

home. We need to send a command for it

which is in binary 00000010.

lcd_putstr(“SK40C FKM UMP”)

Send a string to LCD data bus to display it

on the screen. The symbol “” means what

the word or text inside are in ASCII

format. The compiler will automatically

convert it to binary and send to the

required port. Finally the texts SK40C

FKM UMP will be displayed on the

screen.

Digital Input - Project 4 : Push

Button

For this project, we will discover

how to manage a digital input signal.

Digital signal is either HIGH (1) and LOW

(0) only. But for different integrated circuit

such as PIC MCU, we need to define at the

beginning of the code that the port using

are either input or output and also

declaration for digital or analog signal

send and received.

Component Needed

LEDs on SK40C

Push Button on SK40C

Page 17: Sk40c Pic 16f877a Crash Course

Connection

There is no need to connect extra

push button to SK40C board because

inside SK40C, there is already have 2 push

button on board which is purposely

prepared for user to use it. These push

button are already connected to RB0 and

RB1.

So all we need to do is just declare

these 2 ports as INPUT. As for the

OUTPUT, we use the on board LEDs to

show us that we have push the push

button. The LEDs are connect to RB6 and

RB7. To use the LEDs, we need to declare

it as an OUTPUT.

Additional Information

Besides on using the push button

on SK40C, we can use others component

to replace it such as limit switch, keypad

and etc. Referring to the figure below,

input signal read at HIGH are between

3.5V to 5V and while LOW are read

between 1.5V to 0V.

For output of the external device

are giving the digital value of HIGH at

between 4.95V to 5V and LOW at between

0.05V to 0V. As long as the logic input

and output voltage are within this level, the

PIC MCU can read it without any

conversion.

On the other hand, by adding an

additional switch to the PIC16F887, the

switch have to be pull-up because some

port do not have this pull-up function.

Besides the pull-up resistor, there is also

pull-down resistor as shown in the picture

below.

In this project, we do not employ

any additional push button.

Code Overview

Page 18: Sk40c Pic 16f877a Crash Course

PORTA = 0;

We clear PORTA so that it won’t affect

Tri-State Register (TRIS).

TRISB = 0b00000011;

Push buttons is connected to RB0 to RB2.

To make in as an input, we have set

HIGH(1) to TRISB.0 and TRISB.1. The

rest are declared as output port.

ADCON1 = 0b00000110;

ADCON1 is an ADC register for PORTA.

To make it DIGITAL I/O, we need to set

ADCON1 as shown above.

while (SW1 == 0)

check whether the switch 1 is LOW(0). If

it does then do the following code which is

blink the LED1 and loop forever. The

symbol == is usually use to represent the

signal in digital. While = is usually use to

represent the signal in analog.

Analog Input - Project 5 :

Potentiometer

In this part, we are going to discuss

about how to write the Analog to Digital

Converter code which has become the

most popular question among the students.

We are going to use PIC16F887A which

provides 10-bits binary result and a

potentiometer to adjust the voltage

different and display it in the LCD display.

Component Needed

16 x 2 LCD Display

Potentiometer (5kΩ)

Breadboard

Jumper Wires

Connection

The connection for the potentiometer

is very easy. Just connect one end

to VDD and another end to GND while the

middle pin is connected to RA0. By

referring to the PIC16F887A, there are

total 8 analog pins that we can choose.

Here we use RA0 as our ADC input pin.

Additional Information

ADC enable the microcontroller to

recognize, not only whether a pin is driven

to logic zero or one (0 or +5V), but to

precisely measure its voltage and convert it

into a numerical value, i.e. digital format.

So, here are the steps to configure the

ADC and carry out the conversion:

1. Decide which pins need to be

analogue, which pins need to be

digital and which (if any) need to be

configured as reference pins.

Page 19: Sk40c Pic 16f877a Crash Course

2. Select the appropriate settings for

PCFG[3:0] in ADCON1.

3. Select ADC module conversion clock

by setting ADCS[2:0] in ADCON1

and ADCON0.

4. Select justification method – left-

justification or right-justification by

setting/clearing ADFM in ADCON1.

5. Turn on ADC module by setting

ADON to 1 in ADCON0.

6. Select which channel is to be

sampled/measured and converted by

setting CHS[2:0] in ADCON0.

7. Wait the required acquisition time.

8. Start conversion by setting GO/DONE

to 1 in ADCON0.

9. Check if conversion is over by

checking if GO/DONE has been

cleared to 0.

10. If conversion is over, read the results

from ADRESH:ADRESL.

Code Overview

ADC Configuration

ADSC2 = 0;

ADCS1 = 1;

ADCS0 = 0;

ADCS is the A/D Conversion Clock select

bits. In here we have selected the

conversion clock as Fosc/32. Which the

Fosc using are 20MHz to produce a period

of 1.6us for an accurate ADC conversion.

PCFG3 = 1;

PCFG2 = 1;

PCFG1 = 1;

PCFG0 = 0;

are port configuration in ADCON1 register

to set RA0 as analog while RA1 until RA7

as digital.

ADFM = 1;

ADFM is the conversion result format

select bit. Here, we give a value 1 to

configure it as an Right Justified. If

value 0 is given, the format are in Left

justified.

ADON = 0;

ADON is the ADC enable bit. If the

ADON is 0, the ADC is OFF. While if the

ADON is 1, the ADC is ON.

ADC Read

unsigned int pot = 0;

Initialize and make the “pot” as a 0 value

at the every time the code jump into this

subroutine.

__delay_ms(1);

The purpose of the 1ms delay in here is to

wait the holding capacitor in ADC module

to fully charge.

GO_DONE = 1;

Page 20: Sk40c Pic 16f877a Crash Course

After the A/D Conversion started, set this

register and wait it to become LOW(0)

which mean that it’s has done the

conversion.

pot = (unsigned int) ADRESH << 8;

After conversion is done, the value of

ADRESH is transferred to pot and shifted

LEFT by 8 bits.

E.g.: ADRESH = 0000 0011

(unsigned int 1 byte)

pot = ADRESH = 0000 0011

(unsigned int 1 bytes)

ADRESH = 0000 0011 0000 0000 (<< 8 )

pot = pot + ADRESL;

Finally, the value in pot will be added with

ADRESL.

E.g: pot = 0000 0011 0000 0000

ADRESL = 1111 1111

Final pot result = 0000 0011 1111 1111

LCD & ADC Initialize

Before the main code start running,

we need to initialize LCD and ADC.

Main Program : Potentiometer

CHS2 = 0;

CHS1 = 0;

CHS0 = 0;

Analog channel select bit which is

use to select the analog port we are using.

In this case we are using the RA0. By

referring to the datasheet, RA0 is on the

CHS<2:0> = 000;.

for(i=0 ; i<10 ; i++)

adc_value = adc_value + ui_adc_read();

In this case, the values of ADC have been

taken and add together for 10 times.

adc_value = adc_value/10;

After the adc_value is been added by 10

times. It is divided by 10 to get the average

value. The purpose is to get a more

accurate value.

lcd_bcd(4,adc_value);

Convert the ADC output value in BCD and

display it in LCD. Here, we have limit it to

display maximum 4 digit only.

Page 21: Sk40c Pic 16f877a Crash Course

volt_value = (adc_value*50)/102.4;

To display the voltage of the analog. We

need to convert the digital value in the

output of the ADC by applying the

formula.

E.g. : If adc_value is 1022 (decimal)

1022*50 = 51100.

51100/102.4 = 499 (volt_value)

UART

Project 6 : UART To Computer

Universal Asynchronous Receiver

Transmitter (USART) has becoming a

popular item on sending and receiving data

in the fast way. For PIC16F877A, USART

can be configured to transmit and receive

data either in synchronous or

asynchronous. Here, we are going to

experience on how to use UC00A to

communicate with our computer/PC and

SK40C using synchronous method

(UART).

Component Needed

16 x 2 LCD Display

USB to UART Converter

Hyperterminal Installer

Jumper Wires

Connection

To interface between UC00A and SK40C

required only 4 wires connection which is

power supply (VDD), ground(GND),

transmit(TX) and receive (RX). For serial

communication, the transmit and receive

for UC00A and SK40C have to be

connected in duplex. Please refer figure

below and UC00A datasheet.

Additonal Information

Wires in PIN1 and PIN2 are switch for the

second connecter.

Page 22: Sk40c Pic 16f877a Crash Course

Hyperterminal Installation

Open hypertrm.exe. Next, LOCATION

INFORMATION will pop up like figure

below. Then, click CANCEL until you see

the CONNECTION DESCRIPTION.

Enter a project name then click OK.

Choose the suitable COM port by referring

to the DEVICE MANAGER.

Setting up the COM PROPERTIES as

shown in figure below:

Go to FILE > PROPERTIES > SETTING

> ASCII SETUP and tick like figure

below. After that, the HyperTerminal is

ready to go.

Page 23: Sk40c Pic 16f877a Crash Course

Code Overview

uart_putstr(“Ready To Receive &

Transmit!!”)

Send a string of ASCII through UC00A

and display on HyperTerminal to tell the

computer that SK40C is ready.

for(i=0 ; i<32 ; i++)

if (i == 15) lcd_2ndline();

else if (i == 31) lcd_home();

This loop count and make sure that the

word are displayed on LCD. This is to

make sure that every word displayed can

be seen which is for 1st line LCD address

are from 0×00 until 0x0F and for 2nd

line

LCD address are from 0×40 until 0x4F. If

“i” counted 15, it automatically shift the

cursor to 0×40 and when “i” counted 31, it

back to 0×00.

uc_uart_receive();

Receive the data from computer.

data = RCREG;

Store the bytes of data receive in “data”.

lcd_putchar(data);

end the data received to LCD which

sending the 1 to telling the LCD that the

data is a character. The data received from

the computer are in ASCII, so there was no

need any conversion.

Project 7 :DC Motor GUI Control Panel

Introduction

DC Motor GUI Control Panel able

to use for control DC motor via SK40C

and UC00A USB to UART converter. This

GUI Control panel able to activate and

deactivate dc motor.

Installation Software:

1. Double click setup and waiting

the Control Panel will pop out as

following figure:

Page 24: Sk40c Pic 16f877a Crash Course

Connection

Connect the circuit as shown in the figure

above. D1 until D4 is IN4001.

Code Overview

define functions to turn on and turn off DC

motor. The functions is very simple. To

turn ON DC motor, set RB5 = 1, RB6 = 1

and RB7 = 0. Additionally, you can simply

change the direction of motor rotation by

swap RB6 and RB7. To turn off DC

motor, simply set RB5 = 0.

main program: