Top Banner
10 กก กกก !" www.Adisak51.com
71

(Q12 หน่วยทีุ่10 น325 น403)

Oct 16, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: (Q12 หน่วยทีุ่10 น325 น403)

10 ก ก

ก กกก

!" www.Adisak51.com

Page 2: (Q12 หน่วยทีุ่10 น325 น403)

258

ก : www.Adisak51.com

1. ก!"#$%"&& LCD LCD (Liquid Crystal Display) ?@ก "ABกCD"E BF DกG DH IJ K@ก D!I!JA !AกAB B !HLF LCD ! ก? 2 JAMN! O P Dot Matrix (Text) ?DกG KEDกD! กD@!"PกAB ! Graphic W Bit-Map B J D! O BDDB ก 1.1 #ก&* LCD AI LCD !กMก 3 ! F 1.1.1 DH (Display) JA?LกMW AMBM[B KกJก FKL DB @Aก HBI " LCD 1.1.2 D@ (Controller) ?DHBIKก@กJกE@กE H I LCD ! KJ DกGMP] ?DB D@KAB ]^ ! HD44780 KEMB"@ LCD กH ! HD61830 K@ LCD กCdก 1.1.3 DH (Driver) ?DNNKกD@ EAMBก HBID"กEM Bก! HD44100 MSN5259 I LCD Dot Matrix H 20 DกG 2 J " 10.1 @ก! HBIH 8 D MB"H HNN iAกE H HNN D " 10.1

+ , 10.1 กKH LCD Dot Matrix H 20 DกG 2

Page 3: (Q12 หน่วยทีุ่10 น325 น403)

259

ก : www.Adisak51.com

10.1 MB"H HNND! O H LCD

1.2 "ก ** LCD

H 1, 2 D!HBกM! K!C +5 D H 3 ABEMHBH LCD H 4 (RS) ?HNN @DEMกEM!HBI"HBKก DB0-DB7 ?HBI (DATA) MP?@E" (Instruction) RS Kก n1o ?HBIEMก RS Kก n0o ?@E" EM@กE H D LCD H 5 (R/W) ?HNNEMกEMก!MPHHBI AMBกD LCD R/W Kก n1o MWL D@KกJกDB ก HBI"WIก JH D LCD KกHNN DB0-DB7 (LCD W WH D AMBD@JกB) WB R/W Kก n0o MWL D@KกJกDB ก! HBIAMBก LCD ! HNN DB0-DB7 ]L" HBI"! AMB LCD HLFI!กH RS B!?@E" MP?HBIEMก H 6 (E) ?HNN @D กEMAMB LCD D กD@KกJก H 7-14 (DB0-DB7) ?HNN MP! HBIM! LCD กD@Jก 1.3 / #0&ก * LCD กHMP!HBIก LCD ?กกEMAMB LCD ED P"HD! O K@E" AMB LCD HBMPIJ DกEMB F 1.3.1 E" D (Clear Display) ?E" HBID! O E" ? 01H กHHBI"I!A DDRAM AMB?

Page 4: (Q12 หน่วยทีุ่10 น325 น403)

260

ก : www.Adisak51.com

HB"! ! EAMBK LCD WIกM ! AMB CURSOR I!"DEM! กH K LCD (DEM! ]B@)

1.3.2 E" Return Home ?E" ! CURSOR DEM! ]B@ DB กEMAMB DB1 ? n1o ?E" กEMAMB DDRAM ADDRESS ? Ø PI!DEM! ก@ ! AMB CURSOR I!"DEM! ]B@H K LCD HBIK !"

1.3.3 E" PกMกvHBI (Entry Mode Set) ?E" กEMDEM! H CURSOR AH" LCD HB กEMWH D I/D S ก!"กHHBIA DDRAM DB !ABE" CLEAR DISPLAY I/D = n0o H CURSOR DEM! H DDRAM ? "HLF I/D = n1o H CURSOR DEM! H DDROM ? S = n0o CURSOR KP"D H กกEM! I/D S = n1o CURSOR KI!ก" D!DกGKP"D H กกEM I/D !E" 06H กHBIAM! ]P" HP DDRAM "HLF

1.3.4 E" @ก (Display ON /OFF)

D = n0o dK D = n1o dK C = n0o ! ] C = n1o ]?HADBDกG B = n0o ]!ก B = n1o ]ก ?I"M" !E" 0CH กEMAMBdK ! ]

Page 5: (Q12 หน่วยทีุ่10 น325 น403)

261

ก : www.Adisak51.com

E" 0FH กEMAMBdK ] AMB]ก 1.3.5 E" @กP"] HBIDกG (Display Shift)

S/C R/L กGกP" HBIE" 0 0 P"] ]B 1 DEM! 10H - 13H 0 1 P"] H 1 DEM! 14H - 17H 1 0 P"DกGAM! ]B 1 DEM! 18H | 1BH 1 1 P"DกGAM! H 1 DEM! 1CH | 1FH 1.3.6 E" กEMกAB (Function Set)

0

RS

0

R/W

0

DB7

0

DB6

1

DB5

DL

DB4

N

DB3

F

DB2

X

DB1

X

DB0

DL = n0o LCD DD!กD@Jก 4 D DL = n1o LCD DD!กD@Jก 8 D N = n0o กEMKE 1 N = n1o กEMKE 2 F = n0o กG 5X7 Dots F = n1o กG 5X10 Dots !E" 38H กEMAMBE 8 D 2 5x7 1.3.7 E" PกH CGRAM ก!ก!MPHHBIAMB CGRAM DB กEMAMBD" 7 ? n0o D" 6 ? n1o ! 6 D"MPB!H CGRAM H CGRAM KI!M! 00-3FH 1.3.8 E" PกH DD RAM ABAกPกH DDRAM ก!Eก!MPHHBI D" 7 DB ? n1o HBIก 7 D"MP?!H DDRAM ]L" I!M! 8CH-0FFH KE HLFI!กกกEMW"D N H E" Function Set MกD N ? n0o H DDRAM I!M! 80H-0CH WBD N ? n1o H DDRAM K 2 ! P 8CH-87H 0CH-0C7H

Page 6: (Q12 หน่วยทีุ่10 น325 น403)

262

ก : www.Adisak51.com

1.3.9 E" !!Cก BUSY ?E" AกAB!Cก BUSY (BF) ?DกWก@ LCD ! BHBII!MP! BF = n0o LCD BHBIE" BF = n1o LCD ! BHBIE" P"DB ก!CกDB กEMAMBH R/W ? n1o RS = n0o AB?E" " !HBIH CGRAM DDRAM B D" 0 - D" 6 ?!HBIH "DB ก!

1.4 ก LCD ก0& MCS-51 กD! LCD AB !ก] MCS-51 K J " 10.2

+ , 10.2 กD! LCD ก] MCS-51

Page 7: (Q12 หน่วยทีุ่10 น325 น403)

263

ก : www.Adisak51.com

EกE" DD!ก LCD H? J " 10.3 D!F

+ , 10.3 EE" กDD!ก LCD

P"K!CF AMBก LCD Kก]DDDAB 10 ms msec

กEM@DBE" Clear display P"KJ F M

กEM@DBE" Display ON/OFF

กEMAMB D = n0o dก (! HBI) C = n0o d] (! ])

กEM@DB@E" Entry mode set

กEMAMB I/D = n0o H ] DEM! H DDRAM K? "HLF

กEM@DB@E" Function set

กEMAMB DL = n1o LCD DD!กD@Jก 8 D N = n0o กEMKE 2

กEMA DDRAM AMBD กDEM! "DB ก

! HB? ASCII CODE

Page 8: (Q12 หน่วยทีุ่10 น325 น403)

264

ก : www.Adisak51.com

1.5 ก *"ก LCD

0 1 กกEM!ก@ LCD PF~ กEMAMBW" 1 Mก" 1 DกG nHo W" 2 Mก" 1 DกG nIo ORG 0000H RS BIT P1.0 EN BIT P1.2 R_W BIT P1.1 LCD_DATA EQU P0 ; ************ LCD Initialize ************** INIL_CD: MOV A, #01H ; ก ACALL WR_INT ; กก!HE" ACALL DELAY ; M! AMB LCDE MOV A, #0EH ; LCD ]?HADBDกG !ก ACALL WR_INT ; กก!HE" ACALL DELAY MOV A, #06H ; (I/D = 1, S=0) กHBIAM!]P" H ACALL WR_INT ; กก!HE" ACALL DELAY MOV A, #38H ; DD! LCD 8 D 1 5x7 K@ (DL =1, N=1, F=0) ACALL WR_INT ; กก!HE" ACALL DELAY ROW1: MOV A, #08H ; กEM DD RAM W" 1 Mก" 1 ACALL WR_INT ; ACALL DELAY MOV A, #48H ; M! ASCII Code nHo ACALL WR_DATA ; HHBI A DD RAM " 08H ACALL DELAY ROW2: MOV A, #0C0H ; กEM DD RAM W" 2 Mก" 1 ACALL WR_INT ; กก!HE" ACALL DELAY MOV A, #49H ; M! ASCII Code nIo กEMDEM! ก

Page 9: (Q12 หน่วยทีุ่10 น325 น403)

265

ก : www.Adisak51.com

ACALL WR_DATA ; HHBI A DD RAM " 80H ACALL DELAY AJMP $ ; ************ ก!HE" " D A ************** WR_INT: CLR R_W ; กEM?กHHBIAMBก LCD SETB EN ; AMB EN ?WKกI CLR RS ; RS = n0o HE" ACALL DELAY ; M! AMB LCD E MOV LCD_DATA, A ; ! E" LCD "H DB0 - DB7 CLR EN ; EN " n1o → n0o กEMกH LCD ACALL DELAY ; M! AMB LCD E SETB EN ; EN " n0o → n1o ACALL DELAY ; M! RET ; ******* ก!HHBI A DD RAM ********* WR_DATA: CLR R_W SETB EN SETB RS ; RS = n1o HHBI ACALL DELAY MOV LCD_DATA, A ; ! E" LCD CLR EN ; กEMAB LCD ACALL DELAY SETB EN RET DELAY: MOV R0, #0AH ; 10 ms DELAY1: MOV R1, #0E6H ; 1 ms per loop DELAY2: NOP NOP DJNZ R1, DELAY2 \ DJNZ R0, DELAY1 RET

Page 10: (Q12 หน่วยทีุ่10 น325 น403)

266

ก : www.Adisak51.com

