Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

MICROCONTROLLERS

CHAPTER 2
BASIC I/O

Dr. Vo Tuong Quan

HCMUT - 2011
Basic I/O Functions
Basic I/O functions
PVN1 R4 D3
RESET 1 33 B1 B1
MCLR*/VPP RB0/INT B2

•Output
34
2 RB1 35 B3 R5 D4
3 RA0/AN0 RB2 36 B4 B2 R LED
4 RA1/AN1 RB3/PGM 37 B5
5 RA2/AN2/VREF-/CVREF RB4 38 B6 R6 D5

(Low/High) 6 RA3/AN3/VREF+ RB5 39 B7 B3 R LED


7 RA4/T0CKI/C1OUT RB6/PGC 40 B8
RA5/AN4/SS*/C2OUT RB7/PGD R7 D6

•Input
15 19 B4 R LED
16 RC0/T1OSO/T1CKI RD0/PSP0 20
17 RC1/T1OSI/CCP2 RD1/PSP1 21 R8 D7
18 RC2/CCP1 RD2/PSP2 22 B5 R LED
23 RC3/SCK/SCL RD3/PSP3 27

(Low/High) 24
25
26
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
28
29
30
B6
R9
R
R10
D8
LED
D9
OSC1 13 B7 R LED
OSC1/CLKIN 8
RE0/RD*/AN5 9 R11 D10
RE1/WR*/AN6 10 B8 R LED
OSC2 14 RE2/CS*/AN7
OSC2/CLKOUT
12 11 Vcc R LED
31 VSS VDD 32
VSS VDD 0
PIC16F877A
0

R2 D1
C1
Vcc

OSC1
1K

+
LED
J1A
R3 D2 R1 22p Y1
1A Vcc RESET
2A C2 20MHz
1K LED 10K OSC2

+
0
Nguon DC5V
SW1 22p
0

2
 2011 – Vo Tuong Quan
#include <16f877a.h>
Basic I/O Functions
#use delay (clock=20000000)
#fuses hs,nowdt,noput,nolvp TrisX = 0  Output
#byte portB=0x06 TrisX = 1  Input
//#byte TrisB=0x86
void led()
{int a,i;
{a=0x01;
for (i=1;i<=8;i++)
{output_b(a);
//portB = a;
a=a<<1;
delay_ms(50);
}}}
void main()
{set_tris_b(0);
//TrisB = 0;
while(1)
{
led();
}} 3
 2011 – Vo Tuong Quan
Basic I/O Functions
Some popular functions in CCS-C
•#include < > or #include ‘ ‘ //Declare the mcu
•byte id = x // Ex: byte PortB = 0xC6;
•define id text //Ex: define a 1234567
•#use ‘function name’(parameters) //#use delay (clock = 20M)
•delay_cycles(a)// a: instruction cycle
•delay_us(a)
•delay_ms(a)
•output_low(pin)
•output_high(pin)
•Output_X(value) //output 1 byte to X port on MCU
•input(pin)
•input_X(value) //input from X port on MCU
•Set_tris_X(value)//X: name of port on MCU
4
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control the 7 segment Leds

A
B

A
B

A
B

A
B

E
F

C
D

C
D

C
D

C
D
10

10

10

10
1
2
4
5

6
7
9

1
2
4
5

6
7
9

1
2
4
5

6
7
9

1
2
4
5

6
7
9
PVN1
RESET 1 33 A D1 D2 D3 D4

A
B

A
B

A
B

A
B

E
G

G
F

DOT

F
C
D

DOT

F
C
D

DOT

F
C
D

DOT
C
D
MCLR*/VPP RB0/INT 34 B
2 RB1 35 C
3 RA0/AN0 RB2 36 D
4 RA1/AN1 RB3/PGM 37 E
5 RA2/AN2/VREF-/CVREF RB4 38 F
6 RA3/AN3/VREF+ RB5 39 G
7 RA4/T0CKI/C1OUT RB6/PGC 40
RA5/AN4/SS*/C2OUT RB7/PGD
15 19
16 RC0/T1OSO/T1CKI RD0/PSP0 20
RC1/T1OSI/CCP2 RD1/PSP1

Vcc

Vcc

Vcc

Vcc

Vcc

Vcc

Vcc

Vcc
17 21
18 RC2/CCP1 RD2/PSP2 22
23 RC3/SCK/SCL RD3/PSP3 27 LED4
24 RC4/SDI/SDA RD4/PSP4 28 LED3

8
25 RC5/SDO RD5/PSP5 29 LED2
26 RC6/TX/CK RD6/PSP6 30 LED1
RC7/RX/DT RD7/PSP7
OSC1 13 R8 R9 R10 R11
OSC1/CLKIN 8 Q5 Q6 Q7 Q8
RE0/RD*/AN5 9

LED4

LED3

LED2

LED1
RE1/WR*/AN6 10 R R R R
OSC2 14 RE2/CS*/AN7
OSC2/CLKOUT
12 11 Vcc R4 R5 R6 R7
31 VSS VDD 32 R R R R
VSS VDD
PIC16F877A
0
Vcc

R2 D1
C1
OSC1
1K

+
LED
R3 D2 R1 22p Y1
Vcc Vcc RESET
C2 20MHz
1K LED 10K OSC2

+
0
SW1 22p
0

5
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control the 7 segment Leds (Cont’d)
void hienthi()
#include <16F887a.h>
{
#use delay (clock=20M)
output_b(led7[donvi]);
#fuses hs,nowdt,noput,nolvp
output_d(0x7f);
unsigned char led7[10] = {0xC0,0xF9,0xA4,
delay_us(50);
0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
output_d(0xff);
int16 i, a, dem;
output_b(led7[chuc]);
int8 donvi, chuc, tram, nghin;
output_d(0xbf);
void hex_bcd()
delay_us(50);
{nghin=a/1000;
output_d(0xff);
a=a%1000;
output_b(led7[tram]);
tram=a/100;
output_d(0xdf);
a=a%100;
delay_us(50);
chuc=a/10;
output_d(0xff);
donvi=a%10;
output_b(led7[nghin]);
}
output_d(0xef);
delay_us(50);
output_d(0xff);
}
6
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control the 7 segment Leds (Cont’d)
void main()
{
set_tris_b(0x00);
set_tris_d(0x00);
output_b(0x00);
output_d(0xff);
dem=0;
while(1)
{a=dem;
hex_bcd();
hienthi();
dem=dem+1;
if(dem==10000)
{dem=0;
}}}

7
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control Button Matrix and LCD
PVN1
RESET 1 33 D0
MCLR*/VPP RB0/INT 34 D1
RB1

DEN NEN
2 35 D2

Vcc
3 RA0/AN0 RB2 36 D3
4 RA1/AN1 RB3/PGM 37 D4
5 RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RB4
RB5
38 D5
D6
LCD 16x2 R12
6 39 U1 Chinh do sang
7 RA4/T0CKI/C1OUT RB6/PGC 40 D7 LCD

VDD

VEE

VSS
RA5/AN4/SS*/C2OUT RB7/PGD

RW
RS
R8

D0
D1
D2
D3
D4
D5
D6
D7
A

K
RS 15 19 RD0 R
RW 16 RC0/T1OSO/T1CKI RD0/PSP0 20 RD1
RC1/T1OSI/CCP2 RD1/PSP1

15

10
11
12
13
14

16
E 17 21 RD2

7
8
9

4
5
6
3

1
18 RC2/CCP1 RD2/PSP2 22 RD3
23 RC3/SCK/SCL RD3/PSP3 27 RD4

Vcc

D0
D1
D2
D3
D4
D5
D6
D7
24 RC4/SDI/SDA RD4/PSP4 28 RD5 Q1

RW
RS
25 RC5/SDO RD5/PSP5 29 RD6

E
26 RC6/TX/CK RD6/PSP6 30 RD7
RC7/RX/DT RD7/PSP7
OSC1 13
OSC1/CLKIN 8 DEN NEN
RE0/RD*/AN5 9
RE1/WR*/AN6 10 0
OSC2 14 RE2/CS*/AN7 RD4
OSC2/CLKOUT
12 11 Vcc RD5
31 VSS VDD 32
VSS VDD RD6
PIC16F877A
RD7
0 SW2 SW3 SW4 SW5

R4
Vcc RD0 RD0 NUT 0 NUT 1 NUT 2 NUT 3
R SW6 SW7 SW8 SW9

R5
RD1 RD1 NUT 4 NUT5 NUT6 NUT 7
R SW10 SW11 SW12 SW13

R6
RD2 RD2 NUT 8 NUT 9 NUT A NUT B
R SW14 SW15 SW16 SW17

R7
RD3 RD3 NUTC NUT D NUT E NUT F
R

R2 D1
C1
OSC1
1K

+
LED
R3 D2 R1 22p Y1
Vcc Vcc RESET
C2 20MHz
1K LED 10K OSC2

+
0
SW1 22p
0

0
8
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control Button Matrix and LCD
(Cont’d)

•LCD code
table

9
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control Button Matrix and LCD (Cont’d)
#include<16F877A.h>
#use delay (clock=20M)
#fuses hs,nowdt,noput,nolvp
#byte portB=0X06
#byte portC=0X07
#byte portD=0X08
#define RS pin_c0
#define RW pin_c1
#define E pin_c2
unsigned char DIG[]={'K','I','E','M',' ','T','R','A',' ','P','H','I','M','4','x','4','#'};
int a=0;
void truyenlenh()
{
output_low(RS);
output_low(RW);
output_high(E);
delay_ms(5);
output_low(E);
delay_ms(5);} 10
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control Button Matrix and LCD (Cont’d)
void du_lieu() void main() output_b(0xC0);
{ { truyenlenh();
output_high(RS); output_b(0x38); delay_ms(5);
output_low(RW); truyenlenh(); output_d(0xff);
output_high(E); output_b(0x0E); while(true)
delay_ms(5); {
output_low(E); truyenlenh(); portd = 0B11111110;
delay_ms(5); output_b(0x80); delay_ms(1);
} truyenlenh(); if(input(pin_d4)==0)
while(DIG[a]!='#') {
portB = 0x30;
{ du_lieu();
portB=DIG[a]; delay_ms(1);
du_lieu(); while(input(pin_d4)==0);
delay_ms(5);
a++; }
}

11
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control Button Matrix and LCD (Cont’d)
if(input(pin_d5)==0) portd = 0B11111101; if(input(pin_d6)==0)
{ delay_ms(1); {
portB = 0x31; if(input(pin_d4)==0) portB = 0x36;
du_lieu(); { du_lieu();
delay_ms(1); portB = 0x34; delay_ms(1);
while(input(pin_d5)==0); du_lieu(); while(input(pin_d6)==0);
} delay_ms(1);
if(input(pin_d6)==0) while(input(pin_d4)==0); }
{ if(input(pin_d7)==0)
portB = 0x32; } {
du_lieu(); if(input(pin_d5)==0) portB = 0x37;
delay_ms(1); { du_lieu();
while(input(pin_d6)==0); OUTPUT_B(0X35); delay_ms(1);
} du_lieu(); while(input(pin_d7)==0);
if(input(pin_d7)==0) delay_ms(1);
{ while(input(pin_d5)==0); }
portB = 0x33;
du_lieu(); }
delay_ms(1);
while(input(pin_d7)==0);
} 12
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control Button Matrix and LCD (Cont’d)
portd = 0B11111011; while(input(pin_d6)==0);
delay_ms(1); }
if(input(pin_d4)==0) if(input(pin_d7)==0)
{ {
portB = 0x38; portB = 'B';
du_lieu(); du_lieu();
delay_ms(1); delay_ms(1);
while(input(pin_d4)==0); while(input(pin_d7)==0);
} }
if(input(pin_d5)==0)
{
portB = 0x39;
du_lieu();
delay_ms(1);
while(input(pin_d5)==0);
}
if(input(pin_d6)==0)
{
portB = 'A';
du_lieu();
delay_ms(1); 13
 2011 – Vo Tuong Quan
Basic I/O Functions
Example: Control Button Matrix and LCD (Cont’d)
portd = 0B11110111; if(input(pin_d6)==0)
delay_ms(1); {
if(input(pin_d4)==0) output_b('E');
{ du_lieu();
portB = 'C'; delay_ms(1);
du_lieu(); while(input(pin_d6)==0);
delay_ms(1); }
while(input(pin_d4)==0); if(input(pin_d7)==0)
} {
if(input(pin_d5)==0) portB = 'F';
{ du_lieu();
portB = 'D'; delay_ms(1);
du_lieu(); while(input(pin_d7)==0);
delay_ms(1); }}}
while(input(pin_d5)==0);
}

14
 2011 – Vo Tuong Quan

You might also like