Giáo trình Kỹ thuật vi điều khiển - Chương 6: Phục lục - Lâm Tăng Đức

Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
Ch−¬ngꢀVIꢀ  
phô lôc  
ꢀ
6.1ꢀH−íngꢀdÉnꢀsöꢀdôngꢀKITꢀ  
Ng−êiꢀhäcꢀph¶iꢀn¾mꢀv÷ngꢀb¶nꢀ®åꢀbéꢀnhíꢀcñaꢀKITꢀsau:ꢀ  
§ÞaꢀchØꢀ  
ThiÕtꢀbÞꢀ  
Ghiꢀchóꢀ  
0000hꢀꢁꢀ1FFFhꢀ  
4000hꢀꢁꢀ7FFFhꢀ  
EEPROMꢀ Chøaꢀch−¬ngꢀtr×nhꢀMonitorꢀ  
RAMꢀ  
Chøaꢀch−¬ngꢀtr×nhꢀøngꢀdôngꢀ  
8000hꢀꢁꢀPortAꢀ:ꢀ§iÒuꢀkhiÓnꢀLCD.ꢀ  
8001hꢀꢁꢀPortBꢀ:ꢀDataꢀbusꢀcñaꢀLCD.ꢀ  
8002hꢀꢁꢀPortCꢀ:ꢀNhËnꢀmꢂꢀcñaꢀbꢃnꢀphÝm.ꢀ  
8003hꢀꢁꢀCWꢀꢀꢀꢀ:ꢀThanhꢀghiꢀ®iÒuꢀkhiÓn.ꢀ  
8000hꢀꢁꢀ8003hꢀ  
8004hꢀꢁꢀ8007hꢀ  
8255ꢀ(1)ꢀ  
8004hꢀ-ꢀPortA:ꢀ§iÒuꢀkhiÓnꢀcÊpꢀnguånꢀchoꢀc¸cꢀAnotꢀꢀ chungꢀ  
cñaꢀLEDꢀmatrixꢀ(c¸cꢀhꢃng).ꢀ  
8005hꢀꢁꢀPortB:ꢀ§iÒuꢀkhiÓnꢀ®ÌnꢀmꢃuꢀxanhꢀcñaꢀLEDꢀꢀ matrixꢀ  
8255ꢀ(5)ꢀ (c¸cꢀcétꢀxanh).ꢀ  
8006hꢀꢁꢀPortC:ꢀ§iÒuꢀkhiÓnꢀ®Ìnꢀmꢃuꢀ®áꢀcñaꢀLEDꢀꢀmatrixꢀ  
(c¸cꢀcétꢀ®á).ꢀ  
8007hꢀ-ꢀCW:ꢀThanhꢀghiꢀ®iÒuꢀkhiÓn.ꢀ  
8008hꢀꢁꢀPortAꢀ:ꢀ§−êngꢀDataꢀcñaꢀADC0809.ꢀ  
8009hꢀꢁꢀPortBꢀ:ꢀ§−êngꢀDataꢀcñaꢀDAC0808.ꢀ  
800AhꢀꢁꢀPortCꢀ:ꢀ§iÒuꢀkhiÓnꢀADC0809.ꢀ  
800BhꢀꢁꢀCWꢀꢀꢀꢀ:ꢀThanhꢀghiꢀ®iÒuꢀkhiÓn.ꢀ  
8008hꢀꢁꢀ800Bhꢀ  
800Chꢀꢁꢀ800Fhꢀ  
8255ꢀ(2)ꢀ  
800ChꢀꢁꢀPortAꢀ:ꢀ§ÇuꢀvꢃoꢀDigital.ꢀ  
800DhꢀꢁꢀPortBꢀ:ꢀ§iÒuꢀkhiÓnꢀ®éngꢀc¬ꢀb−íc(PB0ꢁPB3)ꢀꢀ vꢃꢀ  
®éngꢀc¬ꢀmétꢀchiÒuꢀ(PB4ꢀꢁꢀPB5).ꢀ  
8255ꢀ(3)ꢀ 800EhꢀꢁꢀPortCꢀ:ꢀ4ꢀ®Çuꢀvꢃoꢀxungꢀd¹ngꢀnótꢀÊnꢀꢀꢀꢀꢀꢀꢀꢀꢀ(PC4ꢁ  
PC7),ꢀ4ꢀ®Çuꢀvꢃoꢀchoꢀc¸cꢀthiÕtꢀbÞꢀngoꢃiꢀꢀnh−ꢀencoderꢀ(PC0ꢀꢁꢀ  
PC3).ꢀ  
800FhꢀꢁꢀCWꢀꢀꢀꢀ:ꢀThanhꢀghiꢀ®iÒuꢀkhiÓn.ꢀ  
C000hꢀꢁꢀPortAꢀ:ꢀHiÓnꢀthÞꢀ8ꢀLEDꢀ®¬n.ꢀ  
C001hꢀꢁꢀPortBꢀ:ꢀHiÓnꢀthÞꢀ2ꢀLEDꢀ7ꢀthanhꢀ(tr¸i).ꢀ  
8255ꢀ(4)ꢀ  
C000hꢀꢁꢀC003hꢀ  
C002hꢀꢁꢀPortCꢀ:ꢀHiÓnꢀthÞꢀ2ꢀLEDꢀ7ꢀthanhꢀ(ph¶i).ꢀ  
C003hꢀꢁꢀCWꢀꢀꢀꢀ:ꢀThanhꢀghiꢀ®iÒuꢀkhiÓn.ꢀ  
8255ꢁEXꢀ BUSꢀmëꢀréngꢀdùꢀtr÷,ꢀcãꢀthÓꢀg¾nꢀthªmꢀ1ꢀmoduleꢀkh¸cꢀ  
C004hꢀ–ꢀC007hꢀ  
ꢀ
B¶ngꢀ2.1ꢀS¾pꢀxÕpꢀbéꢀnhíꢀvꢃꢀc¸chꢀph©nꢀ®ÞaꢀchØꢀchoꢀc¸cꢀthiÕtꢀbÞꢀngo¹iꢀviꢀcñaꢀKITꢀ  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ93ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
Sauꢀkhiꢀ®ꢂꢀn¾mꢀv÷ngꢀb¶nꢀ®åꢀbéꢀnhí,ꢀmétꢀsèꢀl−uꢀýꢀcÇnꢀph¶iꢀnhíꢀkhiꢀthÝꢀnghiÖmꢀvíiꢀKITꢀ  
nh−ꢀsau:ꢀ  
ꢁ NÕuꢀn¹pꢀch−¬ngꢀtr×nhꢀvꢃoꢀKITꢀ®Óꢀch¹yꢀëꢀchÕꢀ®éꢀ"Ch−¬ngꢀtr×nhꢀng−êiꢀsöꢀdông",ꢀtøcꢀ  
ch¹yꢀ®écꢀlËpꢀvíiꢀch−¬ngꢀtr×nhꢀMONITORꢀqu¶nꢀlýꢀKITꢀth×ꢀch−¬ngꢀtr×nhꢀcñaꢀng−êiꢀ  
häcꢀph¶iꢀb¾tꢀ®Çuꢀëꢀ®ÞaꢀchØꢀ00H,ꢀtøcꢀb¾tꢀ®Çuꢀch−¬ngꢀtr×nhꢀb»ngꢀlÖnhꢀORGꢀ0.ꢀSauꢀkhiꢀ  
KITꢀb¸oꢀn¹pꢀhoꢃnꢀtÊtꢀth×ꢀÊnꢀc«ngꢀt¾cꢀMODEꢀSELECTꢀ®Óꢀëꢀtr¹ngꢀth¸iꢀhëꢀ(nh«ꢀlªn),ꢀ  
tiÕpꢀ®ãꢀbÊmꢀnótꢀresetꢀ®Óꢀb¾tꢀ®Çuꢀch¹yꢀch−¬ngꢀtr×nhꢀcñaꢀm×nh.ꢀëꢀtr¹ngꢀth¸iꢀnꢃyꢀth×ꢀ  
tÊtꢀc¶ꢀc¸cꢀtꢃiꢀnguyªnꢀphÇnꢀcøngꢀvꢃꢀc¸cꢀthiÕtꢀbÞꢀngo¹iꢀviꢀcñaꢀKITꢀ®Òuꢀ®−îcꢀphÐpꢀsöꢀ  
dôngꢀmꢃꢀkh«ngꢀcãꢀmétꢀgiíiꢀh¹nꢀnꢃo.ꢀ  
ꢁ NÕuꢀn¹pꢀvꢃoꢀ®Óꢀch¹yꢀëꢀchÕꢀ®éꢀDEBUGꢀꢁꢀgìꢀrèi,ꢀch¹yꢀvꢃꢀxemꢀkÕtꢀqu¶ꢀc¸cꢀvïngꢀnhíꢀ  
sauꢀmçiꢀlÖnhꢀth×:ꢀ  
o Ch−¬ngꢀtr×nhꢀph¶iꢀb¾tꢀ®ÇuꢀëꢀvÞꢀtrÝꢀ4000Hꢀ(vÞꢀtrÝꢀkhëiꢀ®ÇuꢀcñaꢀbéꢀnhíꢀRAM).ꢀ  
ThùcꢀhiÖnꢀb»ngꢀlÖnhꢀORGꢀ4000H.ꢀ  
o C¸cꢀvectorꢀng¾tꢀph¶iꢀ®−îcꢀcéngꢀthªmꢀ4000H.ꢀCôꢀthÓꢀnh−ꢀsau:ꢀ  
ꢀ
§ÞaꢀchØꢀvectorꢀng¾tꢀëꢀ  
chÕꢀ®éꢀb×nhꢀth−êngꢀ  
0000Hꢀ  
§ÞaꢀchØꢀvectorꢀng¾tꢀëꢀ  
chÕꢀ®éꢀDEBUGꢀ  
4000Hꢀ  
Nguånꢀng¾tꢀ  
Cêꢀ  
ResetꢀhÖꢀthèngꢀ  
Ng¾tꢀngoꢃiꢀ0ꢀ  
Béꢀ®Þnhꢀthêiꢀ0ꢀ  
Ng¾tꢀngoꢃiꢀ1ꢀ  
Béꢀ®Þnhꢀthêiꢀ1ꢀ  
PortꢀnèiꢀtiÕpꢀ  
RSTꢀ  
IE0ꢀ  
0003Hꢀ  
4003Hꢀ  
TF0ꢀ  
000BHꢀ  
400BHꢀ  
IE1ꢀ  
0013Hꢀ  
4013Hꢀ  
TF1ꢀ  
001BHꢀ  
401BHꢀ  
RIꢀorꢀTIꢀ  
TF2ꢀorꢀEXF2ꢀ  
0023Hꢀ  
4023Hꢀ  
Béꢀ®Þnhꢀthêiꢀ2ꢀ  
002BHꢀ  
402BHꢀ  
ꢀ
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ94ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
o Ngoꢃiꢀraꢀng−êiꢀhäcꢀcßnꢀkh«ngꢀ®−îcꢀsöꢀdôngꢀng¾tꢀngoꢃiꢀ1ꢀ®ꢂꢀ®−îcꢀthiÕtꢀkÕꢀ®Óꢀ  
phôcꢀvôꢀchÕꢀ®éꢀDEBUG.ꢀCßnꢀ®èiꢀvíiꢀng¾tꢀngoꢃiꢀ0ꢀnh−ꢀëꢀch−¬ngꢀ2ꢀ®ꢂꢀgiíiꢀ  
thiÖu,ꢀphôcꢀvôꢀgiaoꢀtiÕpꢀvíiꢀbꢃnꢀphÝmꢀcñaꢀKIT.ꢀ  
o VïngꢀnhíꢀRAMꢀnéiꢀ32ꢀbyteꢀtõꢀ7FHꢁ5FHꢀkh«ngꢀsöꢀdông,ꢀtuyꢀnhiªnꢀ128ꢀbyteꢀ  
RAMꢀnéiꢀ®−îcꢀ®Þnhꢀ®ÞaꢀchØꢀgi¸nꢀtiÕpꢀcßnꢀl¹iꢀvꢃꢀ32ꢀKꢁByteꢀRAMꢀngoꢃiꢀ®−îcꢀ  
söꢀdôngꢀtho¶iꢀm¸i.ꢀ  
C¸cꢀh−íngꢀdÉnꢀcôꢀthÓꢀb»ngꢀh×nhꢀ¶nhꢀcñaꢀKITꢀsÏꢀ®−îcꢀtr×nhꢀbꢃyꢀëꢀphÇnꢀtrîꢀgiópꢀcñaꢀ  
ch−¬ngꢀtr×nhꢀch¹yꢀtrªnꢀm«iꢀtr−êngꢀWindowsꢀ®iꢀkÌmꢀtheoꢀKIT,ꢀch−¬ngꢀtr×nhꢀhçꢀtrîꢀbiªnꢀ  
dÞchꢀvꢃꢀdÞchꢀng−îcꢀc¸cꢀfileꢀch−¬ngꢀtr×nhꢀd¹ngꢀhîpꢀng÷,ꢀn¹pꢀvꢃꢀxãaꢀbéꢀnhíꢀEEPROMꢀcñaꢀ  
KITꢀvꢃꢀmétꢀsèꢀbꢃiꢀvÝꢀdôꢀcñaꢀch−¬ngꢀtr×nhꢀnh−ꢀbꢃiꢀ7,ꢀthÝꢀnghiÖmꢀvÒꢀ"TruyÒnꢀth«ngꢀnèiꢀ  
tiÕp"...ꢀꢀ  
Sauꢀ®©yꢀsÏꢀlꢃꢀc¸cꢀkhaiꢀb¸oꢀmÉuꢀcñaꢀc¸cꢀch−¬ngꢀtr×nhꢀch¹yꢀ®−îcꢀtrªnꢀKITꢀcòngꢀnh−ꢀch−¬ngꢀ  
tr×nhꢀMONITORꢀvꢃꢀc¸cꢀvÝꢀdô.ꢀ  
ꢀ
6.2ꢀC¸cꢀkhaiꢀb¸oꢀvÒꢀ®ÞaꢀchØꢀc¸cꢀh»ngꢀvꢂꢀbiÕnꢀsèꢀsöꢀdôngꢀtrongꢀch−¬ngꢀtr×nhꢀ  
MONITORꢀvꢂꢀtrongꢀc¸cꢀvÝꢀdôꢀDEMOꢀcñaꢀKITꢀ  
; ##################################################################  
;     
 
 
 
 
 
 
CAC KHAI BAO   
; ##################################################################  
 