0 2 Hก " LCD H 20 x 2 DกG HB 2 AกAMB HB MICROCONTROLLER " 2 AMB HB MCS-51 ORG 0000H RS BIT P1.0 R_W BIT P1.1 EN BIT P1.2 LCD_DATA EQU P0 ; ************ LCD Initialize ************** INI_LCD: MOV A, #01H ; -------------------------------------------------------< ACALL WR_INT ; ก ACALL DELAY ; ------------------------------------------------------< MOV A, #0EH ; ------------------------------------------------------------------< ACALL WR_INT ; ]?HADBDกG !ก (I/D = 1,C=1,B=0) ACALL DELAY ; ------------------------------------------------------------------< MOV A, #06H ; ------------------------------------------------------< ACALL WR_INT ; ** กEMกGก (I/D = 1, S=0) ** ACALL DELAY ; ------------------------------------------------------< MOV A, #38H ; --------------------------------------------------------------------< ACALL WR_INT ; PกDD! LCD 8 D 5x7 K@ (DL =1, N=1, F=0) ACALL DELAY ; --------------------------------------------------------------------< MOV DPTR, #TABLE LCD_DIS: MOV A, #08H ; กEM DD RAM (W" 1, Mก" 1) ACALL WR_INT ; MOV R6, #20 MOV R7, 00 ROW1: MOV A, R7 MOVC A,@A+DPTR ACALL WR_DATA ACALL DELAY INC R7

Page 11: (Q12 หน่วยทีุ่10 น325 น403)

267

ก : www.Adisak51.com

DJNZ R6, ROW1 MOV A, #0C0H ; กEM DD RAM (W" 2 , Mก" 1) ACALL WR_INT MOV R6, #20 ROW2: MOV A, R7 MOVC A,@A+DPTR ACALL WR_DATA ACALL DELAY INC R7 DJNZ R6, ROW2 AJMP $ ; ************ ก!HE" " D A ************** WR_INT: CLR R_W SETB EN CLR RS ; RS = n0o HE" ACALL DELAY MOV LCD_DATA, A ; ! E" LCD CLR EN ; กEMAB LCD ACALL DELAY SETB EN ACALL DELAY RET ; ******* ก!HHBI A DD RAM ********* WR_DATA: CLR R_W SETB EN SETB RS ; RS = n1o HHBI ACALL DELAY MOV LCD_DATA, A ; ! E" LCD CLR EN ; กEMAB LCD ACALL DELAY SETB EN

Page 12: (Q12 หน่วยทีุ่10 น325 น403)

268

ก : www.Adisak51.com

RET ; ******* DELAY TIME 10 ms ********* DELAY: MOV R0, #15H ; 10 ms DELAY1: MOV R1, #0E6H ; 1 ms per loop DELAY2: NOP NOP DJNZ R1, DELAY2 \ DJNZ R0, DELAY1 RET TABLE: DB n MICROCONTROLLER o DB n MCS-51 o END

2. &0#"&& I2C 2.1 &0#ก"&& I2C I2C BUS !Kก Inter-Integrated Circuit Bus MWL ?กP"@ก ] (Synchronous) P"ABDD!P"M! ก@กJก ]L" WIก HLFG Philips Semiconductors P"DB กAMB]MPIWDD! " @ABNN 2 B P ! HBI NNกกEMK MกE !กD!AB !กH @กKD!HBI NNก H @กD!DHก กกEMH D!D KABMHBI กกEMJKก P"HH @กD!D HBI I2C ?HBI@กMP SDA (Serial Data Line) !NNก K?@กMP SCL (Serial Clock Line) @กABP"D! I2C !]H D @DD @D (I/O Expander) ] NN[ก?KD (ADC) NNKD?[ก (DAC) ]HI LCD ][ก (RTC) M!KE 2.2 !#&070*&0# I2C

SDA SCL ?NN 2 (Bi-Directional Line) D!I!กM! K!CกกD!DDB Iก +5D P"?!กDD!AB F SDA SCL KWKกI (High Impedance) !Aกv กNNก"K

Page 13: (Q12 หน่วยทีุ่10 น325 น403)

269

ก : www.Adisak51.com

HBANNF KD @D H @ก"D!I! I2C DB กG? Kd (Open-Drain) MP[กDd (Open-Collector) J " 10.4 DกW!HBI I2C I WL 100 กDD!AMD~ (Standard Mode) I WL 400 กDD!AM[I (Fast Mode) @ก"D!!I! I2C KDB !K@CCv"กHLFM! SDA SCL !ก 400 pF กHBWL @ก I2C ABHBIEMกHBWL 2 !P 7 D (7-Bit Addressing) MP 10 D (10- Bit Addressing) I2C P WP"D!@ก"ABCF !!กAMBWDD!P"กB @ก I2C DML" KABCF +5DAH"กDML" ABCF +12D กD! SDA SCL H @กD!DHBBก D!DDB I (Rp) HBก C +5D

+ , 10.4 กD!@กHBก I2C (M! B http://i2c2p.twibright.com/spec/i2c.pdf)

I2C ?กกEMIH กDD! MPD (Protocols) P"กEMกDD! ก ก! H @กD!D 2.3 #+ ก7$*89&&0# I2C กEMP"กH @ก @กEMB"กENNกกDD! I2C ก! D (Master) W?BF DD! @ก"WIก@D MPD! ! HB I2C ก! C (Slave) @ก"?DB NNก! HBIก! D! (Transmitter) @ก"HBI ก! D (Receiver) @ก I2C W?BF D ! @ก DEMB"?D ! D!!@กA I2C EMB" ?D! ! กP" I2C กE 5 J

Page 14: (Q12 หน่วยทีุ่10 น325 น403)

270

ก : www.Adisak51.com

+ , 10.5 J "DBW!HBI M@กW!HBI

2.3.1 ! (Bus Not Busy) JFกHLFP"Kก SDA SCL ?Kก n1o F I! 2.3.2 "DBกW!HBI (Start Data Transfer) กHLFP" SDA ก" Kก n1o n0o AH" SCL WKกn1o ก! J"DB (START) J " 10.5 2.3.3 M@กW!HBI (Stop Data Transfer) กHLFP" SDA ก" Kก n0o n1oAH" SCL WKกI กJF! JM@ (STOP) J " 10.5

2.3.4 HBIE I! (Data Valid) JFกHLFWKกJ"DB WKก"กHLF SDA PHBI"EกW! P" SCL ?KกI W" SDA DB " P"AMB@กDIBHBIAK MF! ? n0o MP n1o HBIKกก" BAH" SCL ?KกD"E D!P"DB กAMBกกW!HBI! I WKก"H SDA DB "D! " SCL WKกI Mกก" WKกAH " SCL KกI I!F @กD"@กW!HBI KM?JM@MPJ"DBB EAMBHBI"W!ก 2.3.5 กD (Acknowledge) กHLFM KกW!HBIKกD! DกHLF! I D! Eก! HBI 1 D ก! DD (Acknowledge Bit) W?KกI M Kก! HBIK !@กDKEก! NNกD ]L" iกNNก P"D DD"! KกD! BDK! DD "WKกD"E @กC"WIกB WL AกDD!MPกE DD!I!AHFKกEMDD P"D AMB!BHBIAD!DBB KกกE F 5 JH กDD!P"HBI W ?ก " WL JD! O I2C J " 10.6

Page 15: (Q12 หน่วยทีุ่10 น325 น403)

271

ก : www.Adisak51.com

+ , 10.6 ก" WL JD! O I2C

2.4 ก / &&0# I2C

กB WL @ก I2C WB WL 7 DMP 10 DB ก"@กD!!กKABกB WL 7 D D!WB@กD!กก! 127 DB กB WL 10 D M Kก"DD!@กD!DB K"DBกW!HBID! กB WL 7 D (7-Bit Addressing) HBIDก"กHLF M J"DBPHBIB WL @ก"DB กDD! MP HBIกEM I J " 10.7 A 7 DF D MBS ?HBIH @กC"DB กDD! ! ? DกEM " (Fixed Address Bit) KE 4 D ]L" HBIF@กD!DKWIกกEMKกIBD!W" กBHB Wก 3 D?D"กEMWกB (Programmable Address Bit) IBAB DB กEMWKกAMBก!H A0-A2 H @ก"กP"D! I2C !AD LSB ?D"ABกEMก!MPHHBIก@กC DFO MกD LSB ? n0o MWL DB HHBI @กFWB? n1o K?ก!HBIKก@กC

+ , 10.7 กB H 7 D

Page 16: (Q12 หน่วยทีุ่10 น325 น403)

272

ก : www.Adisak51.com

HBIADD!P HBI@ (Control Byte) ]L" A@กD!D KกกEMHBI@"DกD! กก !]H DHBI@กEMAMBD!D? @D MP?D @D MP] ADC/DAC DB กHBIAMBE ? K ADC MP DAC ?DB HBIADD!P HBI"EกW!K (Data) M KกกW!HBIAD!D @กC"BกDD! DB ! NNIBDกB@กF P"AMBกกW!HBIWED! B J " 10.8

+ , 10.8 กDD! I2C ABW!HBIP"B H 7 D

กB WL 10 D (10-Bit Addressing) ABIHBI@ก 7 D AHBIDกM KกกJ"DB DB กEMAMB 5 D HBI? 11110 !ก 2 DW?D H @ก"DB กDD!AD LSB H HBIDก ?กกEM!DB ก!MPHHBIก@ก CD"DB กDD!B HBIDD!?HBI AD " H @ก"DB กDD!B HBIDWKL ?HBI@ HBIM KกF ?HBIK "ABAกDD! 2.5 "ก# #0== !7$ก0&&0# I2C กB JD~H I2C กB J"DB, JF@ก! HBI, JM@, NNกH SCL 2.5.1 กB J"DBP"DB กDD!ก I2C KDB EAMB! กEM"H SCL H SDA Kก? n1o F I! KกFEAMBH SDA Kก n0o "H SCL ?Kก n1o I! A! ML" กEMAMBH SCL Kก? n0o EAMB SCL SDA Kก? n0o F I! BDD! WH?ก P"B NN F

Page 17: (Q12 หน่วยทีุ่10 น325 น403)

273

ก : www.Adisak51.com

I2C_START_: SETB SCL SETB SDA ACALL I2C_DELAY CLR SDA ACALL I2C_DELAY CLR SCL RET I2C_DELAY: MOV R6, #0CH I2C_DELAY1: NOP NOP DJNZ R6, #IC2_DELAY1 RET 2.5.2 กB JM@ P"KM@! HBI DB ! JM@ก กEMAMBH SCL SDA ?Kก n0o F I! D!KL กEMAMBH SCL Kก? n1o SDA Kก? n0o KกF KL EAMBH SDA Kก? n1o ]L" KEAMBกHBI!! กF B" MP! HBID!

SDA

SCLDELAY

DELAY

I2C_STOP: CLR SDA

CLR SCL

ACALL I2C_DELAY

SETB SCL

ACALL I2C_DELAY

SETB SDA

RET

2.5.3 กB ก!กENNก

SCL

DELAY

I2C_STOP: ACALL I2C_DELAY

SETB SCL

ACALL I2C_DELAY

CLR SCL

RET

DELAY

SDA

SCL

DELAY

DELAY

Page 18: (Q12 หน่วยทีุ่10 น325 น403)

274

ก : www.Adisak51.com

+ , 10.9 ก! HBIAD!D กEMกE" ก! HBIAD!D กEMBKกกE" J " 10.9 HHBI @กC HBI"! K! H SDA KกEM"KD A BEก! ก Cก กABE" M@HBI (RLCA) P"W! H SDA D! ก #*?@7ก A0B EกDHFD F HFD" 1 AMBH SDA ? n0o EMก! HBIKก n0o HFD" 2 AMBH SCL n1o EMกvNNก

