K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group Bài tp 1: Cho sáng ln lt tng LED, mi LED sáng 1 giây. Trên đây là lu đ, vic th hin bng lnh lu đ trên có th bng cách chân phng (làm ln lt) hoc có th dùng lnh quay đ đa bit = 0 ra ln lt các chân cng làm LED sáng theo ln lt. T bài tp này tr đi, mc đnh ch ng trình đã có khai báo: #include <sfr51.inc> Cách chân phng: org 00h ljmp main org 40h main: mov SP,#5fh ;Vic tt tt c các LED đc t đng làm do khi reset lên, các chân cng đu = 1 mov p1,#11111110b ;sáng LED 1 lcall tre_1s mov p1,#11111101b ;tt LED 1, sáng LED 2 lcall tre_1s mov p1,#11111011b ;tt LED 2, sáng LED 3 Begin Sán g LED 1 Tt tt c các LED Tr 1 g iâ y Tt LED 1, sán g LED 2 T r 1 g iâ y Tt LED 2, sán g LED 3 Tt LED 7, sán g LED 8 T r 1 g iâ y K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group lcall tre_1s ;… mov p1,#01111111b lcall tre_1s sjmp main tre_1s: mov r1,#10 loop1: mov r2,#100 loop2: mov r3,#100 loop3: nop ;…<tt c 8 lnh Nop> nop djnz r3,loop3 djnz r2,loop2 djnz r1,loop1 ret end Nu s dng lnh quay thì chng trình s gn hn: ;… main: mov SP,#5fh mov a,#11111110b main_loop: mov P1,a lcall tre_1s rl a sjmp main_loop tre_1s: ;…nh trên…. end Lu ý là trong các đon chng trình trên, ngn xp đc khi to vi giá tr ban đu ca thanh ghi con tr ngn xp SP là 5fh, tc là các đa ch hay d liu ct vào ng n xp s bt đu t ô nh 60h tr đi. Vic khi to ngn xp là mt thao tác không th thiu khi trong chng trình có s dng lnh gi chng trình con hoc các ngt. K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group Bài tp 2: kim tra phím bm ni vi P3.2, khi phím đc bm thì sáng c 8 LED, khi không bm phím thì tt c 8 LED. Vi lu đ thut toán nh trên ta vit đc chng trình sau: … org 00h ljmp main org 40h main: ;vic đt cng P3.2 làm cng vào đc t đng thc hin khi 8051 reset xong. ;các LED cng t đng đc tt vì khi 8051 reset xong, các cng đu = 1 jnb P3.2,phim_bam mov P1,#0ffh ;tt tt c các LED nu không có phím bm sjmp main phim_bam: mov P1,#0 ;sáng tt c các LED nu có phím bm sjmp main end Vi cùng mch phn cng nh trên, ta có th thc hành v ngt ca vi điu khin. Bài toán thc hành đt ra có th là nu có phím bm thì đo trng thái ca 8 LED (đang sáng thì thành tt và ngc li). Nh vy nu ta bm phím, trng thái ca LED s đc đo li, mi ln bm phím đo mt ln. Nu không s dng ngt, ta có th vit chng trình gn ging vi chng trình trên, ch khác là ph i thêm thao tác đi nh phím ra trc khi quay tr li quét kim tra đin áp ti chân P3.2. Nu không có thao tác này, chân P3.2 xung mc 0 s b gây ra nhiu ln đo trng thái LED bi vì chân P3.2 s đc quét liên tc, thy còn mc 0 là li đo trng thái, cho đn khi nh phím ra thì các LED s cùng sáng hoc cùng tt, tùy thuc vào vic ln đo trng thái nào đc thc hin cui cùng. Nh vy s không đúng vi mong mu n là ch đo mt ln khi bm mt ln. … main: jb P3.2,$ ;nhy ti ch ch cho đn khi nào P3.2 = 0 (tc là ch cho đn khi có phím bm Begin t P3.2 là cn g vào Sán g c 8 LED Tt c 8 LED Có p hím bm? K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group phim_bam: mov a,P1 ;đc giá tr hin thi ca cng P1 cpl a ;đo trng thái đc đc đi mov P1,a ;đa tr li cng P1 gây ra đo trng thái LED jnb P3.2,$ ;nhy ti ch đ đi cho đên khi nào P3.2 = 1 tr li sjmp main end Nu s dng ngt, trc khi s dng ta phi đt ch đ và cho phép ngt xy ra. Phím đc ni vi chân P3.2 là chân ngt ngoài s 0 (INT0). Ngt này có 02 ch đ là ng t theo mc và ngt theo sn. Ngt theo mc s liên tc gây ra ngt CPU chng nào mc đin áp ca chân P3.2 còn mc thp. Nh vy nu CPU thc hin xong chng trình phc v ngt mà chân P3.2 vn mc thp thì CPU s li thc hin tip chng trình phc v ngt đó. Ngt theo sn thì ngc li, ch gây ra ngt khi có sn tín hiu (trong tr ng hp 8051 là sn xung), còn sau đó chân tín hiu ngt dù là mc thp hay cao hay có sn lên thì cng không gây ra ngt na. Vic đt ch đ cho ngt ngoài 0 đc thc hin bng bit IT0 trong thanh ghi TCON. Nu bit này = 1 thì ngt theo sn và ngc li. Thc hành vi hai trng hp IT0 = 0 (ng vi ch đ ngt theo mc) và IT0 = 1 (ng vi ch đ ngt theo sn xung), ta s thy đc s khác bi t gia chúng. Trng hp ngt theo sn s cho ta kt qu ging nh gii pháp không dùng ngt mà không thêm thao tác đi chân P3.2 tr v mc 1. Hin tng s là gi s LED đang sáng, khi ta bm phím và nh tay ra sau đó, có th LED s vn sáng ch không tt! Ngt ca 8051 đc cho phép bi 2 cp, th nht là cp dành riêng cho mi ngt, cp th hai là cp chung cho tt c các ngt. Nh v y đ cho phép mt ngt xy ra thì phi tha mãn c 2 cp đó: cho phép riêng và cho phép chung. Các bit quy đnh các nc này đu nm trong thanh ghi IE. Ngoài ra đ s dng mt ngt ta phi vit chng trình phc v ngt đó và đt mt lnh nhy ti chng trình đã vit vào đa ch ca vector ngt tng ng. ó là do khi xy ra ngt, CPU s t đng (xin nh là t đng!) th c hin lnh đt ti đa ch ca vector ngt tng ng. Trong trng hp này (trng hp ngt ngoài s 0) thì đa ch vector ngt là 03h trong b nh chng trình. Chng trình gii quyt bài toán trên s nh sau: … org 00h ljmp main org 03h ljmp ngat_0 org 40h main: mov SP,#5fh ;khi to ngn xp vì có dùng ngt setb it0 ;đt ngt ch đ ngt theo sn cho ngt ngoài 0, nu mun ngt theo mc thì không c n có lnh này vì khi 8051 reset xong, t đng mc đnh là ngt theo mc (IT0 = 0) setb ex0 ;cho phép ngt ngoài 0 cp riêng setb ea ;cho phép ngt cp chung ;khác vi chng trình trc, bây gi s dng ngt nên CPU không cn phi thm dò mc đin áp ca chân P3.2 mà s có thi gian làm các vic khác, khi có s kin phím bm xy ra, cu trúc ngt s t phát hin và thông báo cho CPU đ x lý và đáp ng main_loop: ;…có th làm gì tùy thích đây… sjmp loop K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group ngat_0: mov a,P1 cpl a mov P1,a reti end Qua bài tp này ta thy đc u đim ca ngt là CPU đc t do làm các công vic khác, khi nào có s kin xy ra thì ngt s t báo cho CPU đ dng công vic đang làm li và đáp ng x lý.