; Khai bao dia chi cua cac 8255  
; 8255-1  
LCD_CONTROL  
 
 
EQU   
8000H  ; PA: Cac tin hieu dieu khien cua LCD 2408  
; PA0 = LCD_RS; PA1 = RW; PA2=E1; PA3 = E2  
LCD_DATA  
KEYPAD    
 
 
 
 
 
 
EQU    8001H  ; PB: BUS data cua LCD 2408  
EQU   
EQU   
8002H  ; D0-D6 lam bus nhan ma phim  
8003H  ; Tu dieu khien CW cua 8255-1  
CW1   
; 8255-5  
MATRIX_LED_ANOD  EQU   
 
8004H  ; Cac hang`, tuc cac anod chung cua led ma tran  
8005H  ; Cac cot xanh cua LED ma tran  
8006H  ; Cac cot do cua LED ma tran  
MATRIX_LED_G    
MATRIX_LED_R    
EQU   
EQU   
EQU   
CW5   
 
 
 
 
8007H  ; Tu dieu khien CW cua 8255-5  
; 8255-2  
ADC_DB    
ꢀ
 
 
EQU   
8008H  ; Bus du lieu cua ADC0809  
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ95ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
DAC_DB    
 
 
 
 
EQU   
EQU   
EQU   
8009H  ; Bus du lieu cua DAC0808  
ADC_CONTROL  
800AH  ; Cac tin hieu dieu khien ADC0809   
800BH  ; Tu dieu khien CW cua 8255-2  
CW2   
 
 
 
; 8255-3  
DIGITAL_INPUT   
EQU   
EQU   
800CH  ; Dau vao so   
DC_STEPPER   
 
 
 
800DH  ; Dieu khien dong co buoc (PB0-PB3),    
; dong co 1 chieu (PB4-PB7)    
 
PULSE_INPUT  
 
EQU   
EQU   
800EH  ; 4 dau vao xung = nut(PC4-PC7),   
; 4 tu cac nguon phat xung(PC0-PC3)  
800FH  ; Tu dieu khien CW cua 8255-3  
CW3   
 
 
 
;8255-4  
LED_DON   
 
 
EQU   
EQU   
EQU   
EQU   
0C000H ; Dieu khien hien thi 8 LED don  
LED_7_DOAN_12   
LED_7_DOAN_34   
0C001H ; Dieu khien hien thi 2 LED 7 doan 1, 2 (ben trai')  
0C002H ; Dieu khien hien thi 2 LED 7 doan 3, 4 (ben phai')  
0C003H ; Tu dieu khien CW cua 8255-4  
CW4   
 
 
 
 
; Quy uoc cach dat ten hang` cua tu dieu khien nhu sau: CWx voi x la STT cua 8255  
; 011  thu tu cac so la: PA, PB, PC;     0: dau ra,   1: dau vao   
CW_011    
CW_000    
CW_100    
CW_101    
 
 
 
 
 
 
 
 
 
