Bài tập mẫu vi điều khiển 8051

5 618 9
Bài tập mẫu vi điều khiển 8051

Đang tải... (xem toàn văn)

Thông tin tài liệu

K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group Bài tp 1: Cho sáng ln lt tng LED, mi LED sáng 1 giây. Trên đây là lu đ, vic th hin bng lnh lu đ trên có th bng cách chân phng (làm ln lt) hoc có th dùng lnh quay đ đa bit = 0 ra ln lt các chân cng làm LED sáng theo ln lt. T bài tp này tr đi, mc đnh ch ng trình đã có khai báo: #include <sfr51.inc> Cách chân phng: org 00h ljmp main org 40h main: mov SP,#5fh ;Vic tt tt c các LED đc t đng làm do khi reset lên, các chân cng đu = 1 mov p1,#11111110b ;sáng LED 1 lcall tre_1s mov p1,#11111101b ;tt LED 1, sáng LED 2 lcall tre_1s mov p1,#11111011b ;tt LED 2, sáng LED 3 Begin Sán g LED 1 Tt tt c các LED Tr 1 g iâ y Tt LED 1, sán g LED 2 T r  1 g iâ y Tt LED 2, sán g LED 3 Tt LED 7, sán g LED 8 T r  1 g iâ y K thut vi x lý cn bn và vi điu khin 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 ;…<tt c 8 lnh Nop> nop djnz r3,loop3 djnz r2,loop2 djnz r1,loop1 ret end Nu s dng lnh quay thì chng trình s gn hn: ;… 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 Lu ý là trong các đon chng trình trên, ngn xp đc khi to vi giá tr ban đu ca thanh ghi con tr ngn xp SP là 5fh, tc là các đa ch hay d liu ct vào ng n xp s bt đu t ô nh 60h tr đi. Vic khi to ngn xp là mt thao tác không th thiu khi trong chng trình có s dng lnh gi chng trình con hoc các ngt. K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group Bài tp 2: kim tra phím bm ni vi P3.2, khi phím đc bm thì sáng c 8 LED, khi không bm phím thì tt c 8 LED. Vi lu đ thut toán nh trên ta vit đc chng trình sau: … org 00h ljmp main org 40h main: ;vic đt cng P3.2 làm cng vào đc t đng thc hin khi 8051 reset xong. ;các LED cng t đng đc tt khi 8051 reset xong, các cng đu = 1 jnb P3.2,phim_bam mov P1,#0ffh ;tt tt c các LED nu không có phím bm sjmp main phim_bam: mov P1,#0 ;sáng tt c các LED nu có phím bm sjmp main end Vi cùng mch phn cng nh trên, ta có th  thc hành v ngt ca vi điu khin. Bài toán thc hành đt ra có th là nu có phím bm thì đo trng thái ca 8 LED (đang sáng thì thành tt và ngc li). Nh vy nu ta bm phím, trng thái ca LED s đc đo li, mi ln bm phím đo mt ln. Nu không s dng ngt, ta có th vit chng trình gn ging vi chng trình trên, ch khác là ph i thêm thao tác đi nh phím ra trc khi quay tr li quét kim tra đin áp ti chân P3.2. Nu không có thao tác này, chân P3.2 xung mc 0 s b gây ra nhiu ln đo trng thái LED bi chân P3.2 s đc quét liên tc, thy còn  mc 0 là li đo trng thái, cho đn khi nh phím ra thì các LED s cùng sáng hoc cùng tt, tùy thuc vào vic ln đo trng thái nào đc thc hin cui cùng. Nh vy s không đúng vi mong mu n là ch đo mt ln khi bm mt ln. … main: jb P3.2,$ ;nhy ti ch ch cho đn khi nào P3.2 = 0 (tc là ch cho đn khi có phím bm Begin t P3.2 là cn g vào Sán g c 8 LED Tt c 8 LED Có p hím bm? K thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group phim_bam: mov a,P1 ;đc giá tr hin thi ca cng P1 cpl a ;đo trng thái đc đc đi mov P1,a ;đa tr li cng P1 gây ra đo trng thái LED jnb P3.2,$ ;nhy ti ch đ đi cho đên khi nào P3.2 = 1 tr li sjmp main end Nu s dng ngt, trc khi s dng ta phi đt ch đ và cho phép ngt xy ra. Phím đc ni vi chân P3.2 là chân ngt ngoài s 0 (INT0). Ngt này có 02 ch đ là ng t theo mc và ngt theo sn. Ngt theo mc s liên tc gây ra ngt CPU chng nào mc đin áp ca chân P3.2 còn  mc thp. Nh vy nu CPU thc hin xong chng trình phc v ngt mà chân P3.2 vn  mc thp thì CPU s li thc hin tip chng trình phc v ngt đó. Ngt theo sn thì ngc li, ch gây ra ngt khi có sn tín hiu (trong tr ng hp 8051 là sn xung), còn sau đó chân tín hiu ngt dù là mc thp hay cao hay có sn lên thì cng không gây ra ngt na. Vic đt ch đ cho ngt ngoài 0 đc thc hin bng bit IT0 trong thanh ghi TCON. Nu bit này = 1 thì ngt theo sn và ngc li. Thc hành vi hai trng hp IT0 = 0 (ng vi ch đ ngt theo mc) và IT0 = 1 (ng vi ch đ ngt theo sn xung), ta s thy đc s khác bi t gia chúng. Trng hp ngt theo sn s cho ta kt qu ging nh gii pháp không dùng ngt mà không thêm thao tác đi chân P3.2 tr v mc 1. Hin tng s là gi s LED đang sáng, khi ta bm phím và nh tay ra sau đó, có th LED s vn sáng ch không tt! Ngt ca 8051 đc cho phép bi 2 cp, th nht là cp dành riêng cho mi ngt, cp th hai là cp chung cho tt c các ngt. Nh v y đ cho phép mt ngt xy ra thì phi tha mãn c 2 cp đó: cho phép riêng và cho phép chung. Các bit quy đnh các nc này đu nm trong thanh ghi IE. Ngoài ra đ s dng mt ngt ta phi vit chng trình phc v ngt đó và đt mt lnh nhy ti chng trình đã vit vào đa ch ca vector ngt tng ng. ó là do khi xy ra ngt, CPU s t đng (xin nh là t đng!) th c hin lnh đt ti đa ch ca vector ngt tng ng. Trong trng hp này (trng hp ngt ngoài s 0) thì đa ch vector ngt là 03h trong b nh chng trình. Chng trình gii quyt bài toán trên s nh sau: … org 00h ljmp main org 03h ljmp ngat_0 org 40h main: mov SP,#5fh ;khi to ngn xp có dùng ngt setb it0 ;đt ngt ch đ ngt theo sn cho ngt ngoài 0, nu mun ngt theo mc thì không c n có lnh này khi 8051 reset xong, t đng mc đnh là ngt theo mc (IT0 = 0) setb ex0 ;cho phép ngt ngoài 0 cp riêng setb ea ;cho phép ngt cp chung ;khác vi chng trình trc, bây gi s dng ngt nên CPU không cn phi thm dò mc đin áp ca chân P3.2 mà s có thi gian làm các vic khác, khi có s kin phím bm xy ra, cu trúc ngt s t phát hin 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 thut vi x lý cn bn và vi điu khin 8051 Written by Kieennx, MicroStudy group ngat_0: mov a,P1 cpl a mov P1,a reti end Qua bài tp này ta thy đc u đim ca ngt là CPU đc t do làm các công vic khác, khi nào có s kin xy ra thì ngt s t báo cho CPU đ dng công vic đang làm li và đáp ng x lý.

Ngày đăng: 25/05/2014, 05:01

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan