ch− ơng IV: thiết kế và thi công mạch điều khiển tỉc đĩ và vị trí đĩng cơ điện mĩt chiều
4.4.2. CHệÙC NAÍNG CỤA TệỉNG CHệễNG TRèNH CON
TIMER 0_ISR
ẹađy laứ chửụng trỡnh phỳc vỳ ngaĩt daứnh cho ngaĩt do Timer 0 gađy ra. Nhử ủaừ ủeă caụp ụỷ phaăn tređn nguyeđn lyự tỏo xung coự ủoụ roụng mửực cao hay thãp thay ủoơi cho ủieău khieơn
Xoựa thanh ghi R5
NOP
Taớng thanh ghi R5 leđn 1 R5=255? RET Ye s No High 7FH Low 7EH TH TL High 7DH Low 7CH T cõ ủũnh = 50ms = 50000às TH thay ủoơi tuứy yự theo tõc ủoụ ủoụng cụ
- Nẽu tõc ủoụ ủoụng cụ > tõc ủoụ chuaơn
⇒ giạm TH
tõc ủoụ ủoụng cụ nhử sau: Trong ủoự:
- TL laứ khoạng thụứi gian ủũnh thụứi ụỷ mửực 0 (tửụng ửựng vụựi ủieụn aựp 0V).
- TH laứ khoạng thụứi gian ủũnh thụứi ụỷ mửực 1 (tửụng ửựng vụựi ủieụn aựp 5V).
Giaự trũ nỏp cụa khoạng ủũnh thụứi TH ủửụùc lửu vaứo caực ođ nhụự coự ủũa chư:( high: 7FH, low: 7EH ) vaứ cho T : (high: 7DH, low: 7CH ).
Tõc ủoụ chuaơn ủửụùc lãy vaứo tửứ ADC0809 hoaịc maựy tớnh nỏp vaứo ođ nhụự ủũa chư: (79H).
So saựnh giửừa ođ nhụựự caụp nhaụt trửùc tiẽp vụựi ođ nhụự caụp nhaụt giaựn tiẽp ủeơ caụp nhaụt vaứo ođ nhụự tõc ủoụ chuaơn 79H sửù thay ủoơi treờ nhãt xuãt hieụn cụa hai phaăn ủieău khieơn ủaịt tõc ủoụ ADC vaứ maựy tớnh. Trong ủoự, caực ođ nhụự duứng ủẽn laứ:
78H: OĐ nhụự tõc ủoụ ủaịt tửứ maựy tớnh (78H caụp nhaụt giaựn tiẽp qua 76H)
76H: OĐ nhụự tõc ủoụ ủaịt caụp nhaụt trửùc tiẽp tửứ maựy tớnh.
77H: OĐ nhụự tõc ủoụ ủaịt tửứ ADC0809 (77H caụp nhaụt giaựn tiẽp qua 75H)
75H: OĐ nhụự tõc ủoụ ủaịt caụp nhaụt trửùc tiẽp tửứ ADC0809
Bit ủaựnh dãu ủẽm, chún laứ bit ủũnh ủũa chư 00H. Bit 00 coự giaự trũ :
mửực 1 (5V).
0: tửực laứ xung ủieău khieơn ủoụng cụ ủang ụỷ ủũnh thụứi mửực 0 (0V)
Sửỷ dỳng Timer 0, mode 1, khi traứn thỡ interrupt (sau khoạng 50ms).
Timer 0 : boụ ủũnh thụứi 16-bit coự bõn mode hoỏt ủoụng. Mode 1: Timer 0 ủaịt hoỏt ủoụng ụỷ mode 1, caực bit M1 = 0, M0 = 1 trong thanh ghi
TMOD => thiẽt laụp ủũnh thụứi 16-bit, ủeơ Timer 0 baĩt ủaău ủẽm thỡ ủoăng thụứi phại set bit
TR0 = 1 trong thanh ghi TCON.
Interrupt timer 0: TF0 = 1 trong thanh ghi TCON khi Timer 0 ủẽm tụựi giaự trũ ủaịt vaứ voứng veă giaự trũ 0.
Vụựi caực dieờn giại tređn, hoỏt ủoụng cụa TIMER 0_ISR toựm taĩt nhử sau:
Khi ngaĩt xạy ra, dửứng timer 0, kieơm tra bit dãu 00H, coự hai trửụứng hụùp:
Bit dãu 00H baỉng 1: caực hoỏt ủoụng tiẽp theo seừ laứ Xoựa bit dãu 00H;
Nỏp lỏi dung lửụùng ủẽm (TL) cho Timer 0;
Hỏ tớn hieụu ủieău khieơn ủoụng cụ xuõng mửực thãp; Cho chỏy lỏi Timer 0.
Bit dãu 00H baỉng 0:
Caụp nhaụt tõc ủoụ ủaịt tửứ ADC0809. Hai trửụứng hụùp:
Phaựt hieụn coự sửù thay ủoơi tõc ủoụ ủaịt tửứ ADC, caụp nhaụt tõc ủoụ ủoự.
nhaụt.
Khụỷi ủoụng lỏi ADC0809; Set bit dãu 00H;
Nỏp lỏi dung lửụùng ủẽm (TH) cho Timer 0;
Nađng tớn hieụu ủieău khieơn ủoụng cụ leđn mửực cao; Cho pheựp Timer 0 hoỏt ủoụng.
INT0_ISR
Trỡnh phỳc vỳ ngaĩt gađy ra do ngaĩt ngoaứi 0
Chửụng trỡnh con naứy phỳc vỳ vieục ủẽm tõc ủoụ quay cụa ủoụng cụ. Noự ủửụùc viẽt ngay sau vec tụ ngaĩt cụa ngaĩt ngoaứi 0 (leụnh vi xửỷ lyự: ORG 0003H)
Trỡnh naứy chư thửùc hieụn moời ủoụng taực laứ taớng noụi dung ođ nhụự tõc ủoụ ủo 7BH leđn moụt. Quaự trỡnh ủẽm tõc ủoụ naứy dieờn ra trong khoạng 50ms chu kyứ cụa xung ủieău khieơn tõc ủoụ ủoụng cụ) vaứ sau ủoự ủửụùc taựi laụp (voứng veă 0 vaứ ủẽm lỏi trong chu kyứ tiẽp)
Trỡnh phỳc vỳ ngaĩt naứy khođng hieụn dieụn roừ raứng trong chửụng trỡnh, noự ủửụùc ủaịt nõi tiẽp ngay sau leụnh gúi ủũa chư vector ngaĩt vaứ ủửụùc trỡnh baứy ụỷ ủađy coự teđn laứ INT0_ISR chư nhaỉm mỳc ủớch mođ tạ roừ hụn caực hoỏt ủoụng dieờn ra beđn trong boụ vi ủieău khieơn.
MAIN
Phaăn chửụng trỡnh laứm vieục nhử moụt boụ tớnh toaựn-hieụu chưnh dung lửụùng ủẽm TH hoaịc TL ủeơ thay ủoơi chu kyứ laứm vieục cụa xung ủieău khieơn tõc ủoụ ủoụng cụ. Beđn cỏnh ủoự coứn coự nhieụm vỳ: tỏo baud rate 1200, nỏp caực trũ thớch hụùp cho caực thanh ghi ủieău khieơn vaứ hieơn thũ tõc ủoụ ủo.
Xem chi tiẽt tređn phaăn lửu ủoă giại thuaụt.
HIENTHITOCDO
Trỡnh con naứy phỳc vỳ cho vieục hieơn thũ tõc ủoụ ủo ra khõi hieơn thũ led bạy ủoỏn. Xem chi tiẽt tređn lửu ủoă giại thuaụt.
DELAYMS
Trỡnh con tỏo treờ khoạng moụt mili giađy (1024 microsecconds).
BINTOBCD
Trỡnh con chuyeơn ủoơi sõ BIN sang sõ BCD, ủaău vaứo laứ caịp thanh ghi R7:R6 lieđn tiẽp chửựa byte cao vaứ byte thãp cụa sõ nhũ phađn 16-bit.
ẹeơ chuyeơn sang maừ BCD neựn, ta caăn chuyeơn sang maừ BCD theo caựch lãy giaự trũ caăn chuyeơn ủoơi laăn lửụùt chia cho 10, sõ dử seừ laứ maừ BCD tửụng ửựng. Nẽu sõ caăn chuyeơn ủoơi laứ 16-bit nhử trửụứng hụùp cụa ta, chia laăn ủaău ủeơ ủửụùc sõ dử laứ maừ BCD haứng ủụn vũ, lãy kẽt quạ chia laăn thửự hai ủeơ ủửụùc sõ dử laứ maừ BCD haứng chỳc. Thụ tỳc duứng ủeơ chia sõ 16-bit cho sõ 8-bit laứ DIV_16_8.
ẹeơ tỡm hai maừ haứng traớm vaứ haứng ngaứn coứn lỏi, chư caăn duứng leụnh <DIV AB> thođng thửụứng trong taụp leụnh.
Kẽt quạ tửứ thụ tỳc naứy cuừng laứ R7:R6, nhửng bađy giụứ laứ sõ BCD neựn vụựi R7 chửựa haứng ngaứn trong 4-bit cao, haứng traớm trong 4-bit thãp. Tửụng tửù cho R6, nible cao chửựa haứng chỳc vaứ thãp chửựa ủụn vũ. Trong thụ tỳc naứy coự sửỷ dỳng ủẽn thụ tỳc chia sõ 16-bit cho sõ 8-bit seừ trỡnh baứy dửụựi ủađy:
Chửụng trỡnh con chia moụt sõ nhũ phađn 16-bit cho 10 (sõ nhũ phađn 8-bit) duứng pheựp trửứ vaứ pheựp dũch traựi bit lieđn tiẽp cho tụựi khi ủẽn bit thửự 16.
Dieờn giại cỳ theơ nhử sau:
ẹaău tieđn, dũch traựi 1-bit toaứn boụ 16-bit trong coự maịt trong caịp thanh ghi R7:R6 coự cụứ Carry, CY=0. Thanh ghi A tỏi doứng leụnh <RLC A> mang giaự trũ caực bit cao cụa sõ nhũ phađn 16-bit ủửụùc dũch traựi vaứ coự theơ coứn coự bit ủi trửụực bit cao mang giaự trũ chia coứn dử cụa laăn dũch bit kẽ trửụực ủoự. Phaăn tớnh ra trũ dử naứy ủửụùc tớnh ra baỉng leụnh <SUBB A,B> naỉm nõi tiẽp sau cụa nhaừn “A_GREATER_EQ_B” vaứ trũ dử (nẽu coự) ủửụùc giửừ nguyeđn trong thanh ghi A luực nhạy ra ngoaứi nhaừn
Tỏi doứng leụnh <CJNE A, B, NOT_EQUAL> cho ta ba khạ naớng quan heụ giửừa A vaứ B
Nẽu A = B : CY = 0 Nẽu A > B : CY = 0 Nẽu A < B : CY = 1
Hai trửụứng hụùp ủaău, thửụng sõ baỉng 1 (doứng leụnh bieơu thũ laứ ba doứng leụnh tiẽp theo sau leụnh trửứ neđu ụỷ tređn) ủửụùc nỏp vaứo bit thãp nhãt cụa thanh ghi R6 (chửựa giaự trũ cụa cụứ Carry dũch vaứo). Trửụứng hụùp coứn lỏi khođng caăn phại nỏp giaự trũ 0 (khođng chia hẽt) cho bit neđu ra trong hai trửụứng hụùp ủaău vỡ bạn thađn noự ủaừ baỉng zero trong laăn dũch bit ủoự. Chư khi naứo chia hẽt thỡ bit mang giaự trũ zero cụa cụứ Carry dũch traựi vaứo R6 mụựi ủửụùc thay baỉng 1.
SUBB. Sõ dử naứy seừ lửu lỏi cho laăn dũch bit sau (laăn dũch bit sau laứ laăn dũch bit thửự ≤16).