EQU   
EQU   
EQU   
EQU   
10001011B    
10000000B    
10010000B  
10011001B  
; ROM - RAM   
EEPROM_ADDR  
 
 
EQU   
EQU   
0000H  ; Dia chi bat dau cua EEPROM - 8K - ket thuc o 1FFFH  
4000H  ; Dia chi bat dau cua RAM - 32K - ket thuc o 7FFFH  
RAM_ADDR  
 
 
; Dia chi cac dong` cua LCD 2408  
DONG1    
DONG2    
DONG3    
DONG4    
 
 
 
 
 
 
 
 
 
EQU   
EQU   
EQU   
EQU   
0080H  
0098H  
00B8H  
00D8H  
; Chan ngat ngoai o che do debug  
CHAN_NGAT_INT0 EQU   
 
P3.2  
; Ma cac phim chuc nang    
KEY_F1    
KEY_F2    
KEY_BS    
 
 
 
 
 
 
EQU   
EQU   
EQU   
16  
17  
18  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ96ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
KEY_ENTER    
 
EQU   
19  
 
; RAM danh cho xy ly cua chuong trinh MONITOR  
ProgRamAddr  
 
 
EQU   
EQU   
7FH  
E  
 
 
 
 
 
 
ProgRamAddr  ; De chon lam viec voi nua man hinh 1 hay 2,    
tuong ung E =1, 2  
ProgRamAddr - 1  ; Byte dem. cua ban phim, luu gia tri phim  
nhan ve, cap nhat bang ngat  
ProgRamAddr - 2   
KEY   
 
 
EQU   
So_Man_Hinh  
LED7Doan1    
LED7Doan2    
LED7Doan3    
LED7Doan4    
 
 
 
 
 
 
EQU   
EQU   
EQU   
EQU   
EQU   
ProgRamAddr - 3   
ProgRamAddr - 4   
ProgRamAddr - 5   
ProgRamAddr - 6   
; RAM lam vung dem cho qua trinh nap EEPROM tu PC  
StartAddrH   
StartAddrL   
 
 
 
EQU   
EQU   
ProgRamAddr - 8; Byte cao cua dia chi can ghi den' cua goi du lieu  
ProgRamAddr - 9; Byte thap cua dia chi can ghi den' cua goi du lieu  
; ##################################################################  
;  KET THUC CAC KHAI BAO  
 
 
; ##################################################################  
 
6.3ꢀCh−¬ngꢀtr×nhꢀquÐtꢀbꢂnꢀphÝmꢀ  
Ch−¬ngꢀtr×nhꢀnꢂyꢀ®−îcꢀn¹pꢀchoꢀ1ꢀchipꢀviꢀ®iÒuꢀkhiÓnꢀlo¹iꢀ20ꢀch©nꢀcñaꢀATMELꢀ  
lꢂꢀAT89C2051ꢀ  
; ##########################################################  
; Chuong trinh quet ban phim 4x4  
; Su dung P1 de giao tiep voi ban phim  
; P1.0 - P1.3 noi voi cac hang lan luot 1 2 3 4  
; P1.4 - P1.7 noi voi cac cot lan luot  1 2 3 4  
; ##########################################################  
 
ORG 0000H   
; Truoc het ta doc cac hang 1-4, cac phim chuc nang, da duoc noi dat san  
 
 
 
 
 
 
 
 
 
 
 
 
mov P3, #0FFH  
call  Delay  
mov P3, #00H  
call  Delay  
mov P3, #0FFH  
 
 
 
Start:    
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ97ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
 
 
 
 
 
mov P1, #11111111B   
mov A, P1    
anl A, #00001111B   
 
 
 
 
 
 
; Dat tat ca len 1  
 
 
 
 
; Lay 4 bit thap cua P1, noi voi hang   
cjne  A, #00001111B, Doc_Cot_Chuc_Nang  ; Kiem tra de chac rang tat ca cac   
  phim chuc nang duoc tha  
 
 
 
 
sjmp  Doc_Ban_Phim    
 
 
 
 
 
 
Doc_Cot_Chuc_Nang:  
 
 
 
 
 
 
mov   
mov   
P1, #11111111B   
A, P1  
 
 
 
 
; Dat tat ca len 1  
anl   A, #00001111B    
 
; Che cac bit cot di  
F1:  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cjne  A, #00001110B, F2  
Wait:  
 
 
 
 
 
 
 
 
 
 
 
mov   
anl   
A, P1  
A, #00001111B   
cjne  A, #00001111B, Wait  
 
; Doi tha nut   
clr   
nop  
nop  
nop  
mov   
P3.7  
P3,#16    
call  Delay    
 
 
; Chong rung   
; Tiep tuc quet phim  
ljmp  Tiep_tuc_quet    
 
 
F2:  
 
 
 
 
 
 
 
 
 
 
 
cjne  A, #00001101B, BACK_SPACE  
Wait1:  
 
 
 
 
 
 
 
 
mov   
mov   
anl   
P1, #11111111B   
A, P1  
; Dat tat ca len 1  
A, #00001111B   
cjne  A, #00001111B, Wait1   
mov   P3,#17  
call  Delay    ; Chong rung   
; Doi tha nut   
 
 
ljmp  Tiep_tuc_quet  
 
BACK_SPACE:  
 
 
 
 
 
 
cjne  A, #00001011B, ENTER  
Wait2:  
 
 
 
mov   
mov   
anl   
P1, #11111111B   
A, P1  
 
; Dat tat ca len 1  
A, #00000100B   
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ98ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
 
 
 
 
 
 
 
cjne  A, #00000100B, Wait2   
mov   P3,#18    
call  Delay    ; Chong rung   
; Doi tha nut   
 
 
ljmp  Tiep_tuc_quet  
 
ENTER:  
 
 
 
 
 
 
 
 
 
 
 
cjne  A, #00000111B, Start  
Wait3:  
 
 
 
 
 
 
 
 
mov   
mov   
anl   
P1, #11111111B   
A, P1  
 
; Dat tat ca len 1  
A, #00001000B   
cjne  A, #00001000B, Wait3 ; Doi tha nut   
clr   
mov   
P3.7  
P3,#19  
call  Delay    
 
 
 
 
; Chong rung   
Tiep_Tuc_Quet:   
 
 
 
 
 
 
 
 
 
WAIT4:  ; Doi phim duoc tha het  
 
 
 
 
 
 
 
mov   
mov   
anl   
P1, #11111111B   
A, P1  
 
 
; Dat tat ca len 1  
A, #00001111B   
cjne  A, #00001111B, Wait4  
call  Delay  
mov   
P3, #0FFH; Tat ngat, khoa tin hieu o ngo ra tin hieu o ngo ra  
; Tiep tuc quet phim  
ljmp  Start    
;;;;;;;;;;;;;;;;;;;;;;;;  
;Khong co phim chuc nang nao duoc an, tim phim thuong`  
Doc_Ban_Phim:   
 
 
 
 
 
 
 
 
 
 
 
 
 
mov   
mov   
anl   
P1,#11110000B       ; Noi dat tat ca cac hang  
A, P1  
A, #11110000B   
cjne  A, #11110000B, Co_Phim_Duoc_An    
; Neu co phim duoc an  
jmp   
 
Start    
 
 
 
 
 
 
 
; Neu khong, tiep tuc giam sat   
Co_Phim_Duoc_An:  
 
 
 
 
 
 
 
 
 
 
 
MOV   
MOV   
anl   
P1,#11111110B       ; Noi dat hang 1   
A, P1  
A, #11110000B   
cjne  A, #11110000B, ROW1  
 
 
MOV   
MOV   
P1,#11111101B    
A,P1  
 
 
; Noi dat hang 2   
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ99ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ANL   
A,#11110000B  
cjne  A,#11110000B, ROW2    
 
MOV   
MOV   
ANL   
P1,#11111011B    
A,P1  
 
 
 
; Noi dat hang 3   
; Noi dat hang 4   
A,#11110000B  
cjne  A,#11110000B, ROW3    
 
MOV   
MOV   
ANL   
P1,#11110111B    
A,P1  
 
A,#11110000B  
cjne  A,#11110000B, ROW4    
 
ROW1:  MOV   
DPTR,#KCODE1  
 
 
 
 
 
 
call  FIND  
ljmp  Start  
 
ROW2:  MOV   
DPTR,#KCODE2  
 
 
 
 
 
 
call  FIND  
ljmp  Start  
 
ROW3:  MOV   
DPTR,#KCODE3  
 
 
 
 
 
 
call  FIND  
ljmp  Start  
 
ROW4:  MOV   
DPTR,#KCODE4  
 
 
 
 
 
 
 
 
call  FIND  
ljmp  Start  
 
 
; ##############################################  
;     THU TUC TIM KIEM TRONG BANG  
 
; ##############################################  
FIND:    
 
 
 
 
 
 
rlc   
jnc   
A  
 
 
; Quay lan luot cac cot len co nho' de ktra  
MATCH  ; Neu = 0, dung la cot dang co phim duoc an  
inc   DPTR  ; Neu = 1, tiep tuc tang con tro DL va quay de tim ra cot chua phim  
dc an  
 
 
sjmp  FIND  
MATCH:  
 
 
 
 
CLR   
A    
MOVC  A,@A+DPTR  ; Luc nay A se chua cac gia tri tu 0-15   
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ100ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
MOV   
P3,A  
 
; xuat ra ngoai, do A < 16 nen bit D7 bao gio cung = 0,    
 
 
 
  ; ta tan dung de tao ra ngat ngoai cho CPU   
WAIT5:  ; Doi phim duoc tha het  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mov   
mov   
anl   
P1, #11110000B ; Noi dat tat ca cac hang  
A, P1  
A, #11110000B   
cjne  A, #11110000B, WAIT5  
mov   P3, #0FFH    ; Tat ngat, khoa tin hieu o ngo ra   
call  Delay  
ret  
; ##############################################  
;     KET THUC THU TUC TIM KIEM  
 
; ##############################################    
 
 
DELAY:  
TT0:  MOV     R2,#180  
      MOV    R1,#72  
TT1:  DJNZ    R1,TT1  
      DJNZ  R2,TT1  
      RET   
;Giai ma    
KCODE1: DB 3, 2, 1, 0    
KCODE2: DB 7, 6, 5, 4   
KCODE3: DB 11, 10, 9, 8   
KCODE4: DB 15, 14, 13, 12  
 
END  
ꢀ
6.4ꢀCh−¬ngꢀtr×nhꢀ®iÒuꢀkhiÓnꢀhiÓnꢀthÞꢀLCDꢀ  
; ######################################################       
;  THU TUC XUAT LENH RA LCD  
 
; ######################################################  
Command_To_LCD:  
 
 
 
 
 
 
 
 
 
push  DPH   
push  DPL   
push  02H  
 
mov   
mov   
mov   
R2, A    
 
A,#CW_011    
DPTR, #CW1   
; Luu A  
; Dat A ra, B,C dau vao  
movx  @DPTR, A  
 
; Xuat tu dieu khien  
; Doc thanh ghi lenh  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ101ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
 
 
 
; PA3 PA2 PA1 PA0  
; E2  E1  RW  RS   
mov   
A, E  
cjne  A, #2, Nua_MH1   
mov   
jmp   
A, #00001010B   
Xuat_Ra  
Nua_MH1:  
mov   
Xuat_Ra:  
 
A, #00000110B   
 
 
 
 
mov   
DPTR, #LCD_CONTROL  
movx  @DPTR, A  
 
; Xuat th dk ra LCD  
mov   DPTR, #LCD_DATA   
Ready_CMD:  
 
movx  A, @DPTR  
 
; Doc DB vao   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
jb    
ACC.7, Ready_CMD   
; Dat lai PA, PB lam cong ra  
mov   
mov   
A,#CW_000    
PTR, #CW1   
; Dat A,B,C dau RA  
movx  @DPTR, A  
mov   
mov   
A, R2  
DPTR, #LCD_DATA   
movx  @DPTR, A  
 
 
 
 
 
; Xuat ra   
; Chot du lieu bang cach dua xung tu H to L o chan E1  
mov   
 
DPTR, #LCD_CONTROL  
mov   
A, E  
cjne  A, #2, Nua_MH1_C   
mov   
jmp   
A, #00001000B   
Chot  
 
; E2 = 1; E1 = 1, RW = 0; RS = 0   
Nua_MH1_C:  
mov   
Chot:  
 
A, #00000100B   
 
 
; E2 = 0; E1 = 1, RW = 0; RS = 0   
; E2 =1; E1 = 0, RW = 0; RS = 0  
 
 
 
 
 
 
 
 
 
movx  @DPTR, A     
 
nop  
nop  
 
mov   
A, #00000000B   
movx  @DPTR, A  
 
 
 
 
; Chot du lieu   
pop   02H  
pop   
DPL   
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ102ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
pop   
ret  
DPH   
 
; ######################################################       
;  KET THUC THU TUC XUAT LENH RA LCD  
; ######################################################  
 
 
; ######################################################       
;      THU TUC IN KI TU RA LCD  
;  
 
 INPUT = A (ASCII)  
; ######################################################  
In_Ki_Tu:  
 
 
 
 
 
 
 
push  DPH   
push  DPL   
push  02H  
mov   
mov   
mov   
R2, A    
 
A,#CW_011    
DPTR, #CW1   
; Luu A  
; Dat A ra, B,C dau vao  
movx  @DPTR, A  
 
; Xuat tu dieu khien  
; Doc thanh ghi lenh  
; PA3 PA2 PA1 PA0  
; E2  E1  RW  RS   
 
 
 
 
 
 
mov   
A, E  
cjne  A, #2, Nua_MH1_InKT  
mov   
jmp   
A, #00001010B   
Xuat_Ra_InKT  
Nua_MH1_InKT:  
mov   A, #00000110B   
Xuat_Ra_InKT:  
 
 
 
 
mov   
movx  @DPTR, A  
mov   DPTR, #LCD_DATA   
DPTR, #LCD_CONTROL  
 
; Xuat ra LCD   
Ready_Chr:  
 
movx  A, @DPTR  
 
; Doc DB vao   
 
 
 
 
 
 
 
 
 
jb    
ACC.7, Ready_Chr   
; Dat lai PA, PB lam cong ra  
mov   
mov   
A,#CW_000    
DPTR, #CW1   
; Dat A,B,C dau RA  
movx  @DPTR, A  
 
 
 
; Xuat tu dieu khien  
mov   
mov   
A, R2 ; Lay lai gia tri luu ban dau, lenh  
DPTR, #LCD_DATA   
movx  @DPTR, A  
 
 
; Xuat ra   
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ103ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
 
 
 
; Chot du lieu bang cach dua xung tu H to L o chan E1  
mov   
mov   
DPTR, #LCD_CONTROL  
A, E  
cjne  A, #2, Nua_MH1_Chot  
mov   
jmp   
A, #00001001B   
Chot_InKT  
Nua_MH1_Chot:  
mov   A, #00000101B   
Chot_InKT:  
 
 
 
 
 
 
 
 
 
 
movx  @DPTR, A ; E2 =0; E1 = 1, RW = 0; RS = 1  
nop  
nop  
mov   
A, #00000001B   
movx  @DPTR, A  
pop   02H  
 
; Chot du lieu   
pop   
pop   
ret  
DPL   
DPH   
; ######################################################       
;  KET THUC CHUONG TRINH IN KI TU RA LCD  
; ######################################################  
; ######################################################       
;  
 
THU TUC IN CHUOI RA LCD  
;  INPUT = DIA CHI CUA CON TRO DU LIEU DPTR  
; ######################################################  
 
Str_To_LCD:  
push  ACC  
Continue_To_Print:  
   clr   A  
    movc   A,@A+DPTR  
    jz    
Done  
 
 
 
 
 
call  In_Ki_Tu  
inc   
mov   
DPTR  
A, #06h   
 
 
;  Dich con tro sang phai  
call  Command_To_LCD  
sjmp   Continue_To_Print  
Done:  
 
pop   
ACC                                
  ret  
ꢀ
; ######################################################       
;  
 
KET THUC THU TUC IN CHUOI RA LCD  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ104ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
; ######################################################  
; ######################################################       
;  
 
THU TUC XOA LCD   
; ######################################################  
CLS:  
 
 
 
 
 
 
 
 
 
 
 
 
 
mov   
mov   
E, #1  
A, #01H  
call  Command_To_LCD  
mov   
mov   
E, #2  
A, #01H  
call  Command_To_LCD  
mov   
mov   
E, #1  
A, #0EH  
call  Command_To_LCD  
mov   
A, #0CH ; Bat hien thi, tat con tro  
call  Command_To_LCD  
ret  
 
