Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
10 ก ก
ก กกก
!" www.Adisak51.com
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
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?
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 ! ]
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
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
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
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! ก
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
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
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
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
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
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
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
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
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
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ก
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!ก
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@
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
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
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
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
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
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
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
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
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! !
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
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
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! ก
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()
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
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
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
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
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ก"ก
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
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;
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)
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
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.");
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;
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
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
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()
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
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
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
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
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
309
ก : www.Adisak51.com
+ , 10.27 PกIBD ] กB CD~
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
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]
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
313
ก : www.Adisak51.com
+ , 10.31 กI Built Target
+ , 10.32 กEM!W"H X-tal "ABM!? MHz
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
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
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
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
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
ไช
ไม
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
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!
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)
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ก!
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
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 !
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
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
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 ]กก