Chương 6: Ch − ¬ng tr×nh xö lý p h Ým chung Keybo a rd yes R u n= 0? y e s Flo _ C all? ye s Bu z y =1 ? Reset K ey_buff01 C all _S B N02 Call _SB N03 C all _ SB N0 1 Li _ cal l? No yes yes yes Up_call ? Bu sy =1 R un=0? Bu s y = 1 y e s Call SBN07 Call SBN09 Call SBN 08 R un=0? yes Call SBN04 Call SBN05 Call SB N0 6 Reset K ey_ buff0 2 H × nh 2 - 10 : S¬ ® å thu Ë t to¸n cña ch − ¬n g tr × nh bµn p h Ý m 1. KiÓm tra xem cã phÝm gäi tÇng kh«ng, nÕu cã chuyÓn sang b − íc 2, ng − îc l¹i sang b − íc 8. 2. KiÓm tra cê busy, nÕu busy = 1 chuyÓn sang b − íc 3, ng − îc l¹i sang b − íc 6. 3. KiÓm tra cê run, nÕu run = 0 chuyÓn sang b − íc 4, nÕu run = 1 chuyÓn sang b − íc 5. 4. Gäi ch − ¬ng tr×nh con SBN 002, sang b − íc 8. 5. Gäi ch − ¬ng tr×nh con SBN 003, sang b − íc 8. 6. Gäi ch − ¬ng tr×nh con SBN 001, sang b − íc 8. 7. Reset cê key_buff1 ( cã phÝm gäi tÇng ) = 0, sang b − íc 8. 8. KiÓm tra xem cã phÝm gäi thang kh«ng, cã sang b − íc 9, ng − îc l¹i sang b − íc 21. 9. KiÓm tra cê run, run = 0 th× sang b − íc 10, run = 1 sang b − íc 12. 10. KiÓm tra cê busy, busy = 1 th× sang b − íc 11, busy = 0 sang b − íc 13. 11. KiÓm tra cê run, run = 0 th× sang b − íc 15, run = 1 sang b − íc 14. 12. KiÓm tra cê busy, busy = 1 th× sang b − íc 17, busy = 0 sang b − íc 16. 13. Gäi ch − ¬ng tr×nh con SBN 007, sang b − íc 20. 14. Gäi ch − ¬ng tr×nh con SBN 009, sang b − íc 20. 15. Gọi ch ơng trình con SBN 008, sang b ớc 20. 16. Gọi ch ơng trình con SBN 004, sang b ớc 20. 17. Kiểm tra cờ run, run = 0 thì sang b ớc 19, run = 1 sang b ớc 18. 18. Gọi ch ơng trình con SBN 005, sang b ớc 20. 19. Gọi ch ơng trình con SBN 006, sang b ớc 20. 20. Reset cờ key_buff 02 ( có phím gọi thang ) = 0. 21. Kết thúc ch ơng trình. 2.5 Ch ơng trình đó ng - mở cửa ( door ). Op e n _ D o o r Se t T IM 0 1 TIM 2 = 0 ? ye s Re a d k e y Cl o s e _ f a s t? ye s Cl o s e d o o r Se t T IM 0 3 TIM 3 = 0 ye s Re a d k e y H ì n h 2- 11 : S ơ đ ồ th u ậ t to á n c ủ a c h ơng tr ì nh c ử a ( D o or ). 1. Ra lệnh mở cửa; đặt bộ đếm TIM 002, chuyển sang b ớc 2. 2. Kiểm tra xem đã hết thời gian trễ ch a, nếu ch a th ì sang b ớc 3, ng ợc lại sang b ớc 5. 3. Gọi ch ơng trình đọc phím ( Read_key ), sang b ớc 4. 4. KiÓm tra xem cã cê ® ãng cöa nhanh kh«ng, nÕu cã th× sang b − íc 5, ng − îc l¹i vÒ b − íc 2. 5. Ra lệnh đóng cửa, đặt bộ TIM 003, sang b ớc 6. 6. Kiểm tra xem đã hết thời gian trễ ch a, nếu ch a th ì sang b ớc 7, ng ợc lại sang b ớc 8. 7. Gọi ch ơng trình đọc phím ( Read_key ), sang b ớc 6. 8. Kết thúc ch ơng trình. 2.6.1 các Ch ơng trình ng ắt. 2.6.1 Ch ơng trình ngắt sensor. St art INC S ens o r < = Sensor CMP 3 > Set S03 =1 Set S04 =1 < = Sensor CMP 5 Set S05 =1 En d Sơ đ ồ thuật toán xử lý ngắt Sensor St art No Key_buff01=1 ? St art No Key_bu ff01=1 ? Calculat e K ey Set K ey_buff0 1=1 End Calculat e K ey Set K ey_buff0 1=1 E nd Sơ đ ồ thu ậ t toán xử lý ngắt bàn phím gọi tầng Sơ đồ thuật toán xử lý ngắt bàn ph í m gọi thang H ì nh 2-12 : C á c s ơ đồ thu ậ t toán xử lý ngắt. 1. Tăng giá tr ị sensor lên một giá trị, chuyển sang b ớc 2. 2. So sánh giá trị của sensor với số 3, nếu bằng sang b ớc 3, lớn hơn sang b ớc 4, nếu nhỏ hơn sang b ớc 6. 3. Set cờ S03 = 1, sang b ớc 7. 4. So sánh giá tr ị của sensor với số 5, nếu bằng sang b ớc 5, nhỏ hơn sang b ớc 6. 5. Set cờ S05 = 1, Reset giá tr ị sensor = 0, chuyển sang b ớc 7. 6. Set cờ S04 = 1, chuyển sang b ớc 7. 7. Kết thúc ch ơng trình. 2.6.2 Ch ơng t r ình ngắt đọc phím gọi tầng. 1. Kiểm tra xem phím bấm tr ớc đó đã đợc xử lý ch a, nếu ch a ( key_buff = 1 ) thì sang b ớc 3, rồi ( key_buff1 = 0 ) thì sang b ớc 2. 2. Tính toán v à đ a ra mã của p h í m đợc gọi ( Scan code ), set key_buff1=1. 3. Kết thúc ch ơng trình. . sang b ớc 6. 6. Kiểm tra xem đã hết thời gian trễ ch a, nếu ch a th ì sang b ớc 7, ng ợc lại sang b ớc 8. 7. Gọi ch ơng trình đọc phím ( Read_key ), sang b ớc 6. 8. Kết thúc ch ơng trình. 2 .6. 1. Gọi ch ơng trình con SBN 005, sang b ớc 20. 19. Gọi ch ơng trình con SBN 0 06, sang b ớc 20. 20. Reset cờ key_buff 02 ( có phím gọi thang ) = 0. 21. Kết thúc ch ơng trình. 2.5 Ch ơng trình đó ng - mở cửa (. nhỏ hơn sang b ớc 6. 3. Set cờ S03 = 1, sang b ớc 7. 4. So sánh giá tr ị của sensor với số 5, nếu bằng sang b ớc 5, nhỏ hơn sang b ớc 6. 5. Set cờ S05 = 1, Reset giá tr ị sensor = 0, chuyển sang b ớc 7. 6.