; ######################################################       
;  KET THUC THU TUC XOA LCD  
 
; ######################################################  
 
 
; ######################################################       
;  
 
THU TUC IN SO HEXA  
; ######################################################     
phex:  
phex8:    
 
; In so hexa 8 bit, input = ACC  
 
 
 
 
 
 
 
push  02  
push  acc  
swap  a  
anl   
add   
jnc   
add   
a, #0FH  
a, #246  
phex_b  
a, #7  
phex_b:    
 
 
 
 
 
 
add   
mov   
mov   
a, #58  
R2, A  ;Luu  
A, #0EH  
call  Command_To_LCD  
mov   A, R2  
call  In_Ki_Tu  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ105ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
pop   
acc  
phex1:    
push  acc  
 
 
 
 
anl   
add   
jnc   
add   
a, #0FH  
a, #246  
phex_c  
a, #7  
phex_c:    
add   
a, #58  
 
 
 
 
 
 
 
 
mov   
mov   
R2, A  ;Luu  
A, #0EH  
call  Command_To_LCD  
mov   A, R2  
call  In_Ki_Tu  
pop   
pop   
ret  
acc  
02  
phex16:   
 
; In so hexa 16 bit, input = DPTR  
 
 
 
 
 
 
 
 
push  acc  
mov   
a, dph  
acall  phex  
mov   
a, dpl  
acall  phex  
pop   
ret  
 
acc  
; ######################################################       
;     KET THUC THU TUC IN SO HEXA  
; ######################################################     
 
6.5ꢀC¸cꢀvÝꢀdôꢀDEMOꢀ  
; ###########################################       
;  CAC VI DU DEMO   
; ###########################################  
 
 
 
 
 
 
movx  @DPTR, A  
cpl   A  
call  Delay_100ms  
 
 
 
 
DEMO1:    
; LED DON  - 8255-4  
mov   
mov   
R6, A  
mov   
DPTR, #LED_DON   
A, KEY    
; Neu co nut an tro ve  
DEMO1_1:  ; Nhap nhay cac LED xen ke  
cjne  A, #KEY_BSP, TiepDemo1_1 ; Tiep  
tuc chay cho het vong lap  
 
 
mov   
mov   
R5, #48  
jmp  
Exit_DEMO1  ; Neu co lenh thoat  
R6, #10101010B   
thi   tro ve luon   
Again_DM11:  
TiepDemo1_1:  
djnz  R5, Again_DM11   
 
mov   
A, R6  
 
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ106ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
; Neu co lenh thoat thi tro ve luon  
TiepDemo1_3:  
djnz  R5, Again_DM13   
Exit_DEMO1:  
DEMO1_2:  
 
; Chay LED tu trai sang phai  
; Nghi mot chut   
mov   A, #00H  
movx  @DPTR, A  
call  Delay_500ms  
 
 
 
 
 
 
 
 
 
 
 
mov   
KEY, #0FFH   
call  Restore_SCR  
 
 
; Tra lai man hinh truoc'  
 
mov   
mov   
R5, #48  
 
R6, #10000000B   
 
 
ret   
 
 
 
 
 
 
 
 
 
; Tro ve man hinh 4, chon vd DEMO  
Again_DM12:  
 
 
 
 
 
 
 
 
 
 
 
mov   
movx  @DPTR, A  
call  Delay_100ms  
A, R6  
;  ------------------------------------------  
 
DEMO2:    
; LED 7 DOAN   
Led7Doan1, #0   
Led7Doan2, #0   
Led7Doan3, #0   
Led7Doan4, #0   
 
 
 
 
 
mov   
mov   
mov   
mov   
 
rr    
mov   
mov   
cjne  
A    
R6, A  
A, KEY ; Neu co nut an tro ve  
A, #KEY_BSP, TiepDemo1_2   
; Tiep tuc chay cho het vong lap  
jmp   Exit_DEMO1  
; Neu co lenh thoat thi tro ve luon  
TiepDemo1_2:  
DEMO2_1:  
 
 
; Dem len   
 
 
 
 
 
 
 
 
 
 
 
 
mov   
A, #DONG2   
call  Command_To_LCD  
 
 
djnz  R5, Again_DM12   
 
mov   
DPTR, #MSG11   
DEMO1_3:  ; Chay LED tu phai sang trai  
call  Str_To_LCD  
 
 
 
 
 
 
 
 
 
 
; Nghi mot chut   
A, #00H  
 
mov   
mov   
A, #DONG3   
movx  @DPTR, A  
call  Command_To_LCD  
 
call  Delay_500ms  
 
mov   
DPTR, #MSG12   
mov   
mov   
R5, #48  
call  Str_To_LCD  
R6, #10000000B   
Again_DM13:  
Dem_Len:  
 
 
 
 
 
 
 
 
mov   
movx  @DPTR, A  
call  Delay_100ms  
A, R6  
 
 
 
 
 
 
 
call  Display_Four_7Seg_Led  
call  Delay_100ms  
mov   A, KEY  
cjne  A, #KEY_BSP, Sang_Dem_Xuong  
 
rl    
mov   
mov   
A  
R6, A  
A, KEY  
mov   
jmp   
 
KEY, #0FFH   
Exit_DEMO2  
; Neu co nut an tro ve  
cjne  A, #KEY_BSP, TiepDemo1_3   
; Tiep tuc chay cho het vong lap  
Sang_Dem_Xuong:  
cjne  A, #1, TiepTucDemLen  
 
 
mp    
Exit_DEMO1  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ107ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
mov   
jmp   
KEY, #0FFH   
 
 
 
 
 
 
 
 
 
 
 
Exit_DEMO2_1  
mov   
DPTR, #MSG13   
call  Str_To_LCD  
 
TiepTucDemLen:   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mov   
inc   
mov   
A, Led7Doan4   
A  
mov   
A, #DONG3   
call  Command_To_LCD  
 
Led7Doan4, A   
cjne  A, #0AH, Dem_Len   
mov   
DPTR, #MSG14   
add   
anl   
mov   
 
A, #6  
call  Str_To_LCD  
 
A, #00001111B   
Led7Doan4, A   
DEMO2_2:  
 
; ---- Dem xuong'  
 
 
 
 
 
 
 
call  Display_Four_7Seg_Led  
call  Delay_100ms  
mov   
inc   
mov   
A, Led7Doan3   
A  
mov   
A, KEY  
Led7Doan3, A   
cjne  A, #KEY_BSP, Sang_Dem_Len  
cjne  A, #0AH, Dem_Len   
mov   
jmp   
KEY, #0FFH   
Exit_DEMO2  
add   
anl   
mov   
 
A, #6  
A, #00001111B   
Led7Doan3, A   
Sang_Dem_Len:   
 
 
 
 
cjne  A, #0, TiepTucDemXuong  
mov   
inc   
mov   
A, Led7Doan2   
A  
mov   
jmp   
KEY, #0FFH   
DEMO2_1  
 