Page 19: (Q12 หน่วยทีุ่10 น325 น403)

275

ก : www.Adisak51.com

HFD" 3 AH"H SDA ? n0o AMBH SCL ก?WKก n0o MP ก #*?@7ก A1B EกDHFD F HFD" 1 EAMBH SDA Kก? n1o EMก! HBIKก n1o HFD" 2 AMBH SCL ? n1o EMก! NNก AH"H SDA ? n1oI! HFD" 3 KกFEAMBH SCL ก?W?Kก n0o MP 2.6 * , PCF8574A

+ , 10.10 กKH [กกH ]H D PCF8574A 2.6.1 ]H D PCF8574A @D F

1) E " DF D! 2.5V WL 6V 2) กกAJDD"E 10 µA 3) D @DD!BWK!กBI P"H LED BD 4) กEMDEM! B 8 ! "H A0-A2 D!AB BWL 8 D

กKH[กกH ] PCF8574A AJ " 10.10 HH PCF8574A WกEMAMB? D @D MPD @DB !DB ABE" @ P"Pก?D @DMP @D P"K!CAMBก PCF8574A F ก H DF 8 HKKก? n1o ?กK!ก

Page 20: (Q12 หน่วยทีุ่10 น325 น403)

276

ก : www.Adisak51.com

KกM! K!ก "JAD] EAMBกAHKก n1o F 100 µA !F AกDB กAMBกK!กI O DB D!DDB IB"H DB P"DB กAMBH DEMB"? @DDB ! NNAMBKก n1o ก!P"H @DBNNKกJกvHB ]PCF8574A KB NNDD (INT) vAMB MP DIBกDKH @DD NNDDWIก]DP"ก!!HBIMPก"!H @DI!! กDD!ก] PCF8574A WกEM F

D A0, A1, A2 AB@ PCF8574A AกD! PCF8574A กก! 1 D!H A0-A2 DกD! กAD!DWกEMB D!H A0-A2 HBกCF +5D P"กEMAMB?Kก n1o MPก P"กEM?Kก n0o !D R/W ABกEMก!MPHHBIก] PCF8574A 0 WBกEMH A0-A2 กF M DB ก!HBIKก PCF8574A HBIDB กEM P 01110001 B ?DB ]H D PCF8574 กกEMDกD! ก PCF8574A D!C ก"กE MPก@กก HBIกEMH PCF8574 WD! ! ]@ก PCF8574x BI @WL 16 D F

2.6.2 ก! MPHHBI PCF8574A AJ " 10.11 HFD F

1) กEMH PCF8574A 2) กก!กDD!@กC 3) กDกKก PCF8574A 4) ! HBI PCF8574A 5) กก!JM@

Page 21: (Q12 หน่วยทีุ่10 น325 น403)

277

ก : www.Adisak51.com

+ , 10.11 HHBI]H D PCF8574A

+ , 10.12 !HBIKก]H D PCF8574A 2.6.3 ก!HBIKก PCF8574A AJ " 10.12 HFD F

1) กEMH PCF8574A 2) กก!กDD!@กC 3) กDกKก PCF8574A 4) !HBIKก PCF8574A ABก!ก!HBIKก@กC 5) กก!JM@

2.6.4 กHกAB ] PCF8574A กDD!M! ] MCS-51 ก] PCF8574A กEMAMBHML" ? SDA กHML" ? SCL D!DDB! 4.7K IC"H DF H J " 10.13

Page 22: (Q12 หน่วยทีุ่10 น325 น403)

278

ก : www.Adisak51.com

+ , 10.13 กDD!M! ] MCS-51 ก] PCF8574A

0 3 Hก! !AMBD @D] PCF8574A กEM!HBI F0H กD! K J " 10.13 SDA BIT P1.7 SCL BIT P1.6 SW_READ BIT P1.0 INKEY BIT P3.5 FLAG EQU 2FH I2C_ACK BIT FLAG.0 DIO_ID EQU 01110000B I2C_ADDR EQU 029H I2C_DATA EQU 028H INPORT EQU 040H OUTPORT EQU 041H

Page 23: (Q12 หน่วยทีุ่10 น325 น403)

279

ก : www.Adisak51.com

;********* MAIN PROGRAM *********** ORG 0000H MAIN: MOV OUPPORT, #0F0H ACALL DIO_WR SJMP MAIN ;********* I2C DIO WRITE *********** DIO_WR: MOV I2C_ADDR, # DIO_ID ACALL I2C_SLAVE MOV I2C_DATA, OUTPORT ACALL I2C_DATA_WR ACALL I2C_STOP RET ;******* I2C STOP CONDITION ******* I2C_STOP: CLR SDA ACALL I2C_DELAY SETB SCL ACALL I2C_DELAY SETB SDA RET ;******* I2C SLAVE CONNECTS ******* ;**** I/P: I2C_ADDR **** ;**** O/P FLAG: I2C_ACK **** I2C_SLAVE: PUSH ACC SETB I2C_ACK MOV A, I2C_ADDR ACALL I2C_START MOV R5, #8 I2C_SLAVE_1: RLC A MOV SDA,C ACALL I2C_CLK DJNZ R5, I2C_SLAVE_1

?กMกกEMAMB! HBI F0H ก" DH ] PCF8574A กก!กHHBIก

?กก! HBIกEMHFD F 1. ! HBIกEMDD!DAก! I2C_SLAVE 2. EHBI"DB ก! (HBIK ) Aก! I2C_DATA_WR 3. I!AJกM@! ก! I2C_STOP

?กก! HBIกEMDEM! H D 1. EHBI"DB ก! BAKD A 2. กก! I2C_START HBI!J"DB 3. กEMKEก! B"KD R5 = 8 D 4. M@HBI!CกD"D! ก" SDA 5. กก!กENNก P"! "D

Page 24: (Q12 หน่วยทีุ่10 น325 น403)

280

ก : www.Adisak51.com

SETB SDA ACALL I2C_DELAY SETB SCL ACALL I2C_DELAY JB SDA, I2C_SLAVE_2 CLR I2C_ACK I2C_SLAVE_2: CLR SCL POP ACC RET ;********* I2C DATA WRITE *********** ;**** I/P: I2C_DATA **** I2C_DATA_WR: PUSH ACC SETB I2C_ACK MOV A, I2C_DATA MOV R5,#8 I2C_DATA_WR_1:RLC A MOV SDA, C ACALL I2C_CLK DJNZ R5, I2C_DATA_WR_1 SETB SDA CALL I2C_DELAY SETB SCL ACALL I2C_DELAY JB SDA, I2C_DATA_WR_2 CLR I2C_ACK I2C_DATA_WR_2:CLR SCL POP ACC RET ;********* I2C ACKNOWLEDGE *********** I2C_ACK_BIT: CLR SDA ACALL I2C_DELAY ACALL I2C_CLK

?กDKNNกDKก@ก"DD!B D I2C_ACK ? n1o P"!กD ? n0o P"กD

! HBI"DB ก! (HBIK ) 1. EHBI"DB ก! BAKD A 2. กEMKEก! B"KD R5 = 8 D 3. M@HBI!CกD"D! ก" SDA 4. กก!กENNก P"! "D 5. DKก! HBI 8 DMP

?กDKNNกDKก@ก"DD!B D I2C_ACK ? n1o P"!กD ? n0o P"กD

Page 25: (Q12 หน่วยทีุ่10 น325 น403)

281

ก : www.Adisak51.com

SETB SDA RET ;******* I2C START CONDITION ******* I2C_START: SETB SCL SETB SDA ACALL I2C_DELAY CLR SDA ACALL I2C_DELAY CLR SCL RET ;******* I2C CLOCK ******* I2C_CLK: ACALL I2C_DELAY SETB SCL ACALL I2C_DELAY CLR SCL RET ;******* I2C NOT ACKNOWLEDGE ******* I2C_NACK_BIT:SETB SDA ACALL I2C_DELAY ACALL I2C_CLK RET ;******* I2C DELAY ******* I2C_DELAY: MOV R6, #0CH I2C_DELAY1: NOP DJNZ R6, I2C_DELAY1 RET END 0 4 KกกD! " 3 Hก!!Kก] PCF8574A กEMAMB " D P2 H ] MCS-51 !!@กF "กD] P1.0 ก "D F INPORT EQU 040H OUTPORT EQU 041H

Page 26: (Q12 หน่วยทีุ่10 น325 น403)

282

ก : www.Adisak51.com

ORG 0000H SETB SW_READ MAIN: ACALL DIO_RD MOV A, INPORT MOV P2, A WAIT: JB SW_READ, WAIT SJMP MAIN ;********* I2C DIO READ*********** DIO_RD: MOV I2C_ADDR, # DIO_ID+1

ACALL I2C_SLAVE ACALL I2C_DATA_RD MOV INPORT, I2C_DATA ACALL I2C_NACK_BIT ACALL I2C_STOP

RET ;********* I2C DATA READ *********** ;**** O/P: I2C_DATA **** I2C_DATA_RD: PUSH ACC CLR A MOV R5, #8 I2C_DATA_RD_1: ACALL I2C_DELAY SETB SCL ACALL I2C_DELAY MOV C, SDA RLC A CLR SCL DJNZ R5, I2C_DATA_RD_1 MOV I2C_DATA, A POP ACC RET

?กก!!HBI กEMHFD F 1. ! HBIกEMDD!D+1 Aก! I2C_SLAVE (D0 Pก HMP!Kก] +1 P!!) 2. กก!!!Kก] PCF8574A 3. EHBI"!Bก[BA INPORT 4. กก!AMBD! M@Eก! HBI 5. I!AJกM@! ก! I2C_STOP

ก!HBI 1. กEMKEกB"KD R5 = 8 D 2. HBI" SDA M@HBI!CกD" Dก[BAKD A 5. DKกHBI! R5 P" 8 D EHBIก[B" I2C_DATA

Page 27: (Q12 หน่วยทีุ่10 น325 น403)

283

ก : www.Adisak51.com

0 5 KกกD! " 3 AMBHก!!Kก] PCF8574A กEMAMB " D 2 H ] MCS-51 K!P"NNKกHDDH ] PCF8574A "D!ก P3.5 H ] MCS-51ก "DKกD! " 3 F INPORT EQU 040H OUTPORT EQU 041H ORG 0000H ;********* MAIN PROGRAM *********** MOV 30H, #00H MAIN: MOV OUTPORT, #0FFH ACALL DIO_WR LOOP: MOV P2, 30H JB INKEY, LOOP ACALL DIO_RD MOV 30H, INPORT SJMP LOOP ;********* I2C DIO READ*********** DIO_RD: MOV I2C_ADDR, # DIO_ID+1 ACALL I2C_SLAVE ACALL I2C_DATA_RD ACALL I2C_NACK_BIT MOV INPORT, I2C_DATA ACALL I2C_STOP

RET ;********* I2C DATA READ *********** ;**** O/P: I2C_DATA **** I2C_DATA_RD: PUSH ACC CLR A MOV R5, #8 I2C_DATA_RD_1: ACALL I2C_DELAY SETB SCL ACALL I2C_DELAY

1. ! HBIAMBก] PCF8574A AMB? n1o @กD (FFH) Aก?ก!! ( @D) 2. DKกHBIKกH INT H ] PCF8574A "H INKEY H ] MCS-51 3. กก!!HBI

Page 28: (Q12 หน่วยทีุ่10 น325 น403)

284

ก : www.Adisak51.com

MOV C, SDA RLC A CLR SCL DJNZ R5, I2C_DATA_RD_1 MOV I2C_DATA, A POP ACC RET

3. ก "#0== ! FกG#0== !$7@7 ?ก NN[ก (A/D: Analog To Digital Converter) "ก" ! D!P" !H CCv MPH กCCv AMBก?NNKD"I!AIH H~ P n0o ก n1o ]L" ?NN"!HLFI!ก 3.1 "#0== ! FกG#0== !$7@7 ADC 0804

+ , 10.14 KJA กK HH ] ADC 0804

Page 29: (Q12 หน่วยทีุ่10 น325 น403)

285

ก : www.Adisak51.com

]"EMB"? K A/D MBก ! Dual Slope Type, SAR (Successive Approximation Register Type), Flash Type Tracking type ] ADC 0804 EMB"? K A/D SAR (Successive Approximation Register Type) [ 100 µS KJA J " 10.14 MB"H D!HH ]ADC 0804 F H 1 PH CS NNกPกE H 2 PH RD (Read) H@ก!HBIA ADC0804 NN@Kก H 3 PH WR (Write) H@กHHBI A ADC0804 NN@Kก H 4 PH CLK in NNกKกJก H 5 PH INTR (Interrupt) NND DKก H 6 PH VIN (+) ? @D ก H 7 PH VIN (-) ? @D (O V) H 8 PH A GND K@H K[กJA ADC0804 H 9 PH Vref / 2 ? @D B H 10 PH D GND K@H KKDJA ADC0804 H 11 |18 PH Digital output H 11 P D7 (MSB) H 18 PH Do (LSB) H 19 PH CLK out ? @DEMD!DDBJกEMNNก H 20 PH VCC (or Ref) ?HK!กE CCv +5 VDC ] ADC0804 B H KKDJA?] [Aก NND!!ก 100 µS B JA? Successive Approximation MP!D!P" [ก @DBA! 0 WL +5 D BD @D 8 D KDKก 3 W?CCEAMBD!HBกHBIH ] MCS-51BD ] ADC0804 !กD!D19.6 mV (P" VCC = +5 D F Steps = 5V /255 = 19.6 mV) W"H NN"MP f = 1/1.1RC !AI!PกEM R = 10 KΩ C = 150 pF, R C D!H CLK out CLK in P"! R = 10 KΩ C = 150 pF KBW"H NNJA!ก 606 kHz D!WBAB NNกJก DB D!HB"H CLK In d KH CLK Out "W" 606 kHz กD!K@กH ] ADC0804 กกM! K@กH KD K@กH [ก P" KกAKDNNก กก! KEAMBกE !IB ก NN"KกกE H K A/D AMBH WR ? n0o M KกF]K" NN [Aก NN HLFกH A/D D! !

Page 30: (Q12 หน่วยทีุ่10 น325 น403)

286

ก : www.Adisak51.com

ADC0804 ! Conversion Time 100 µS P" NN[K K! NNก"H INTR ? n0o NN A/D KHก? EOC (End of Conversion) F กHกKL DB H D A/D ก! ( P"EAMB WR CS H A/D C) M KกFKL AMBWH H INTR ? n0o KL !HBIก[B F@กE 1 WABiก!!"AMB A/D E AMBIKก! 100 µS KL !!HBIKก A/D B กH NN CS WR RD INTR A ADC0804 B J " 10.15

+ , 10.15 กH HNNH ] ADC0804 3.2 ก MCS-51 * ก0&& ADC0804 กD!AB ] MCS-51 ก] ADC0804 J " 10.16

+ , 10.16 กD! K] ADC0804 ก] MCS-51

ก NN F@ก NN

P1.0 P3.1

Page 31: (Q12 หน่วยทีุ่10 น325 น403)

287

ก : www.Adisak51.com

HHBI DB0-DB7 H A/D D!HB P1 ]L" ?DB H CS D!HB I/O Decoder MPWD!"H 0INT 1INT กHกกEM F 3.3 ก *"ก

0 6 กEMAMBHก@AMB ADC 0804 NN M KกFAMBก[!BAKD A กEMAMB] MCS-51 E " 12 MHz HกB F EกM! P"AMBB! 100 µSec ] MCS-51 E " 12 MHz FA 1 ] = 1 µS ;**** Subroutine for Delay 100 µS ***** DELAY: MOV R0, #xxH [1] LOOP: DJNZ R0, LOOP [2] NOP [1] RET [2] ID = 1 + R0 (2) + 1+ 2 = 4 +R0 (2) 100 = 4 +R0 (2) R0 = 96/2 = 4810 = 30H H?กE" B F ORG 0000H WR BIT P0.1 INT BIT P3.1 MAIN: CLR WR ; WR WKก? n0o CALL DELAY ; M! 100 µSec JB INT,$ ; ? n1o AMB MOV A,P1 SETB WR SJMP MAIN ;**** DELAY 100 µS X-TAL 12 MHz **** DELAY: MOV R0, #30H LOOP: DJNZ R0, LOOP NOP RET END

Page 32: (Q12 หน่วยทีุ่10 น325 น403)

288

ก : www.Adisak51.com

4. ก ก MCS-51 $+ W JG] ?JG D "ABHก D "iJ I IBDMGBD"ก"+ W (Compiler) AB"@E" "HAIH JG]?JGP" P"" AMB DE DDB กB D!GKAMP"M@! ]L" D!@!KDกD! กB D!!AMN!K?DD~H W ANSI (American Standard National Institute) ]L" BกEMD~H JG]Bก! ANSI C JG C51 ?JG"ABHกEM" @ MCS-51 ]L" ?JGI "I B กMPกJG] D!K "E" C ก"EMDD!ก] MCS-51 JG C51 K?DD~H W ANSI 4.1 # *"ก*$+ W

ก"HBJG]K B F #include <library> MP header file !ก (Declaration part) !FABกD ! " H HBI ก (global) main() C กMกH ก E" D! O ! " C ก! (sub function) E" D! O ! " C!M(Header file) กB #include ]L" K?C ]] [กC ( Preprocessor Directives) P"กJG (Compiler) ก !DB ก Source code D!Kก ]][กC P"DK!กกABC กAB I!AC!M"กABMP!C!MK!H? .h K?"ก[C กA" (Library) "D!C!MKKก[C กD! O B DกD! ก ! stdiol.h Kก"C กD! O"ก"ก I/O D! O C ]] [กCK"DBB # !DB KB P" M ; !A!E" MPC ก[กC MD ! include , define กHก F KDB กC!MMC กกABC ก"I!A""ก[BC!MD! ก

Page 33: (Q12 หน่วยทีุ่10 น325 น403)

289

ก : www.Adisak51.com

Aกก !H D ! "?ก KWIกกABBA@ก O C กH ก A!F ?"ABก!C ก!AB Aก main () ?C กMกH ก ]L" DB ! B 1 C ก กE H C กFกKกABE" ABC กD! O Kก" (Library) B WกABC ก! D! O B

C ก! (Sub Function) ?C ก"กB HLF P"AMBก P"AMBกWE BDDB ก

AกHกJG] B PF~ F 1) C ก main() K!! !AMBC กP" O !DB ! ABE" void main(void) void MWL !! !ก !(void) MWL !กD (Argument) P!DB ! 2) HHDH C ก K"DBBP" Mกกd ( ) F@HHDBP" Mกกd ( ) FกHC กADB "DBB KB AE กP"EE" M O E" ก?@กK"B KB !ก 3) E" D!E" KDB KBP" M; (Semicolon) 4) P"C กE" D! O AJG]KDB ABDกGD[ก (Lowercase)

5) P"DKABDกGD[กMPDกGDAMN! (Uppercase) ก[B JG]KWP!DกGD[กDAMN!D! ก (Case Sensitive) DAC กD! กWABP"MPBD!AC กกKDP"MPก!B 0 "ก+ W /* D! กJG] */ MP // D! JG] #include <stdio.h> /* "1*/ main() // " 2 /* "3 */ Printf ("Microcontroller Mcs-51 \n"); // "4 // " 5 " 1 #include <stdio.h> ?กกABCv"K@MIH C ก"KE?DB ABA"FP printf () I!ACvF " 2 !H C กEMBP" main !กDA [ MP KH? void main(void) MWL !ก! !KกC กF!ก!"! " 3 WL C ก main () K@"DF D!DEM! F " 4 AMB E! Microcontroller Mcs-51 "KJ BAMBHLFAM! (\n) " 5 !F@HHDH C ก main()

Page 34: (Q12 หน่วยทีุ่10 น325 น403)

290

ก : www.Adisak51.com

P" M /* ................. */ ABEMHMMD@Aก P"กJG (Compiler) K!EกกHB"I!M! P" M /* */ Aก"MMD@I!A KEMBB // กAMBIB!" "I!D!Kก // DJGK!EกกHBF 4.2 ก&,c9d *+ W

กH JG] KกB กH(Characters) ! " (Constants) D (Variables) DEก (Operators) K (Expressions) 4.2.1 กH(Characters) ! กB F 1) DH (Digits) P DH 0 WL 9 H~Mก P A B C D E F 2) DกG(Letters) PDกGAJG กG ?D AMN!D [ก P A-Z a-z 3) กH G(Special Characters) P ! * + " < # ( = | > % ) ~ : / ^ - [ ; ? , & _ ] '