Led7Doan2, A   
 
 
cjne  A, #0AH, Dem_Len   
TiepTucDemXuong:    
add   
anl   
mov   
 
A, #6  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mov   
dec   
mov   
A, Led7Doan4   
A  
A, #00001111B   
Led7Doan2, A   
Led7Doan4, A   
cjne  A, #0FFH, DEMO2_2  
mov   
inc   
mov   
A, Led7Doan1   
A  
mov   
 
Led7Doan4, #9   
Led7Doan1, A   
mov   
dec   
mov   
A, Led7Doan3   
A  
cjne  A, #0AH, Dem_Len   
add   
anl   
mov   
jmp   
A, #6  
Led7Doan3, A   
A, #00001111B   
Led7Doan1, A   
Dem_Len  
cjne  A, #0FFH, DEMO2_2  
mov   
 
Led7Doan3, #9   
mov   
dec   
mov   
A, Led7Doan2   
A  
Exit_DEMO2_1:   
 
 
 
 
 
; Thoat dem len, chuyen sang dem xuong  
Led7Doan2, A   
mov   
mov   
KEY, #0FFH   
A, #DONG2   
 
cjne  A, #0FFH, DEMO2_2  
mov   
 
Led7Doan2, #9   
call  Command_To_LCD  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ108ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
 
 
 
 
 
 
 
mov   
dec   
mov   
A, Led7Doan1   
A  
DEMO3_3:  
 
 
 
 
 
 
 
mov   
mov   
DPTR, #MATRIX_LED_ANOD  
A, #0FFH  
Led7Doan1, A   
cjne  A, #0FFH, DEMO2_2  
movx  @DPTR, A  
 
mov   
 
Led7Doan1, #9   
DEMO2_2  
mov   
mov   
mov   
A, #11001100B   
jmp   
 
DPTR, #MATRIX_LED_R  
R7, #32   
Exit_DEMO2:  
 
 
Again_DM3_3:    
 
; Chay LED   
 
 
 
 
 
 
 
 
 
movx  @DPTR, A  
rl    A  
ret  
; -------------------------------------------  
call  Delay_100ms  
DEMO3:    
; LED MA TRAN   
djnz  R7, Again_DM3_3   
DEMO3_1:  
 
 
 
 
 
 
 
mov   
mov   
DPTR, #MATRIX_LED_ANOD  
A, #0FFH  
DEMO3_4:  
 
 
; Thi nghiem voi cac cot  
 
 
 
 
 
 
 
 
 
 
 
 
 
mov   
mov   
A, #0FFH  
movx  @DPTR, A  
 
DPTR, #MATRIX_LED_R  
movx  @DPTR, A  
 
mov   
mov   
mov   
A, #11001100B   
DPTR, #MATRIX_LED_R  
R7, #32   
mov   
mov   
A, #0FFH  
DPTR, #MATRIX_LED_G  
Again_DM3_1:  ; Nhay LED cua cac cot, xen ke  
movx  @DPTR, A  
 
 
 
 
 
 
movx  @DPTR, A  
cpl   A  
 
mov   
mov   
DPTR, #MATRIX_LED_ANOD  
A, #01H  
call  Delay_100ms  
djnz  R7, Again_DM3_1   
 
movx  @DPTR, A  
 
 
DEMO3_2:  
mov   
Again_DM3_4:    
R7, #64   
 
 
 
 
 
 
 
mov   
mov   
DPTR, #MATRIX_LED_ANOD  
A, #0FFH  
 
; Chay LED   
 
 
 
 
 
 
 
movx  @DPTR, A  
rl    A  
movx  @DPTR, A  
 
call  Delay_100ms  
mov   
mov   
mov   
A, #11001100B   
djnz  R7, Again_DM3_4   
DPTR, #MATRIX_LED_R  
R7, #32  
ret  
 
DEMO4:    
; BAN PHIM, LCD   
Again_DM3_2:    
 
; Chay LED   
 
 
 
 
 
 
 
movx  @DPTR, A  
rr    A  
 
 
 
 
 
ret  
 
call  Delay_100ms  
djnz  R7, Again_DM3_2   
 
 
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ109ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
DEMO5:    
; 8255-2  
; ADC_DB  
; DAC_DB  
;ADC, DAC  
 
 
 
 
 
 
 
 
 
 
EQU   
EQU   
8008H    
8009H    
; Bus du lieu cua ADC0809  
; Bus du lieu cua DAC0808  
; ADC_CONTROL   
; CW2    
EQU   
800AH    ; Cac tin hieu dieu khien ADC0809   
EQU   800BH    ; Tu dieu khien CW cua 8255-2   
 
 
 
 
; Cac bit cua ADC_CONTROL nhu sau  
;  7 6 |  5  | 4  |   3    |  2   |  1   |  0   |    
; ----|-----|----|--------|------|------|------|  
; X X | EOC | OE | ALE+SC | ADDC | ADDB | ADDA |  
ADC:  
 
 
 
 
 
 
 
 
 
 
 
mov   
mov   
DPTR, #ADC_CONTROL  
 
mov   
mov   
DPTR, #CW2   
A, #CW_100   
A, #00110000B ; Cho phep dau ra OE  
= 1  
; A vao, B, C ra   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
movx  @DPTR, A  
movx  @DPTR, A  
 
mov   
DPTR, #ADC_DB ; Doc du lieu tra ve    
mov   
DPTR, #ADC_CONTROL  
 
; Chon  
kenh analog 0   
movx  A, @DPTR  
 
 
 
 
 
 
mov   
A, #00001000B   
mov   
 
Nhiet_Do, A   
movx  @DPTR, A  
nop  
nop  
nop  
mov   
mov   
E, #2  
A, #DONG1   
call  Command_To_LCD  
 
mov   
A, #00100000B   
 
 
 
; Chot  
dia chi va bat dau chuyen doi  
mov   
DPTR, #MSG34    
 
 
 
 
movx  @DPTR, A  
 
call  Str_To_LCD  
 
 
mov   
DPTR, #CW2   
; Chuyen PC -   
ADC_CONTROL lam dau vao  
mov   
A, #DONG2   
 
 
 
mov   
A, #CW_101   
; A, C vao, B ra   
call  Command_To_LCD  
 
movx  @DPTR, A  
mov   
DPTR, #MSG35    
 
Wait_EOC:    
 
 
 
 
 