. Space AJG] WP! P" MHBADB?DกG DML" กHD! O FKAB?! " D DEก 4.2.2 ! " (Constants) ?!"!!" ! กB F 1) ! "JHKED[ (Integer Constant) PHKED[ "I!M! 32768 x8 32767 ! -25 MP 0 MP 236 !M!FD!!ABM!KEAกก[ 2 D !M!FHAIH~ ~(HABHIEMB ! 045) H~Mก(H ABHIx EMB ! 0x28 0X2AF) 2) ! "DH(Floating Point Constants) ?DH ! 1.0 1.6 E+09 !FABM!KEAกก[! 4 D !I!A! 1.2 E -38 x8 3.4E+38 3 Dกก[!D !D@Bก[HกกE 3) ! "DH ! (Double Floating Point) MPก ! Double ก[KE 2.2E-308 WL 1.8E+308 !F ABM!KE 8 D 7 Dกก[H D@Bก[HกกE 4) ! "DกH(Single Character Constant)Wก[DกH 1 DABP" M ' ' B 1 DกHAB 1 D ! 'E' 'X' 5) ! "HB (String Constant) ABก[HB DF D! 1 DกH ก[AI D!DABM!KE 1 D D!กD@BDB ก[ \0 (Null Character) P"ก!KHBB ! "Microcontroller" ABM!KE 16 D

Page 35: (Q12 หน่วยทีุ่10 น325 น403)

291

ก : www.Adisak51.com

4.2.3 H D (Variables) ?P""DF P"ABB WL HBID! O DKกABPF"AM!KEA"D! กHLFกH HBI HBI PF~AJG] 5 P กH (Char) KED[ (Int) KEK (Float) KEK 2 ! (Double) !AMB!A O (Void) กKกF P"WAกAB KL ก "H DHLF D " 10.2 10.2 H D

EกH D P" M KED"AB !"?B char P" M 1 -128 WL 128 int P" M 2 -32768 WL 32767 short P" M 2 -32768 WL 32767 long P" M 4 -2147483648 WL 2147483647 unsigned char !P" M 1 0 WL 255 unsigned int !P" M 2 0 WL 65535 unsigned short !P" M 2 0 WL 65535 unsigned long !P" M 4 0 WL 4294967295 float P" M 4 3.4E-38 WL 3.4E+38 double P" M 8 1.7E-308 WL 1.7E+308 long double P" M 10 3.4E-4932 WL 1.1E+4932

4.2.4 กDF P"D AJG] HBกEMAกDF P"H D F 1) DB HLFDBBDกG A-Z MP a-z MPP" M _ (Underscore) !F !ก 31 D 2) JAP"DWABDกG A-Z MP a-z MPDH 0-9 P" M_ (Underscore) 3) JAP"MBB! ! MPABNกGกMPKกHB 2 4) DกG[กMPAMN!MDกD! ก 5) P"DP"MH D P"v กH ก Kก 6) MBDF P"]FEกE (Reserved Word) AJG] ]L" 33 E F auto default float register type struct

Page 36: (Q12 หน่วยทีุ่10 น325 น403)

292

ก : www.Adisak51.com

break do for return union while case double goto short unsigned static char else if signed void switch const enum int sizeof volatile long

continue extern 4.2.5 กกD

AกAB DDB กกP"H DFก! กกDABI P 7$*0" c0" WBDKก BกAB P" M n,o "M! P"H D WBกกEM!AMBABP" M = ABP" M กKE" P"F@E"

0

char name, day = 'S' , surname[20] = "MCS51"; int x=5 ,y,z[100]; float a=5.00 ,b,c; double k=1.234567, m ;

4.3 0$/ 7ก (Operator)

กEกAกHกJG]I! 3 J PกE DDกEก DกD ก ]L" กEกD!JKP" M"DB AB P"HE" EMกEกJF O 4.3.1 DEก DD (Mathematical Operators) P" M ก MAJG] D " 10.3 10.3 P" MDEก DD

NกG กEก D! + กก 2+5 i 7 - ก 7-4 i 3 * กI 2*6 i 12 / กM 8/2 i 4

% กMMG 9%4 i 1

4.3.2 DEก iMPก (Relational Operators) P" M ก MAJG] D " 10.4

Page 37: (Q12 หน่วยทีุ่10 น325 น403)

293

ก : www.Adisak51.com

4.3.3 DEกDก (Logical Operators) P" M ก MAJG] D " 10.5

10.4 P" MDEก iMPก

NกG กEก D! < Bก! 2<3 i K (1) > กก! 2>3 i [K(False)(0)

<= Bก!MP!ก 2<= 3 i K (True) >= กก!MP!ก 2>= 3 i [K(False) == !ก 4==4 i K (True) != !!ก 2!= 2 i [K(False)

10.5 P" MDEกDก NกG กEก D!

&& (AND) (2<3)&&(3>1) i K || Bก!(OR) (2>3)||(4<1) i [K(False) ! !(NOT) !(2> 3) i K (True)

4.3.4 DEกกEM! (Assignment Operators) D " 10.6 ?ก P" M MAJG] 10.6 P" MDEกกEM!

NกG กEก D! = กEM! (Assignment) a=2 MP กEMAMBa !?2

+= กก (Addition) a+=b MP(a=a+b) *= กI (Multiplication) a*=b MP(a=a*b) -= ก (Subtraction) a-=b MP(a=a-b) /= กM (Division) a/=b MP(a=a/b)

%= กMMG (Remainder) a%=b MP(a=a%b) ++ "! (Increment) a++ MP ++a MP a=a+1 -- ! (Decrement) a-- MP --a MP a=a-1

Page 38: (Q12 หน่วยทีุ่10 น325 น403)

294

ก : www.Adisak51.com

4.3.5 EกEกH DEก (Operator Precedence) P" M ก MAJG] D " 10.7 10.7 EกEกH DEก

E" DEก กGกE 1 ( ) [ ] . -> ]B H 2 - ~ | * & H ]B 3 ++ -- H ]B 4 * / % ]B H 5 + - ]B H 6 << >> ]B H 7 < > <= >= ]B H 8 == != ]B H 9 &(bitwise AND) ]B H

10 ^(bitwise XOR) ]B H 11 |(bitwise OR) ]B H 12 && ]B H 13 || ]B H 14 ?: ]B H 15 = += -= /= %= H ]B 16 <<= >>= H ]B

DEก"EBก!KEก!DEก"EI ก! ! X = 2 + 5 * 3 KEกEก P E" 1 5 * 3 ( * E? 4 ! + I!E 5) E" 2 2 + 15 E" 3 17 ?!H X 4.4 7,@ (Expression)

กKกกE! " MPD DEกกก KM ! K DD K Dก K ก Kก"ก P"H Kก"ก

Page 39: (Q12 หน่วยทีุ่10 น325 น403)

295

ก : www.Adisak51.com

HB ! 2 + x * 5 ?D! H K DD (2>3)&&(5>=4) ? K Dกก !(a) ? K Dก if (x==y) ? K P"H 0 กM iH K กEM int a = 10 , b = 12, c =3; K M iH 2 * a + b % c Eก F (2 * a) + (b %c) i P 20 + 0 P 20 KกHBกEMB K M i H (a>b)&&(c<=b) ]L" K K F ([K) && (K ) F i P [K 4.5 / #0&ก / *"ก E" @กE H ก ก@!"ก P"Hก!กDAK P"E D!DE" "กEMB ME" P if, if else , if else if E" M!FKกGBก"DB ก P"H P"PกPกE" "KE D! 4.5.1 / #0 if E" F?E" "ก P"Hก!"KE DE" "กEM E" H if H? B J " 10.17

+ , 10.17 กE H E" if IH E" if ? F if (expression) statement ; MP If (expression)

P"H-[K

กKกE" if

E" D! O

K

Page 40: (Q12 หน่วยทีุ่10 น325 น403)

296

ก : www.Adisak51.com

statement 1; ... statement n; ก MAE" if ? P"H"!B K MP [K !F WB!?K KEDE" A if KกFKกEDE" กE" if WB P"H!?[K K!EDE" A if 0 กABE" if

#include <stdio.h>

#include <conio.h> int xh; main() clrscr(); printf("Please press any key."); ch = getche(); if (ch == '\r') printf("\n Enter key ( ASCII code = 13 ) was pressed ."); printf("\n Out of if statement");

if (ch == '\r') printf("\n Enter key ( ASCII code = 13 ) was pressed ."); ก ก ก ch = getche(); ! enter " #

$ if %& Enter key ( ASCII code = 13 ) was pressed . ก$

#'$ก if %& Out of if statement 4.5.2 / #0 if else ?E" "ก P"H 2 Pก WB P"H?K AMBEDE" @ (A) "I!A if WB P"H?[K AMBEDE" @A else (@B) กE H E" if else H? B J " 10.18 IH E" if else E" if else I F if (expression) statement A1;

Page 41: (Q12 หน่วยทีุ่10 น325 น403)

297

ก : www.Adisak51.com

¢ statement An; else statement B1; ¢ statement Bn; ก M (Expression) A if !B K MP [K WB!?K กKE D!AE" M if P E" @ A [KBกKก if !EDE" @ B WB Expression !?[K กKEDE" M else P E" @ B Bก!EDE" @ A

+ , 10.18 กE H E" if else 0 if else

#include <stdio.h> #include <conio.h> main() int score1; printf("\n Please type your score : ");

P"H-[K

กKกE" if else

E" D! O (@ B )

K

E" D! O (@ A)

Page 42: (Q12 หน่วยทีุ่10 น325 น403)

298

ก : www.Adisak51.com

scanf("%d",&score1); if (score1 >= 50) printf("You pass the examination."); else printf("\n You failed the examination.");

?กกv!Kกv Eก[AD score1 BE score1 ก 50 WBกก!MP!ก 50 KB? K กKEDE" A if P printf("You pass the examination."); BกKก if !EDE" A else D!WB score1 ก 50 BB!?[K P score1 Bก! 50 กKEDE" M else P printf("\n You failed the examination."); BกKกE" !EDE" M if 4.5.3 / #0 if else if E" F B else if "HBAE" else EAMBABE" else if "BD"DB ก ABกกDAK" Pกกก! 2 Pก H? B J " 10.19

+ , 10.19 กE H E" if else if

K

K

P"H1

[K E" @" 1

P"H2

[K

E" @" 2

P"H N

กKกE" if else if

K

[K

E" @" n

Page 43: (Q12 หน่วยทีุ่10 น325 น403)

299

ก : www.Adisak51.com

IH E" if else if if (expression1)

statement A; else if (expression2) statement B; ... else if (expression n) statement N; else statement N + 1;

if else if #include <stdio.h> #include <conio.h> main()

int score1; clrscr(); printf("\n Please type your score : "); scanf("%d",&score1); if (score1 >= 80) printf("\n You get A. \n Congratulation"); else if (score1 >= 70) printf("\n You get B."); else if (score1 >= 60) printf("\n You get C."); else if (score1 >= 50 ) printf("You get D.");

Page 44: (Q12 หน่วยทีุ่10 น325 น403)

300

ก : www.Adisak51.com

else printf("\n You get E" );

(ก)!ก $ *"*+* ก,-+#

./#ก$0* 4.6 / #0ก / 9/ c&

4.6.1 / #0 for E" for ?E" AMBE]FE P"H กDABก "!MP!H D E]FEP" P"H"กEM?K Kก" P" P"H?[KAMBกE IH E" ? F

for ( K"1; K"2; K"3) E" 1 E" MP for ( K"1; K"2; K"3) E" " 1 E" " 2 ... E" @B K" 1 ? K"ABกEM!"DBAMBกD"ABAกE]FE

K" 2 ? K"AB? P"H!B 1 A 2 !!F P ?K MP [K

K" 3 ? K"กEMก "MP!H D"ABAกE]FE E" M for WBกก! 1 E" KDB I!JAP" M ก P"AMB?

E" @ P" KกAJG]E" "I!AกE]FE for KDB 1 E" (E" กE]FEMP P"HP"ก[?!ก) E" for H? B J " 10.20

0 กABE" for กHDF D! 1 WL 100 #include<stdio.h> main() int i,ans; ans=0; for(i=1;i<=100;i++) ans=ans+i;

Page 45: (Q12 หน่วยทีุ่10 น325 น403)

301

ก : www.Adisak51.com

printf("answer is %d",ans);

KกกEกกEMAMBD i ?D ! ans ?D"ABก[!ED A for F AH"Aก E" i++ MWL AMB i+1 " ]L" MWL A loop FKEก "D i 1 !

+ , 10.20 กE H E" for 4.6.2 / #0 while while ?E" AMBกE]FE? O (Loop) กGกE E กE" for D!D! กD "!KE"! D!DB P"H"?[KKL KกKกE" while B ^FKNM"กE ]FE!"F@ (Endless Loop) กE]FE while H B J " 10.21 E" while I F while ( K P"H) statement ; MP while ( K P"H)

E" " 1;

K P"H-

[K กKก for

E" D! O

"MP!D"ABAกE]FE

กEM!"DBAMBก!D"ABAกE]FE

Page 46: (Q12 หน่วยทีุ่10 น325 น403)

302

ก : www.Adisak51.com

E" " 2; ... E" @B;

while KEกE]FED!P" K P"HAMB i?K ED!Kก" iH K P"H?[K

+ , 10.21 กE H E" while

0 while statement #include <stdio.h> #include <conio.h> int counter ; char word[20] = "microcontroller"; main() counter = 5; while (counter < 11 )

P"H-[K

กKกE" while

E" D! O

" P"HAกE]FE