; Cho` cho   
qua trinh convert ket thuc  
call  Str_To_LCD  
 
 
 
 
 
 
mov   
movx  A, @DPTR  
anl   A, #00100000B   
DPTR, #ADC_CONTROL  
 
 
mov   
A, #DONG3   
call  Command_To_LCD  
 
cjne  A, #00100000B, Wait_EOC  
; Ket thuc qua trinh chuyen doi  
 
mov   
DPTR, #MSG33   
call  Str_To_LCD  
 
 
mov   
DPTR, #CW2   
; Dat lai PC lam dau  
ra  
mov   
clr   
A, Nhiet_Do   
CY  
 
 
mov   
A, #CW_100   
; A vao, B, C ra   
movx  @DPTR, A  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ110ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
subb  A, #100  
jc    Nhiet_Do_Nho_Hon_100  
 
 
 
 
 
 
 
 
 
 
 
mov   
call  In_Ki_Tu  
mov   A, #' '  
A, #'C'  
 
Nhiet_Do_Lon_Hon_100:   
 
 
 
 
mov   
dec   
rl    
rl    
A, Nhiet_Do   
A   ; Tru 1  
call  In_Ki_Tu  
call  Delay_500ms  
call  Delay_500ms  
A  
A  
 
 
 
; Nhan 4 de nhay cho dung  
mov   
A, KEY  
vi tri chuoi can tra trong bang  
cjne  A, #KEY_ENTER, KT_Thoat_ADC  
 
 
 
mov   
mov   
mov   
R6, #4  
mov   
jmp   
 
KEY, #0FFH   
DAC  
R0, A  
DPTR, #LON_HON_100_DO  
In_Nhiet_Do_1:  
KT_Thoat_ADC:  
 
 
 
 
 
 
 
movc  A, @A + DPTR   
call  In_Ki_Tu  
 
 
 
 
 
cjne  A, #KEY_BSP, Tiep_Tuc_ADC  
mov   KEY, #0FFH   
inc   
mov   
R0  
call  Restore_SCR  
A, R0  
ret  
 
djnz  R6, In_Nhiet_Do_1  
jmp   
 
In_Do_C  
Tiep_Tuc_ADC:  
 
 
 
jmp   
ADC  
Nhiet_Do_Nho_Hon_100:  
 
 
 
 
 
mov   
dec   
rl    
A, Nhiet_Do   
A   ; Tru 1  
; -------------------------------------------  
----  
A  
 
; Nhan 2 de nhay cho dung  
vi tri chuoi can tra trong bang  
DAC:  
 
 
 
mov   
mov   
mov   
R6, #2  
 
 
 
 
 
 
 
 
mov   
mov   
E, #2  
R0, A  
A, #01  
DPTR, #NHO_HON_100_DO  
call  Command_To_LCD  
 
In_Nhiet_Do_2:  
 
 
 
 
 
 
movc  A, @A + DPTR   
call  In_Ki_Tu  
mov   
A, #DONG2   
call  Command_To_LCD  
 
inc   
mov   
R0  
A, R0  
mov   
DPTR, #MSG38  ; 'Thi nghiem voi  
djnz  R6, In_Nhiet_Do_2  
DAC'  
 
 
 
 
call  Str_To_LCD  
In_Do_C:  
 
 
 
 
 
 
 
 
 
ꢀ
mov   
call  In_Ki_Tu  
mov   A, #'d'  
call  In_Ki_Tu  
mov   A, #'o'  
call  In_Ki_Tu  
mov   A, #' '  
call  In_Ki_Tu  
A, #' '  
 
 
; DAC_DB  
; Bus du lieu cua DAC0808  
 
 
 
 
EQU   
8009H  
 
 
 
 
 
 
mov   A, #DONG3  
call  Command_To_LCD  
 
mov   
DPTR, #MSG36   
call  Str_To_LCD  
 
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ111ꢀ  
Gi¸oꢀtr×nhꢀm«nꢀKüꢀthuËtꢀViꢀ§iÒuꢀKhiÓnꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀCh−¬ngꢀ61ꢀ:PhÇnꢀphôꢀlôcꢀ  
ꢀ
ꢀ
ꢀ
 
mov   
Ap_Ra, #10   
 
 
mov   
 
KEY, #0FFH   
Tang_Ap_DAC:  
mov   A, Ap_Ra  
Dao_Gia_Tri:  
 
Exit_DEMO5:  
 
 
call  
ret  
 
Restore_SCR  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
rrc   
mov   
rrc   
mov   
rrc   
mov   
rrc   
mov   
rrc   
mov   
rrc   
mov   
rrc   
mov   
rrc   
mov   
 
A  
DEMO6:    
; STEPPER, DC MOTOR  
07H, C  
A  
;DIGITAL_INPUT EQU 800CH ; Dau vao so   
;DC_STEPPER    EQU 800DH ; Dieu khien dong co  
buoc (PB0-PB3), dong co 1 chieu(PB4-PB7  
06H, C  
A  
 
 
05H, C  
A  
; PULSE_INPUT EQU  800EH ; 4 dau vao xung =    
nut(PC4-PC7), 4 tu cac nguon phat  
xung(PC0-PC3)  
04H, C  
A  
; CW3  EQU  800FH ; Tu dieu khien CW cua  
8255-3  
03H, C  
A  
 
 
 
 
 
 
 
 
 
 
 
02H, C  
A  
mov   
mov   
mov   
mov   
mov   
mov   
mov   
mov   
DPTR, #DC_STEPPER  
R4, #00110011B   
R7, #255  
01H, C  
A  
R6, #5  
00H, C  
Nut1, #0  
Nut2, #0  
mov   
 
A, 20H  
Nut3, #0  
Nut4, #0  
mov   
DPTR, #DAC_DB   
 
 
movx  @DPTR, A  
Quay_Thuan:  
mov   A, R4  
movx  @DPTR, A  
mov   
add   
mov   
A, Ap_Ra  
A, #2  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Ap_Ra, A  
rl    
mov   
A  
call  Delay_500ms  
call  Delay_500ms  
call  Delay_500ms  
call  Delay_500ms  
call  Delay_500ms  
call  Delay_500ms  
 
R4, A  
call  Delay_7ms  
call  Delay_7ms  
call  Delay_7ms  
mov   
cjne  A, #KEY_BSP, Case_Enter_QT  
mov   KEY, #0FFH   
A, KEY  
mov   
cjne  A, #254, KT_Thoat_Tang_Ap_DAC  
jmp   Exit_DEMO5  
A, Ap_Ra  
call  Restore_SCR  
ret  
 
; MSG29:  db  'ENTER=Test pulse input', 0  
; MSG30:  db  'ENTER=Test digital  
input',0  
KT_Thoat_Tang_Ap_DAC:  
Case_Enter_QT:  
 
 
mov   
A, KEY  
 
mov   
A, KEY    
cjne  A, #KEY_BSP, Tang_Ap_DAC  
ꢀ
ꢀBiªnꢀso¹nꢀ:ꢀL©mꢀt¨ngꢀ§øcꢀ–ꢀLªꢀTiÕnꢀDòngꢀ–Béꢀm«nꢀT§HꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀTrangꢀꢀ112ꢀ  
Tải về để xem bản đầy đủ
pdf 29 trang Thùy Anh 12480 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Kỹ thuật vi điều khiển - Chương 6: Phục lục - Lâm Tăng Đức", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_ky_thuat_vi_dieu_khien_chuong_6_phuc_luc_lam_tang.pdf