K

กEM P"HAกE]FE

Page 47: (Q12 หน่วยทีุ่10 น325 น403)

303

ก : www.Adisak51.com

printf("counter \t=\t%2d\tmy school is\t%s \n",counter,word); counter++; (ก)ก " counter &! 5 # '%ก$2)

while *$&3% counter < 11 !" 3& !" $ Printf ("counter \t=\t%2d\tmy school is\t%s \n",counter,word) ; #'$ counter ++ 2'!ก*"& %

counter ก" #3% !"ก6$&3ก$"*+3% !$6 counter 3&.ก& 'กกก$2) .&)ก$2) 6 4.6.3 / #0 do while do while ?E" AMBกE]FE? O (loop) กGกE BกE" while D!D! กD "E" FกE DE" 1 ก!"K P"H WB P"H"?K KE D! WB P"H?[KKL กKกE" do while E" FDB กEMAMBก" P"H?[KB ^FKNM"กE ]FE!"F@ (Endless Loop) ก" P"H?[K ! KกE 1 ก!กKกกE]FE กE]FE do whileH B J " 10.22 E" do while I F do E" " 1; E" " 2; ... E" @B; while ( K P"H) ; do while KEกE]FED!P" K P"HAMB i?K ED!Kก" iH K P"H?[K ก[KกKกกE]FE 0 do while statement

#include <stdio.h> #include <conio.h> int counter ; char word[20] = "Bodindecha"; main()

Page 48: (Q12 หน่วยทีุ่10 น325 น403)

304

ก : www.Adisak51.com

clrscr(); counter = 11; do /* start do while */ printf("counter \t=\t%2d\tmy school is\t%s \n",counter,word); counter++; while (counter < 11 ) /* end do while */ /* end main() */

กF KKJ ก! BKL กEM "DB AMB counter !? 11 B KL HBI!กE]FE do while EDE" printf ("counter \t=\t%2d\tmy school is\t%s \n",counter,word); ก!BKL ! P"H P counter < 11 ?K MP!

+ , 10.22 กE H E" do while

4.7 ก 0" sbit ก0& XBYTE 4.7.1 กAB D sbit กกEกHBIJAKDH ] MCS-51 WกEF 8 D D!AกHก"กEกHBIADEM! "HBBD D C51 BDiAMB F 1) "DBกDB กDB PF"M!KEDEM! HBBD 2) DB EกกกAB D BกEM!KABD"!KกD"กAHB" 1

P"H-[K

กKกE" do while

E" D! O

K

กEM P"HAกE]FE

Page 49: (Q12 หน่วยทีุ่10 น325 น403)

305

ก : www.Adisak51.com

3) ED"BKกHB 2 AB BMPกD" MกDB กDKP" MH HBIDกG (Char) !?กMP AMBDKHBID" 7 MกHBI!? 0 !? ก MกHBI? 1 !? BDATA ?HBIDEM! H M!KEJA"HBDDEM! 1FH - 20H (AJG]HH~MกB? 0x1F -0xFF) 0 กHกE" sbit #include <reg51.h> bdata char test; /*D test WIกก[BAM!KEHBI! BDATA*/ sbit sign = test^7; //กEMAMB sign I!ADEM! D" 7 A test void main(void) test = -1; //กEMAMB test !? if(sign==1) //DKD " 7 WB sing !? 1 test =1 // KกE" if WB sing ? 1 AMBD test ?ก 4.7.2 กAB D XBYTE กDD! ! HBIก@กJกH MCS-51 KE! D AJG]กEMAMBB H D!DJAกB M!FBก! XBYTE ]L" ก[I!AC absacc.h Fก!กAB DB กEM #include <absacc.h> "!MH ก กAB KDB กEMDHLF D"DB ก I F #define variable XBYTE[adress16] variable D" DDB กEMI!M define XBYTE [address16] EMกEM D address16 PH 16 DDB HAIH~Mก 0 กHก XBYTE #include<reg51.h> #include<absacc.h> /* B JAAC absacc * / #define portA XBYTE[0xA000] //กกEMDAB D #define portb XBYTE[0xA001] //! XBYTE #define portc XBYTE[0xA002] #define portcon XBYTE[0xA003] void delay(int count); //กAB C ก" delay

Page 50: (Q12 หน่วยทีุ่10 น325 น403)

306

ก : www.Adisak51.com

void main (void) //ก"DBE "F portcon = 0x81; //กEM!@ DAMBก portcon portB = 0x02; //! ! 0x02 ก portB while(1) //EA loop while !IBK portC = 0x7f; //กEMก! ! 0x7f AMBก portC portA = portC; //! !A portC AMBก portA delay(10) ; void delay(int count) //กM! int i,j; for (i=0;i<count;i++) for (j=0;j<500;j++) 4.8 0 ก "ก Keil µVision 2

ก KEIL C51 B HLFG KEIL Software ABHกJG] J " 10.23 ] ก กก BAกก WHกกE" AMB?JGP" (HEX) P"Lก AD]B

+ , 10.23 ก KEIL µVISION 2

Page 51: (Q12 หน่วยทีุ่10 น325 น403)

307

ก : www.Adisak51.com

กHกE" JG]ก] MCS-51ก KEIL µVISION 2 EHFDAB F *09 1 B CEMก[CABAกHก D! ! AMCS51B *09 2 dก KEIL µVISION 2ก" Keil µVision2 MP" Start →All Program →Keil µVision 2 MBD! ก J " 10.24

+ , 10.24 MBD! MกH ก KEIL µVISION 2

MBD! H กกB 1) Project Windows EMB ก E" AกAMBI!AI HEX C 2) Workspace Text Editor ?[ก]D ABEMHกE" 3) Output Windows ?DDK H ก"HHLF *09 3 "I Project → New Project KBMBD! Create New Project J " 10.25

Workspace Text Editor Project Window

Output Windows

Page 52: (Q12 หน่วยทีุ่10 น325 น403)

308

ก : www.Adisak51.com

+ , 10.25 กABI P"B Project

PกAC MCS51 "B HLFKกHFD" 1 KกFกEMP" MP Project AM! D! DF P"? LAB01 Pก"P"C Pก"@¥ Save J " 10.26

+ , 10.26 กB Project

*09 4 HBI!MBD! Select Device for Target ¦Target1§ BAMBPกG H ] MCS-51 "AB D! ! PกG Atmel Bก Pก AT89S52 Pก"@¥ Ok KEWKกก[ก !DB กกB CD~H MCS-51 ABMP! J " 10.27 AMBD Yes KBCH KCA! File AMBD! H Project Workspace

Page 53: (Q12 หน่วยทีุ่10 น325 น403)

309

ก : www.Adisak51.com

+ , 10.27 PกIBD ] กB CD~

Page 54: (Q12 หน่วยทีุ่10 น325 น403)

310

ก : www.Adisak51.com

*09 5 Pก"I File →New BMBD! EMกH¨ก J " 10.28

+ , 10.28 MBD! EMกHMกE"

*09 6 EกHMกE" F #include <reg51.h> #define TRUE 1 sbit P0_0 = P0^0; // Port P0.0

Page 55: (Q12 หน่วยทีุ่10 น325 น403)

311

ก : www.Adisak51.com

sbit dri_p = P1^4; void delay(int i); void delay(int i) int j; for(;i>0;i--) for(j=0;j<1000;j++); void main(void) dri_p = 1; // driver select P0 =0x00; // clear port P0 while(TRUE) P0_0 = 1; // high port P0.0 delay(100); // delay P0_0 = 0; // low port P0.0 delay(100); // delay *09 7 Pก"I File → Save As "! File Name A!P"@ก@ .C BA D! ABP" LAB01.C J " 10.29

+ , 10.29 กLกCAMB?JG]

Page 56: (Q12 หน่วยทีุ่10 น325 น403)

312

ก : www.Adisak51.com

*09 8 AB@¥Hก" Source Group1 AMBD! Project Workspace "I!Pก Add File to Group ¦Source Group1§ PกC LAB01.C ก@¥ Add M KกFAMBPก@¥ Close C" "HB I!A Source Group1 AMBD! Project Workspace J " 10.30

+ , 10.30 ก "CHBA Source Group1

*09 9 Eก ก"I Project → Built Target MPก" F7 WB! HB AO " MBD! Output Windows J " 10.31 *09 10 กB C HEX P"Eก AD] AMBPกI" Project →Option for Target ¦Target1§ "W Target EกกEM X-tal (MHz) !ก 11.059 J " 10.32 Pก"W Output กPก"MB! Create HEX File J " 10.33 Bก"@¥ Ok

Page 57: (Q12 หน่วยทีุ่10 น325 น403)

313

ก : www.Adisak51.com

+ , 10.31 กI Built Target

+ , 10.32 กEM!W"H X-tal "ABM!? MHz

Page 58: (Q12 หน่วยทีุ่10 น325 น403)

314

ก : www.Adisak51.com

+ , 10.33 กEMกB C HEX

*09 11 Eก ก"I Project → Built Target กF HB KB C HEX "MBD! H J " 10.34

+ , 10.34 B C HEX " Built Target EC HEX "BEกก AD]BP" ก

5. ก ก &$7&$#0== ! DTMF 5.1 !#&07ก

ก@กDกAB กE MCS-51 !กNN DTMF H AB@" F

Page 59: (Q12 หน่วยทีุ่10 น325 น403)

315

ก : www.Adisak51.com

LM7805

1N4001

R 1K x 8 LED x 8

AT

89

C2

05

1

74

LS

24

5

1K

LED1

100UF

10UF

10UF 1UF

JP1

BATT

3 V

C1

C2

C3 C4

IC1

IC2 IC3

IC4

D1R1

D2R4

R5

R6

R7

R8

R9

R10

R11

20201

1810

- ++ +

19

18

17

16

15

14

13

12

101910

18

17

16

15

14

13

12

11

2

3

4

5

6

7

8

9

LED10

LED3

LED4

LED5

LED6

LED7

LED8

LED9

11

12

13

14

15

17

161

4

9

6

5

8

7

2

3

3.579545 MHz

100K

100K 300K

0.1UF

0.1UF

C7

C8R12

R13

R14

R15

LED 2

11

2

3

8

9

TEL

PHONE

MT

88

70

SW2

SW3

LINE PHONE

X1

K1

J2 J3

+

+

~

~

W04

DB1

AC/DC 6V

CX

CX

0.1UF

0.1UF

1K

CX

0.1UF

CX

0.1UF

1K

R3

SW1

X2

X25

1

6

7

10

K

10

K

+5V

R16

R17

5.1.1 IC" "ก[BAM!KEกกก! 80 I 5.1.2 EกC" BMIKก !DB ก 5.1.3 Dก@[H IC" B 5.1.4 AB]D 8 ! Aก@กddMCCv 5.1.5 " P" ABCCvB 8 ! !

5.2 ก / *@

กE ! กB? 2 ! P!H EMB"DD!กNN DTMF @" ก !@@กCCvJกAB K ]D

KกJ " 10.35 K กE H K"Kก IC4 ?] WMNN DTMF Kก AMB?H" HNN"? Strobe " LED2 @กF "กD X-tal X1 กEM ! R13 C7 กEM!ก C8 R17, R16 EMB"? KHDกD! JAD]

+ , 10.35 KWMNN DTMF ] MCS-51 IC2 ? AT89C2051 H Atmel EMB"@Kกก

F M KABNNกKก X-tal !ก IC4 IC2 KE "Kกก HBI H M!KEกJA] EกDKHBI "BKกกWMNNKก IC4 P"ABกEMกE H ก SW2 SW3 EMB"[H Iก " SW2 EAMBก [HLF " SW3 KEAMBก B

Page 60: (Q12 หน่วยทีุ่10 น325 น403)

316

ก : www.Adisak51.com

IN 2

IN 4

IN 6

IN 8

LOAD1

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

IN 1

LOAD2

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

LOAD3

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

IN 3

LOAD4

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

LOAD5

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

IN 5

LOAD6

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

LOAD7

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

IN 7

LOAD8

150

1K

MOC3020

1

2 4

6

G

A2

A1

BTA10

AC 220V

IC5

IC6

IC7

IC8

IC9

TR1

TR2

TR3

TR4

TR5

TR6

TR7

TR8

IC10

IC11

IC12

R18

R19

R26

R27

R28

R20

R21

R29

R22

R30

R31

R23

R24

R32

R33

R25

K2

+ , 10.36 K K]D 8 !

M! K!CH KBKก D ACMP DC 6-12 D ! DB1 ?KกDC P"KHFH D"D!HBก IC1 LM7805 AMB D @D " 5 D v?CF AMBก K LED1 ?D WH กE ] C1 C2 EMB"ก !CF IC2 FK! D1 P"ABDD"E HBIAH!CF AMBKEHBIB D2 EMB"!AMB Bก"DD" JP1 PกABDD"E MP!WB!ABAMBd KB C4, R3 ? K]D ! IC3 EMB"?C

Page 61: (Q12 หน่วยทีุ่10 น325 น403)

317

ก : www.Adisak51.com

P"v ก IC2 กM KกกK!กก D @DH IC3 K IHBI" LED3 | LED10 ก ML" E? @DAMBก!H K]D

K@ก@กCCvJก ? K]D 8 ! IC5 | IC12 ? D]D P"EกAMBHกH D TR1-TR8 E@@กCCv"DB กB J " 10.36

5.3 ก / *"ก

A!H ก ? J " 10.37 B! MB"กE ? 3 !BกP 1 !@[ 2 !H ก HBI 3 !กDKกกNN DTMF

# 1 K@[ ABNNกD KกJก INT0 INT1 ?!AกD ABKD R3 ก!"" BI @D"E@ กM!KE" 24H ก[!"" Kก R3 P""KE!ABA!H กM! " DEALY_SHOW

# 2 ?ก HBIM KกCF KH"DB KE!KกM!KEก? Lookup Table EHBI ก! กDKกกKก [KกNN Strobe @กF Aก AML" I Mก กกMH n*o KM@ก "F M EกAMB@ก BEก A!" 3 # 3 ?กDKMHKกNN DTMF H ก[B"M!KEDEM! 20H BEกHBI"กEMMH 0 - 8 WBD !A K !?I" LED3-LED10 WBก n0o ?กก[HBI AM!KE]L" K PF"DF D!M!KE" 25H ?DB! n9o ?!H กกBHHBI AM!KEH D! ¦#o ?ก"AMB I" NEW_DISP กDKกก P"กBH EIAM! ;********************************************** ;***** DTMF CONTROL DISPLAY ***** ;********************************************** STROBE BIT P3.5 ; ?[ก "ABกEM! Strobe H P3.5 IN_A BIT P3.7 ; ?[ก "ABกEM! IN_A H P3.7 IN_B BIT P3.0 ; ?[ก "ABกEM! IN_B H P3.5 IN_C BIT P3.1 ; ?[ก "ABกEM! IN_C H P3.4 IN_D BIT P3.4 ; ?[ก "ABกEM! IN_D H P3.1

Page 62: (Q12 หน่วยทีุ่10 น325 น403)

318

ก : www.Adisak51.com

INC_SW BIT P3.2 ; ?[ก "ABกEM! INC_SW H P3.2 DEC_SW BIT P3.3 ; ?[ก "ABกEM! DEC_SW H P3.3

+ , 10.37 H ก

ORG 25H ;"DBH M!KE DATA: DS 50H ;K PF"AM!KE 50H ! ORG 0000H ;"DBH M!KEก SJMP START ;กE" START

STARST

ไม

ไช

กก " 0 "

#ก$%

#&'# +1

กก " # "

แสดงผลขอมล

ไม

ไช

กก " * "

ไม

ไช

ไช ไม

INT0

R3=#24H

R3=0F8H

เพมคา R3 อก 1คนคาใหแอดเดรส

24H

ไม

ไช

RETI

INT1

R3=#24H

R3=05H

ลดคา R3 อก 1คนคาใหแอดเดรส

24H

ไม

ไช

RETI

มการกด คย *

กก " 9 "

Clear P1

ไช

ไม

Page 63: (Q12 หน่วยทีุ่10 น325 น403)

319

ก : www.Adisak51.com

ORG 0003H ;D Jก INT0 AJMP INT_0 ;กE" INT_0 ORG 0013H ;D Jก INT1 AJMP INT_1 ;กE" INT_1 ;**** ?กAB INTERRUPT Jก P" "!HBI !HBI INT_0: MOV R3,24H ;E!HBIKกM!KE 20H>>R3 CJNE R3,#0F8H,END_INC ;!I @"KM! RETI ;WB?!I @BAMBก"กMก END_INC: INC 24H ; "!กM! HLF 1 ! MOV R3,24H ;E!HBI" "!ก[B" R3 RETI ;กKกก!กD INT_1: MOV R3,24H ;E!KกM!KE 20H>>R3 CJNE R3,#05H,END_DEC ;!D"E@"M! B RETI ;WB?!D"E@BAMBก"กMก END_DEC: DEC 24H ;!กM! 1 ! MOV R3,24H ;EHBI" 24Hก[B" R3 RETI ;กKกก!กD START: SETB INC_SW ;กEMAMB? n1n P"? @D SETB DEC_SW ;กEMAMB? n1n P"? @D SETB EA ;กEMAMBกD F M SETB EX0 ;กD Jก INT0 SETB EX1 ;กD Jก INT1 SETB IT0 ;PกE"HH H NN SETB IT1 ;PกE"HH H NN SETB STROBE ;กEMAMB? n1 n P"? @D MOV 20H,#00H MOV 21H,#00H MOV 24H,#08H MOV R0,#DATA MOV R7,#50H ;!"DBAM!KEKE 50H ! MOV A,#00H ;!HBIAKD A

Page 64: (Q12 หน่วยทีุ่10 น325 น403)

320

ก : www.Adisak51.com

;*** HBIAM!KEDF D!" 00 | 50H **** CLEAR: MOV @R0,#00H ;กEMAMB R0 ก[!~HBI INC R0 ; "! R0 DJNZ R7,CLEAR ;KEMP!WB!AM! ;*** !HBI"กEMB"M!KEก **** DISPLAY: MOV P1,#00H ;!HBIA D P1 LEFT: MOV R1,#63D ;กEMKE!HBI"KAMB MOV R6,#00H ;!HBIAKD R6 MOV DPTR,#TABLE ;กEM! DPTR P"AMB?~ LOOP_LEFT: MOV A,R6 ;E!HBIKกKD R6 ก[B"KD A MOVC A,@A+DPTR ;dD Lookup Table MOV P1,A ;E!HBI"B ก " D P1 JB STROBE,CHEAK_INT ACALL DELAY_SHOW ; กกM! INC R6 ; "!HBIAKD R6 HLF1! DJNZ R1,LOOP_LEFT ;WBHBIAKD R1!!ก 0 RIGHT: MOV R1,#63D ;กEMKE!HBI"K MOV R6,#62D ;กEMDEM! HBI"KAMB MOV DPTR,#TABLE ;กEM! DPTR P"?~ LOOP_RIGHT: MOV A,R6 ;E!HBIKกKD R6 ก[B"KD A MOVC A,@A+DPTR ;dD Lookup Table MOV P1,A ;E!HBI"B ก " D P1 JB STROBE,CHEAK_INT ;"DK"MกกกD ACALL DELAY_SHOW ;กกM! DEC R6 ;!HBIAKD R6 1 ! DJNZ R1,LOOP_RIGHT ;WB R1!!ก 0 AMB AM! SJMP DISPLAY ;กE" DISPLAY AM! ;**** !HBI"v! **** NEW_DISP: MOV R0,#DATA ;E! "DEM! "K Bก[B" R0 LOOP: MOV A,@R0 ;EHBI""FB R0 ก"KD A CJNE A,#00H,DISP ;DKHBIE@B? 00 MP!

Page 65: (Q12 หน่วยทีุ่10 น325 น403)

321

ก : www.Adisak51.com

SJMP NEW_DISP ;WBHBI? 00 AMB"EAM! DISP: MOV P1,A ;!!ก 00 AMBEHBIAKD A ก D P1 ACALL DELAY_SHOW ;กก!M! JB STROBE,CHEAK_EDIT;DKNNกก P"กBHHBI INC R0 ; "!ED! SJMP LOOP ;"DBEAM! CHEAK_EDIT: ACALL IN_KEY ;กก!HBI CJNE A,#00001001B,A1 ;!"HB!ก n9oMP! AJMP EDIT ;!ก n9o กก!กBHHBI A1: CJNE A,#00001011B,NEW_DISP ;!"HB!ก n*oMP! SJMP DTMF ;!ก n * § DTMF

;*** ก!!KกNN DTMF *** CHEAK_INT: ACALL IN_KEY ;กก!HBI CJNE A,#00001011B,DISPLAY ;!"HB!ก n*oMP! DTMF: MOV P1,#00H ;!HBIA D P1 MOV P3,#0FFH ;AMB D P3 ? @D MOV 20H,#00H ;!HBIA 20H MOV 21H,#00H ;!HBIA 21H MOV R0,#DATA ;ก[!"DBDEM! "K Bก[HBIKD R0 MAIN: CALL IN_KEY ;กก!!HBI CALL CHEAK ;กก!DK!HBI JNB STROBE,$ ;DKก! SJMP MAIN ;กกE" MAIN IN_KEY: MOV C,IN_A ;ก[!W" IN_A B" CกD MOV 00H,C ;E!W"CกDB"D 00H (20H.0) MOV C,IN_B ;ก[!W" IN_B B" CกD MOV 01H,C ;E!W"CกDB"D 01H (20H.1) MOV C,IN_C ;ก[!W" IN_C B" CกD MOV 02H,C ;E!W"CกDB"D 02H (20H.2) MOV C,IN_D ;ก[!W" IN_D B" CกD MOV 03H,C ;E!W"CกDB"D 03H (20H.3)

Page 66: (Q12 หน่วยทีุ่10 น325 น403)

322

ก : www.Adisak51.com

MOV A,20H RET ;กKกก! ; ****** ก!DK! CHEAK: CJNE A,#00000001B,DIS_02 ;!"B!ก n1o MP! DIS_02 CPL 08H ;ก!WH D" 08H(21H.0) MOV P1,21H ;E!HBI"DEM! 21H ก" D P1 CALL CHEAK_SW ;กก!ก!D AJMP END_RET ;กก! DIS_02: CJNE A,#00000010B,DIS_03 ;!"B!ก n2o MP! WB!! DIS_03 CPL 09H ;ก!WH D" 09H(21H.1) MOV P1,21H ;E!HBI"DEM! 21H ก" D P1 CALL CHEAK_SW ;กก!ก!D AJMP END_RET ;กก! DIS_03: CJNE A,#00000011B,DIS_04 ;!"B!ก n3o MP!WB!AMB" DIS_04 . . DIS_0A: CJNE A,#00001100B,DIS_0B ; AJMP NEW_DISP ;ก NEW_DISP DIS_0B: CJNE A,#00001010B,END_RET;!"B!ก n0o MP!WB!กKกก MOV @R0,P1 ;ก[!HBI"ก P1 F MB"@R0 MOV P1,#00H ;HBI" D P1 CALL DELAY ;กก!M! MOV P1,@R0 ;E!HBI"Bก D 1 กF CALL DELAY ;กก!M! INC R0 ; "DEM! H M!KEHLFก 1 ! MOV P1,#00H ;HBI" D P1 MOV 21H,#00H ;HBI"DEM! 21H END_RET: RET ;กKกก! EDIT: MOV A,@R0 ;E!HBI"M!KEDEM! "B R0 >>A MOV P1,A ;E!HBIAKD A>>> D P1 JB STROBE,$ ;DKก!

Page 67: (Q12 หน่วยทีุ่10 น325 น403)

323

ก : www.Adisak51.com

EDIT_DIS: ACALL IN_KEY ;กก! ACALL CHEAK ;กก!DK! JNB STROBE,$ ;DKกก SJMP EDIT_DIS ;ก" EDIT_DIS CHEAK_SW: JNB STROBE,$ ;DKกก CALL DELAY ;กก!M! JB STROBE,$ ;DKก! RET ;กKกก!

;*** ก!M! ***** DELAY_SHOW: MOV R2,#0FH ;กEM! "AMB R2 DELAY1: MOV R3,24H ;E!" 24H>>> R3 DELAY2: MOV R4,#0FFH ;กEM! "AMB R4 DJNZ R4,$ DJNZ R3,DELAY2 ;!" R3WB!!ก 0 E" DELAY2 DJNZ R2,DELAY1 ;!" R2WB!!ก 0 E" DELAY1 RET ; กKกก! DELAY: MOV R4,#8FH ;กEM! "AMBกKD R4 DELAY_1: MOV R5,#0FFH ;กEM! "AMBกKD R5 DJNZ R5,$ ;!" R5 DJNZ R4,DELAY_1 ;!" R4WB!!ก 0 E" DELAY_1 RET ; กKกก!

;********************************************************************** ;******* HBI"K (ก[BAM!KEก) ********* ;**********************************************************************

TABLE: DB 81H,42H,24H,18H . . DB 18H,81H,24H,42H DB 66H,18H,0FFH END

Page 68: (Q12 หน่วยทีุ่10 น325 น403)

324

ก : www.Adisak51.com

Telephone

LINE PHONE

1 2

JP1

Close 1-2Back- up

SlowFast

Strobe

5.4 ก $#&"

DD!HB K J " 10.38 กAB DE F

+ , 10.38 กD!AB HBก

5.4.1 P""DBdP" F ก DIกEMKกM!KEกA] (Lookup Table)

5.4.2 [ก"@¥ Fast MP Slow ก"@¥MOF K AK "@¥D Fast K?ก "[H ก" IC" P"ก"@¥D Slow K?ก[

5.4.3 ก" IAMBกMI MPABA!H Speaker Phone B ก"@¥D MH n * n H EAMB!H @ก กก@¥" @กF EAMB"?NN Strobe @กF

5.4.4 กก"MHD"@¥H n1o | n8o ADFW" AD!! B! กกML" F ?กd กกF ?กd MกDB กdF M Bกก[AMBก"@¥D MH n9o 5.4.5 ก"IH C" AMBกEMIBEMPHFD" 4 M KกFAMBก@¥D MH n0o " H IKก 1 F KกFAMBvID!Bก@¥D MH n0o MPF กD@กF KI"กEMBF M AกvHBIv!ก 80 !

Page 69: (Q12 หน่วยทีุ่10 น325 น403)

325

ก : www.Adisak51.com

5.4.6 Eกก@¥KกvHBIกก@¥D MH n0o]FEก 1 F BDB@¥D MH n#o K IC" D"กEMB W[H ก" B HB 2

5.4.7 ก"กBHHBIM Kก"vHBI กก@¥ Slow [AMBB P""K ก" IBBO KWL DEM! "KEกกBHAMBEกก"@¥D MH n9o K@ก

5.4.8 AMBEก"HBIAM!BDDB กEMPHB" 4 HB" 5 M KกFAMBก"@¥D MH n#o IKEกกBH"AMBAM! HB กกBHHBI@กF Kก"@¥D MH n0oM KกกBHIA 1 DEM! !F M Kกv[K!DB ก@¥D MH n0o ]FEก D!ก@¥D MH n#o !F ( D! KกHB" 6 ]L" ?กvHBIF MAF ก ) 5.4.9 M Kก"ก[KBAMBW กB IHBIK I!" MกDB กกBHWED! BEกกBHIHBIAM!B 5.4.10 Aก"DB ก"Kก[HBIBAB M KกWM! K!CกWEB AMBPกKADEM! Back-up ( Close "H 1-2 H JP1) 5.5 ก @#& ""ก*

5.5.1 W IC1,IC2 IC3 กKก 5.5.2 K[D AC MP DC HBI! กD" LED1 KDB ! !

C +VCC 5 DA K WB LED1 !! AMBDK "vKกD,D]ก ,HFH K ,HFH Dก[K@ , ] 7805 HFH LED1 DE 5.5.3 AMBABCH[ก ( ) "H 20 ( +VCC )H ][กกD IC3KกFAMBEกHB ML" กH18 WL H11 P"K@กH กD" LED3 |LED10 KDB ! AH"WIกH WB!! AMBDK PCB KK KWL กB D!WB!! @ก AMBEกDK IC3 HFH LED1

5.5.4 A! IC4 ][กกD] D! DJ " 10.32 M KกFAMB ก"D]AO v LED2 KDB ! NN Strobe @กF WB!! AMBDKHFH LED1 K"KKกก KB

5.5.5 A! IC2 IC3 ][กกD] M KกFAMBก"D]]D กD" KDB ! DI"กEMB AMBก"D][ P" (WBMก!A! IC4 K! ]AB X-tal !ก IC4)

5.5.6 M KกFAMBDMHB กกAB กF

Page 70: (Q12 หน่วยทีุ่10 น325 น403)

326

ก : www.Adisak51.com

C" @BNN DTMF ABEC" MIA D! O "IBก W"E P"@] MP©FE P"EFE @ MPEABdd@กCCvDK@D! OB! WE@M !ªFEMP MกEMA กGD กEMAMBก" D!I ?"DB กM! ก" WEBกEMIO MODEM! Bก@¥[H กM! AMB!ก"DB ก MกWL "กEMB ก[EAMB! "กEMกE WBBiกB "DB" http://www.adisak51/project08.html

Page 71: (Q12 หน่วยทีุ่10 น325 น403)

327

ก : www.Adisak51.com

# LCD ?@ก "ABกCD"E BF DกG DH IJ K@ก D!I!JA LCD ! ก? 2 JAMN! O P Dot Matrix (Text) ?DกG KEDกD! กD@!"PกAB ! Graphic W Bit-Map B J D! O I2C BUS !Kก Inter-Integrated Circuit Bus MWL ?กP"@ก ] P"ABDD!P"M! ก@กJก HLFG Philips Semiconductors K@@! MMกP DB กAMB]MPIWDD! " @JADBNN 2 B P HBI NNก ABกEMK MกE กD!!กH @ก ABกD!HBI NNกH @กD!DHก !กกEMMPDEM! EMDD!@กD!D KABMHBIกกEMJKก"HH @กD!D HBI I2C ?HBI@กMP SDA !NNก@ก MP SCL SDA SCL ?NN 2 D!I!กM! K!CกกD!DDB Iก +5D P"?!กDD!AB F SDA SCL KWKกI I2C ?กกEMIH กDD!MPD "กP" I2C กE 5 J 1) ! 2) "DBกW!HBI 3) M@กW!HBI 4) HBIE I! 5) กD ก NN[ก (A/D: Analog to Digital Converter) "ก" ! D!P" !H CCv MPH กCCv AMBก?NNKD"I!AIH H~ P n0o ก n1o ]L" ?NN"!HLFI!ก JG]?JG"ABH!ก]@กDกI AKK@ JG] กEAB กEM MCS-51 JG]?JG" B !D!กEHBAK @ ?JGD~!HLFก () PM@!AกกBEABก DกIP"B ! D กH JG] ก I!DKWI HBกBกJG]A]BF Inline Assembly ก ก (Link) กHBBก JG]KL MกIB"!DB กLกG B MPWDกJAH ]กก