Toàn bộ chương trình và hướng dẫn viết các chương trình của led 7 đoạn và vi điều khiển. có hướng dẫn và chương trình mẫu giúp các bạn dễ hiểu và ứng dụng.1.Hãy điều chỉnh chương trình đếm giờ phút giây để đếm BCD từ 000000 đến 999999 hiển thị ở các led 3,4,5,6,7,8.2.Hãy cho biết sai số và cách làm giảm sai số.3.Chương trình trên luôn bắt đầu chạy tại 00 giờ 00 phút 00 giây. Hãy viết chương trình quét phím để điều chỉnh giờ phút giây theo ý muốn.
-1- VI XƯ LÝ CHƯƠNG TRÌNH ĐIỀU KHIỂN LED CHÓP TẮT Nội dung chương trình thư viện sau: ;CHUONG TRINH CON DELAY 100 MICRO GIAY DELAY100US: MOV 7FH,#048 ? ;NAP HANG SO DELAY LA 48 DJNZ 7FH,$ ;GIAM GIA TRI DEM CHO DEN KHI BANG RET ;THOAT KHOI CHUONG TRINH CON ;CHUONG TRINH CON DELAY MILI GIAY DELAY1MS: MOV 7EH,#10 DEL1MS: MOV 7FH,#048 ;NAP HANG SO DELAY LA 48 DJNZ 7FH,$ ;GIAM GIA TRI DEM CHO DEN KHI BANG DJNZ 7EH,DEL1MS RET ;CHUONG TRINH CON DELAY 10 MILI GIAY DELAY10MS: MOV 7EH,#100 DEL10MS: MOV 7FH,#048 ;NAP HANG SO DELAY LA 48 DJNZ 7FH,$ ;GIAM GIA TRI DEM CHO DEN KHI BANG DJNZ 7EH,DEL10MS RET ;CHUONG TRINH CON DELAY 20 MILI GIAY DELAY20MS: MOV 7EH,#200 DEL20MS: MOV 7FH,#048 DJNZ 7FH,$ DJNZ 7EH,DEL20MS RET ;CHUONG TRINH CON DELAY 50 MILI GIAY DELAY50MS: MOV 7EH,#200 DEL50MS: MOV 7FH,#250 DJNZ 7FH,$ DJNZ 7EH,DEL50MS RET ;CHUONG TRINH CON DELAY 100MS DELAY100MS: MOV 7DH,#4 DEL100S: CALL DELAY50MS DJNZ 7DH,DEL100S RET ;CHUONG TRINH CON DELAY 200MS DELAY200MS: MOV 7DH,#8 DEL200S: CALL DELAY50MS DJNZ 7DH,DEL200S RET ;CHUONG TRINH CON DELAY 500MS DELAY500MS: MOV 7DH,#10 DEL500S: CALL DELAY50MS DJNZ 7DH,DEL500S RET ;CHUONG TRINH CON DELAY GIAY DELAY1S: MOV 7DH,#20 DEL1S: CALL DELAY50MS DJNZ 7DH,DEL1S RET ;CHUONG TRINH CON DELAY2 GIAY DELAY2S: MOV 7DH,#40 DEL2S: CALL DELAY50MS -2DJNZ 7DH,DEL2S RET ;CHUONG TRINH CON DELAY3 GIAY DELAY3S: MOV 7DH,#60 DEL3S: CALL DELAY50MS DJNZ 7DH,DEL3S RET ;CHUONG TRINH CON DELAY4 GIAY DELAY4S: MOV 7DH,#80 DEL4S: CALL DELAY50MS DJNZ 7DH,DEL4S RET ;CHUONG TRINH DIEU KHIEN 16 LED CHOP TAT ORG 0000H LB: MOV P0,#00H ;TAT PORT0 MOV P1,#00H ;TAT PORT1 CALL DELAY100MS MOV P0,#0FFH ;SANG LED MOV P1,#0FFH ; SANG LED CALL DELAY100MS JMP LB ;QUAY LAI $INCLUDE(TV_DELAY.ASM) ;LENH KHAI BAO THU VIEN END I Bài tập: Hãy xem chương trình mẫu điều khiển 16 led chóp tắt dùng port và viết chương trình sáng tắt port 0, 2 Hãy viết chương trình sáng tắt port: port0, port1, port2, port3 CHƯƠNG TRÌNH ĐIỀU KHIỂN LED SÁNG VÀ TẮT DẦN ;CHUONG TRINH DIEU KHIEN LED SANG DAN LEN VA TAT HET – CACH I ORG 0000H LB: MOV MOV P0,#00000000B CALL DELAY100MS ;TAT PORT0 MOV P0,#00000001B CALL DELAY100MS ;sang led MOV P0,#00000011B CALL DELAY100MS ;sang led MOV P0,#00000111B CALL DELAY100MS ;sang led MOV P0,#00001111B CALL DELAY100MS P0,#00011111B ;sang led CALL DELAY100MS ;sang led MOV P0,#00111111B CALL DELAY100MS ;sang led MOV P0,#01111111B CALL DELAY100MS ;sang led -3- MOV P0,#11111111B CALL DELAY100MS JMP ;sang led LB $INCLUDE(TV_DELAY.ASM) END ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DIEU KHIEN PORT SANG DAN LEN TAT HET – CACH II ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000h LB: LB1: MOV CALL SETB MOV RLC MOV JNC JMP P0,#00H DELAY100MS C A,P0 A P0,A LB1 LB ;tat port ;goi chuong trinh delay ;lam cho bit C = ;chuyen noi dung port0 vao ghi A ;xoay noi dung ghi A sang trai ;tra lai cho port0 ;nhay ve de thuc hien tiepkhi c=o ;quay lai tu dau $INCLUDE(TV_DELAY.ASM) END Giải thích : để led sáng dần lên ta phải dòch mức vào ghi A, mức chứa bit C, lệnh xoay ghi A sang trái dòch mức từ C vào bit A0 ghi A Bit A7 dòch sang bit C Trong lần dòch sau dòch, bit C Nên ta dùng lệnh nhảy có điều kiện C = nhảy để quay lại tiếp tục thực Cho đến lần xoay thứ C = điều kiện không thõa mãn nên lệnh nhảy có điều kiện lệnh nhảy “JMP ” thực để làm lại từ đầu Thực bước giống trước I Các chương trình mẫu: Chương trình điều khiển port sáng dần tắt dần: xem lưu đồ thứ ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DIEU KHIEN PORT0 SANG TAT DAN ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H LB: MOV P0,#00H ;TAT PORT LB1: CALL SETB MOV RLC MOV JNC DELAY100MS C A,P0 A P0,A LB1 ;goi chuong trinh delay ;lam cho bit C = ;chuyen noi dung port0 vao ghi A ;xoay noi dung ghi A sang trai ;tra lai cho port0 ;nhay ve de thuc hien tiep c=0 LB2: CALL CLR MOV RLC MOV DELAY100MS C A,P0 A P0,A ;goi chuong trinh delay ;lam cho bit C = ;chuyen noi dung port0 vao ghi A ;xoay noi dung ghi A sang trai ;tra lai cho port0 -4JC LB2 JMP LB $INCLUDE(TV_DELAY.ASM) END ;nhay ve de thuc hien tiep c=1 ;quay ve lam lai tu dau Chương trình điều khiển port port sáng dần tắt dần: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh dieu khien port 0, sang dan len va tat dan ;ket noi port den led bang cap soi tuong tu cho port1 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H LB: MOV P0,#00H ;tat port MOV P1,#00H ;tat port LB1: LB2: lcall SETB MOV RLC MOV DELAY100MS C A,P0 A P0,A ;goi chuong trinh delay ;lam cho bit C = ;chuyen noi dung port0 vao ghi A ;xoay noi dung ghi A sang trai ;tra lai cho port0 MOV RLC MOV JNC A,P1 A P1,A LB1 ;chuyen noi dung port1 vao ghi A ;xoay noi dung ghi A sang trai ;tra lai cho port1 ;nhay ve de thuc hien tiep c=0 CALL CLR MOV RLC MOV DELAY100MS C A,P0 A P0,A ;goi chuong trinh delay ;lam cho bit C = ;chuyen noi dung port0 vao ghi A ;xoay noi dung ghi A sang trai ;tra lai cho port0 MOV A,P1 RLC A MOV P1,A JC LB2 JMP LB $INCLUDE(TV_DELAY.ASM) END II ;chuyen noi dung port1 vao ghi A ;xoay noi dung ghi A sang trai ;tra lai cho port1 ;nhay ve de thuc hien tiep c=1 ;quay ve lam lai tu dau Bài tập ứng dụng: Dùng port kết nối với led, viết chương trình điều khiển led sáng di chuyển từ trái sang phải Hãy viết chương trình điều khiển port 0, 1, 2, sáng dần tắt dần từ xuống từ lên Hãy viết chương trình điều khiển port 0, 1, 2, sáng dần tắt dần từ vào từ CHƯƠNG TRÌNH ĐIỀU KHIỂN LED SÁNG DỒN chuong trinh dieu khien port sang don va tat het - cach I ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H ;khai bao dia chi chtr chinh LB: LB1: MOV DPTR,#DULIEU CLR A MOVC A,@A+DPTR ;nap dia chi luu du lieu vao thghi dptr ;lay du lieu tu bo nho dua vao A -5MOV P0,A CALL DELAY100MS INC DPTR CJNE A,#0FFH,LB1 JMP LB $INCLUDE(TV_DELAY.ASM) ;khai bao dia chi luu tru vung du lieu DULIEU: DB 00000000b DB 00000001b DB 00000010b DB 00000100b DB 00001000b DB 00010000b DB 00100000b DB 01000000b DB 10000000b ;lan thu hai la byte DB 10000001b DB 10000010b DB 10000100b DB 10001000b DB 10010000b DB 10100000b DB 11000000b ;lan thu la byte DB 11000001b DB 11000010b DB 11000100b DB 11001000b DB 11010000b DB 11100000b ;lan thu la byte DB 11100001b DB 11100010b DB 11100100b DB 11101000b DB 11110000b ;lan thu la byte DB 11110001b db 11110010b db 11110100b db 11111000b ;lan thu la byte db 11111001b db 11111010b db 11111100b ;lan thu la byte db 11111101b db 11111110b ;lan thu la byte db 11111111b END ;goi port ;goi chtr delay ;tang dptr len o nho ke ;ktra co phai la byte ket thuc hay chua ;quay tro lam lai da het du lieu ;byte du lieu cuoi cung = FFH -6Theo cách viết ta quan sát liệu chương trình xếp theo trình tự chương trình thực nhiệm vụ di chuyển lần lược byte liệu có nhớ đem gởi vào A sau gởi port Lệnh “DULIEU: db liệu” có chức nạp byte liệu vào vùng nhớ chương trình Byte cuối FFH byte báo cho biết hết liệu Dữ liệu viết dạng số nhò phân cho dễ nhìn thấy viết dạng số hex – chương trình ngắn nhiều Phần khai báo liệu dạng số hex sau: DULIEU: DB DB DB DB DB DB DB DB DB 00H 001H,002H,004H,008H,010H,020H,040H,080H 81H,82H,84H,88H,90H,0A0H,0C0H 0C1H,0C2H,0C4H,0C8H,0D0H,0E0H 0E1H,0E2H,0E4H,0E8H,0F0H 0F1H,0F2H,0F4H,0F8H 0F9H,0FAH,0FCH 0FDH,0FEH 0FFH Chương trình giống viết theo cách II: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh dieu khien led sang don dung port ;ket noi port den led bang soi cap soi ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;dinh nghia cac bien X0 EQU 10H Y0 EQU 20H DEM TAM EQU EQU 30H 31H LED0 EQU P0 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;bat dau chuong trinh chinh ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H LB: LB2: LB1: MOV LED0,#00H CALL DELAY100M ;8 LED TAT ;tat 16 led va delay MOV MOV DEM,#8 X0,#0 ;led se di chuyen vi tri MOV MOV TAM,DEM Y0,#00000001B MOV ORL MOV A,Y0 A,X0 LED0,A ;luu trng thai ban dau CALL DELAY100MS CLR C ;xoa Cy de chi dich led di -7MOV RLC MOV A,Y0 A Y0,A DJNZ TAM,LB1 MOV X0,LED0 ;giam ndung o nho (11h) thi quay lai DJNZ DEM,LB2 JMP LB ;giam bien dem de xu li lan ke $INCLUDE(TV_DELAY.ASM) END Chương trình không khó ! Bạn tự nghiên cứu giải thuật? I Các chương trình mẫu: Chương trình điều khiển 16 led sáng dồn: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh dieu khien 16 led sang don dung port 0, ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -8;dinh nghia cac bien X0 X1 EQU EQU 10H 11H Y0 Y1 EQU EQU 20H 21H DEM TAM EQU EQU 30H 31H LED0 LED1 EQU EQU P0 P1 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;bat dau chuong trinh chinh ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H LB: LB2: LB1: MOV LED1,#0 MOV LED0,#0 CALL DELAY100MS ;tat 16 led va delay MOV DEM,#16 ;led se di chuyen 16 vi tri MOV MOV X0,#0 X1,#0 MOV MOV MOV TAM,DEM Y0,#00000001B Y1,#00000000B MOV ORL MOV A,Y0 A,X0 LED0,A MOV ORL MOV A,Y1 A,X1 LED1,A ;luu trng thai ban dau CALL DELAY100MS CLR MOV RLC MOV C A,Y0 A Y0,A MOV RLC MOV DJNZ A,Y1 A Y1,A TAM,LB1 MOV MOV DJNZ JMP X0,LED0 X1,LED1 DEM,LB2 LB ;xoa Cy de chi dich led di ;giam ndung o nho (11h) thi quay lai ;giam bien dem de xu li lan ke -9$INCLUDE(TV_DELAY.ASM) END II Bài tập ứng dụng: Hãy viết chương trình điều khiển port: port0, port1, port2 sáng dồn Hãy viết chương trình điều khiển port: port0, port1, port2 port3 sáng dồn Hãy viết chương trình sáng dồn port từ vào từ Hãy viết chương trình sáng dồn port 0, 1, từ vào từ CHƯƠNG TRÌNH ĐIỀU KHIỂN ĐIỂM SÁNG DỊCH CHUYỂN MẤT DẦN chuong trinh dieu khien led sang het va diem sang dich chuyen tat dan ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;dinh nghia cac nhan X0 Y0 Z0 EQU EQU EQU 11H 21H R0 LED0 DEM EQU EQU P0 40H ORG MOV CALL MOV 0000H LED0,#0FFH DELAY100MS DEM,#8 MOV MOV X0,#11111110B Y0,#00000001B LB2: MOV Z0,Y0 LB1: CALL MOV ORL MOV CALL XPHAI_Z0 A,X0 A,Z0 LED0,A DELAY100MS LB: CJNE Z0,#00,LB1 CALL XTRAI_X0 CALL XTRAI_Y0 DJNZ DEM,LB2 JMP LB ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;bat dau cac chuong trinh - 10 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx XPHAI_Z0: CLR C MOV A,Z0 RRC A MOV Z0,A RET XTRAI_X0: CLR MOV RLC MOV RET C A,X0 A X0,A XTRAI_Y0: CLR C MOV A,Y0 RLC A MOV Y0,A RET $INCLUDE(TV_DELAY.ASM) END I Các chương trình mẫu: Chương trình mẫu điều khiển 16 led dòch chuyển tắt dần ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh dieu khien 16 led sang het va diem sang dich chuyen tat dan ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;dinh nghia cac nhan LB: LB2: X1 X0 EQU EQU 10H 11H Y1 Y0 EQU EQU 20H 21H Z1 Z0 EQU EQU R1 R0 LED0 LED1 DEM EQU EQU EQU P0 P1 40H ORG 0000H MOV MOV CALL MOV LED1,#0FFH LED0,#0FFH DELAY100MS DEM,#16 MOV MOV X1,#11111111B X0,#11111110B ;byte cao ;byte thap MOV MOV Y1,#00000000B Y0,#00000001B ;byte cao ;byte thap MOV Z1,Y1 - 12 - II Bài tập: Hãy viết chương trình điều khiển port: 0, 1, giống Hãy viết chương trình điều khiển port: 0, 1, 2, giống Làm lại cho chiều di chuyển ngược lại Hãy viết chương trình điều khiển port 0, 1, 2, với điểm sáng dòch chuyển dần từ theo chiều từ từ vào CHƯƠNG TRÌNH DELAY SỬ DỤNG TIMER xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh sang tat 8LED su dung timer lam bo dinh thoi delay 65536 micro giay ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H MOV TMOD,#01 ; khoi tao timer T0 mode dem 16 bit SETB TR0 ; cho phep timer bat dau dem xung LB: MOV P0,#00H CALL DELAY ; delay 65536 micro giay MOV P0,#0FFH CALL DELAY JMP LB ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh delay 65535 micro giay ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DELAY: CLR TF0 ; xoa co ngat cua timer JNB TF0,$ ; Cho den tran RET END Thực bước giống xem kết Giải thích : Bài sáng tắt LED giống làm trước khác thay chương trình delay cách sử dụng timer để việc tính toán thời gian dễ dàng Hàng lệnh chương trình chọn mode làm việc cho timer T0 – xem chương timer (timer T1 chưa sử dụng nên không cần quan tâm) Lệnh thứ cho phép timer bắt đầu đếm xung nội từ mạch dao động bên Với chương trình timer T0 đếm từ giá trò nạp ban đầu 0000H đến FFFFH có thêm xung giá trò đếm 10000H Một cách đơn giản ta xem số 10000H chia làm 2: số “1” tương đương bit lưu cờ tràn TF0 số “0000H” tương đương 16 bit lưu ghi TH0TL0 Số xung đếm 10000H –0000H = 10000 (65536) xung xung có chu kì micro giây nên lượng thời gian mà timer T0 đếm 65536 micro giây I Các chương trình mẫu: Để delay với lượng thời gian nhỏ ta tham khảo mẫu đây: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh sang tat LED su dung timer lam bo dinh thoi delay 250 micro giay ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H - 13 MOV TMOD,#01 SETB TR0 ; khoi tao timer T0 mode dem 16 bit ; cho phep timer bat dau dem xung LB: MOV P0,#00H CALL DELAY250 ; delay 250 micro giay MOV P0,#0FFH CALL DELAY250 JMP LB ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh delay 250 micro giay ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DELAY250: CLR TF0 MOV TL0,#LOW(-250) ; nap 06 vao TL0 MOV TH0,#HIGH(-250) ; nap FF vao TH0 JNB TF0,$ RET END Giải thích : Lượng thời gian có 250 micro giây, giá trò ban đầu nạp cho timer FF06H nên đếm đến 10000H kết xung đếm 10000H – FF06H = 00FA (250) xung có chu kỳ micro giây nên lượng thời gian mà timer T0 đếm đượclà 250 micro giây Để khỏi phải tính toán phức tạp ta viết hai lệnh sau: MOV TL0,#LOW(-250) ; nap 06 vao TL0 MOV TH0,#HIGH(-250) ; nap FF vao TH0 Khi biên dòch trình biên dòch tự động tính toán cho Chú ý với chương trình điều khiển led sáng với thời gian trể nhỏ led sáng mờ không chóp tắt ta viết Trong phần tính toán chưa tính toán lệnh chương trình delay Muốn viết chương trình với khoảng thời gian lớn phải thêm ghi ví dụ muốn viết delay giây ta viết chương trình trình delay 50000 µs = 50ms cho chúng thực 100 lần – sau dùng timer để tạo xung xác thời gian cho sau Bài tập: Hãy viết chương trình sáng tắt port sử dụng timer làm đònh thời delay giây Hãy viết chương trình giống delay 10 giây Tương tự viết chương trình delay CHƯƠNG TRÌNH ĐIỀU KHIỂN LED ĐOẠN RỜI ĐẾM TỪ ĐẾN ;CHUONG TRINH DEM TU DEN HIEN THI TREN 1L ED DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H LB: MOV P0,#0C0H ;so CALL DELAY100MS MOV P0,#0F9H ;so CALL DELAY100MS - 14 - MOV P0,#0A4H ;so CALL DELAY100MS MOV P0,#0B0H ;so CALL DELAY100MS MOV P0,#099H ;so CALL DELAY100MS MOV P0,#092H ;so CALL DELAY100MS MOV P0,#082H ;so CALL DELAY100MS MOV P0,#0F8H ;so CALL DELAY_100MS MOV P0,#080H ;so CALL DELAY100MS MOV P0,#090H ; so CALL DELAY100MS JMP LB $INCLUDE(TV_DELAY.ASM) END Đếm từ đến hiển thò led – cách thứ 2: - Giải thuật điều khiển: - Chương trình điều khiển sau: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - 15 ;CHUONG TRINH DEM TU DEN HIEN THI TREN 1L ED DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DEM EQU R2 ORG 0000H LB: MOV MOV DPTR,#MA7DOAN DEM,#0 LB1: MOV MOVC MOV CALL A,DEM A,@A+DPTR P0,A DELAY100MS INC DEM CJNE DEM,#10,LB1 JMP LB ;HIEN THI TREN LED DOAN ;CHUAN BI CHO SO KE $INCLUDE(TV_DELAY.ASM) MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END I Câu hỏi tập: • Hãy điều chỉnh chương trình để mạch đếm xuống CHƯƠNG TRÌNH ĐIỀU KHIỂN LED ĐOẠN RỜI ĐẾM TỪ 00 ĐẾN 99 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DEM TU 00 DEN 99 HIEN THI TREN LED DOAN ANODE CHUNG ;DUNG P0 VA P1 KET NOI VOI LED DON VI VA CHUC ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DONVI EQU R2 CHUC EQU R3 LB: LB2: LB1: ORG 0000H MOV MOV MOV DPTR,#MA7DOAN CHUC,#0 DONVI,#0 MOV A,CHUC MOVC A,@A+DPTR MOV P1,A MOV A,DONVI MOVC A,@A+DPTR MOV P0,A CALL DELAY100MS INC DONVI CJNE DONVI,#10,LB1 INC CHUC CJNE CHUC,#10,LB2 JMP LB - 16 - $INCLUDE(TV_DELAY.ASM) MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END I Câu hỏi tập: a b Hãy điều chỉnh lưu đồ chương trình để mạch đếm từ 00 đến 25 Hãy điều chỉnh lưu đồ chương trình để mạch đếm từ 05 đến 25 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DEM TU 05 DEN 25 HIEN THI TREN LED DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DONVI EQU R2 CHUC EQU R3 LB: LB2: LB1: ORG 0000H MOV MOV MOV DPTR,#MA7DOAN CHUC,#0 DONVI,#5 MOV A,CHUC MOVC A,@A+DPTR MOV P1,A MOV A,DONVI MOVC A,@A+DPTR MOV P0,A CALL DELAY100MS LB3: INC CJNE MOV INC JMP DONVI DONVI,#10,LB3 DONVI,#0 CHUC LB1 MOV SWAP ORL CJNE JMP A,CHUC A A,DONVI A,#26H,LB1 LB $INCLUDE(TV_DELAY.ASM) MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END Hai biến chuc donvi bit sử dụng có bit, chương trình sau dùng biến lưu hàng đơn vò hàng chục ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DEM TU 00 DEN 99 HIEN THI TREN LED DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - 17 DEM EQU R2 ;4 BIT THAP LA HANG DONVI, BIT CAO LA HANG ORG MOV MOV CALL CALL 0000H DPTR,#MA7DOAN DEM,#00 GIAIMA DELAY100MS CHUC LB: LB2: LB1: MOV A,DEM ADD A,#1 DA A MOV DEM,A JMP LB1 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX GIAIMA: MOV A,DEM ANL A,#0FH ;XOA HANG CHUC, GIU LAI HANG DONVI MOVC A,@A+DPTR MOV P1,A MOV A,DEM ANL A,#0F0H ;XOA HANG DON VI, GIU LAI HANG CHUC SWAP A MOVC A,@A+DPTR MOV P0,A RET $INCLUDE(TV_DELAY.ASM) MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END Trong chương trình biếm DEM tăng giá trò theo kiểu BCD nhờ lệnh cộng lệnh hiệu chỉnh BCD nằm sau lệnh cộng Chương trình giải mã lấy biến đếm xoá hàng đơn vò để giải mã hàng chục, sau làm lại cho hàng chuc Chương trình sau có chức đếm từ 05 đến 25 việc so sánh để dừng đơn giản sau: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DEM TU 05 DEN 25 HIEN THI TREN LED DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DEM EQU R2 ORG 0000H LB: MOV DPTR,#MA7DOAN LB2: MOV DEM,#05 LB1: CALL GIAIMA CALL DELAY100MS MOV ADD DA MOV A,DEM A,#1 A DEM,A ;DEM BCD CJNE A,#26H,LB1 JMP LB2 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - 18 GIAIMA: MOV ANL MOVC MOV A,DEM A,#0FH A,@A+DPTR P1,A ;XOA HANG CHUC, GIU LAI HANG DONVI MOV A,DEM ANL A,#0F0H ;XOA HANG DON VI, GIU LAI HANG CHUC SWAP A MOVC A,@A+DPTR MOV P0,A RET $INCLUDE(TV_DELAY.ASM) MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END Chương trình sau viết theo cách khác dùng số nhò phân phải thêm phần chuyển số hex sang số BCD sau: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DEM TU 00 DEN 99 HIEN THI TREN LED DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DEM EQU R2 ;4 BIT THAP LA HANG DONVI, BIT CAO LA HANG CHUC ORG 0000H LB: MOV DPTR,#MA7DOAN LB2: MOV DEM,#00 LB1: CALL HEXTOBCD ;CHUYEN SO HEX SANG SO BCD CALL GIAIMA CALL DELAY100MS INC DEM ;DEM NHI PHAN JMP LB1 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX HEXTOBCD: MOV A,DEM MOV B,#10 DIV AB ;(A) LUU KET QUA, (B) LUU SO DU RET ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX GIAIMA: MOVC A,@A+DPTR MOV P1,A MOV A,B MOVC A,@A+DPTR MOV P0,A RET $INCLUDE(TV_DELAY.ASM) MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END CHƯƠNG TRÌNH ĐIỀU KHIỂN LED ĐOẠN QUÉT HIỂN THỊ TỪ SỐ ĐẾN SỐ TRÊN LED chuong trinh thu led doan sang cac so den so tren led ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx QUET EQU P2 ;DIEU KHIEN TRANSISOTR LED7 EQU P0 ;DIEU KHIEN CAC DOAN ORG 0000H - 19 - LB: MOV MOV CALL MOV QUET,#11111110B LED7,#11000000B DELAY1MS QUET,#11111111B ; cho phep D1 sang ; ma cua so MOV MOV CALL MOV QUET,#11111101B LED7,#11111001B DELAY1MS QUET,#11111111B ; cho phep D2 sang ; ma cua so MOV MOV CALL MOV QUET,#11111011B LED7,#10100100B DELAY1MS QUET,#11111111B ; cho phep D3 sang ; ma cua so MOV MOV CALL MOV QUET,#11110111B LED7,#10110000B DELAY1MS QUET,#11111111B ; cho phep D4 sang ; ma cua so MOV MOV CALL MOV QUET,#11101111B LED7,#10011001B DELAY1MS QUET,#11111111B ; cho phep D5 sang ; ma cua so MOV MOV CALL MOV QUET,#11011111B LED7,#10010010B DELAY1MS QUET,#11111111B ; cho phep D6 sang ; ma cua so MOV MOV CALL MOV QUET,#10111111B LED7,#10000010B DELAY1MS QUET,#11111111B ; cho phep D7 sang ; ma cua so MOV MOV CALL MOV JMP QUET,#01111111B LED7,#11111000B DELAY1MS QUET,#11111111B LB ; cho phep D8 sang ; ma cua so $INCLUDE(TV_DELAY.ASM) END Chú ý: Nếu chạy mà kết hiển thò không xem lại chương trình, chương trình hoàn toàn kiểm tra kết nối port điều khiển với led Để sáng lúc led ta sử dụng phương pháp quét led tức thời điểm có led sáng giảm thời gian delay vừa với thời gian lưu ảnh mắt Lúc này, thấy led sáng lúc Nếu thời gian delay led lớn ta thấy led nhấp nháy hay chập chờn c Hiển thò số từ đến led 7đoạn – cách 2: - Giải thuật điều khiển: - 20 - - Chương trình điều khiển sau: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh hien thi so tu den tren led theo cach viet thu ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx QUET EQU P2 LED7 EQU P0 DEM EQU R4 LB: LB1: ORG MOV MOV MOV 0000H DPTR,#MA7DOAN DEM,#0 R3,#0FEH MOV A,DEM MOVC A,@A+DPTR MOV LED7,A MOV QUET,R3 CALL DELAY1MS MOV QUET,#0FFH MOV RR MOV INC ;nap dia chi vung ma vao dptr ;ma quet 11111110B ; ;lay ma doan ;tat het de chong lem A,R3 A R3,A DEM CJNE DEM,#8, LB1 JMP LB2 ;quay lai lam lai tu dau MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H $INCLUDE(TV_DELAY.ASM) END Chú ý: Tạo thêm chương trình thư viện đoạn “TV_7DOAN.ASM” sau: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - 21 ;KHAI BAO BIEN DUNG CHO LED DOAN QUET ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx QUET EQU P2 LED7 EQU P0 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;khai bao du lieu ma doan ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH CHƯƠNG TRÌNH ĐẾM GIÂY HIỂN THỊ Ở LED – SỬ DỤNG NGẮT CỦA TIMER ĐỂ ĐẾM CHÍNH XÁC VỀ THỜI GIAN chuong trinh dem len tu 00 den 60 hien thi tren led cua led quet ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GIAY EQU R2 ;gan bien dem giay la R2 BDN EQU R1 ;gan bien dem ngat ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; CHUONG TRINH CHINH ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 0000H ;bat dau chuong trinh JMP LB ;nhay den chtr chinh ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH CON NGAT TIMER0 SAU KHOANG THOI GIAN 50MS ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 000BH INC BDN ;tang bien dem giay len MOV TH0,#HIGH(-50000) ;khoi tao timer delay 50ms MOV TL0,#LOW(-50000) CLR TF0 RETI LB: MOV MOV MOV SETB DPTR,#MA7DOAN IE,#10000010B TMOD,#01H TR0 ;dptr quan ly vung ma doan ;cho phep timer0 ngat ;timer0: mod - dem 16 bit ;cho phep timer bat dau dem LB0: LB1: MOV MOV CALL CALL GIAY,#00H BDN,#00 GIAIMA HIENTHI2 ;giay=00 ;nap bien den so lan ngat CJNE MOV ADD DA MOV CJNE BDN,#20,LB2 A,GIAY A,#1 A GIAY,A GIAY,#60H,LB1 ;chua dung 20 lan [tuc giay] ;chuyen giay sang A ;tang giay len ;hieu chinh so BCD A ;tra lai cho giay ;ss giay voi 60 LB2: JMP LB0 ;lam lai tu dau ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh giai ma ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - 22 GIAIMA: MOV ANL MOVC MOV A,GIAY A,#0FH A,@A+DPTR 27H,A MOV ANL SWAP MOVC MOV RET A,GIAY A,#0F0H A A,@A+DPTR 26H,A ;xoa bit cao hang chuc giay ;lay ma doan ;cat ma hang don vi giay vao o nho 27h ;xoa bit thap hang dvi ;chuyen bit cao xuong vi tri thap ;lay ma doan hang chuc ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx ;chuong trinh hien thi ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx HIENTHI2: MOV A,# 11111110B ;ma quet MOV R0,#27H HT2A: MOV MOV CALL MOV DEC RL JB RET LED7,@R0 QUET,A DELAY1MS QUET,#0FFH R0 A ACC.2, HT2A ;chuyen sang led ke $INCLUDE(TV_DELAY.ASM) $INCLUDE(TV_7DOAN.ASM) END Thực bước giống chuẩn mạch đếm từ 00 đến 59 I Câu hỏi tập ứng dụng: Hãy viết chương trình đếm lên từ 00 đến 99 làm nào? Hãy viết chương trình đếm xuống từ 60 00 làm nào? CHƯƠNG TRÌNH ĐẾM PHÚT - GIÂY HIỂN THỊ Ở LED ;chuong trinh dem phut giay, su dung ngat timer t0 de dem chinh xac ve thoi gian ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GIAY EQU R2 ;gan bien dem giay la R2 PHUT EQU R3 ;gan bien dem phut cho R3 BDN EQU R1 ;gan bien dem ngat ORG JMP 0000h LB ;bat dau chuong trinh ;nhay den chtr chinh ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - 23 ;CHUONG TRINH CON NGAT TIMER0 SAU KHOANG THOI GIAN 50MS ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 000BH INC BDN ;TANG BIEN DEM GIAY MOV TH0,#HIGH(-50000) ;khoi tao lai cho timer delay 50ms MOV TL0,#LOW(-50000) CLR TF0 RETI LB: MOV MOV MOV SETB MOV MOV DPTR,#MA7DOAN TMOD,#01H IE,#10000010B TR0 22H,#0FFH 25H,#0FFH ;dptr quan ly vung ma doan ;timer0: mod - dem 16 bit ;cho phep timer ngat ;cho timer bat dau dem LB3: LB0: LB1: MOV MOV MOV CALL CALL PHUT,#00H GIAY,#00H BDN,#00H GIAIMA HIENTHI4 ;phut=00 ;giay=00 ;nap bien den so lan ngat CJNE MOV ADD DA MOV CJNE BDN,#20,LB2 A,GIAY A,#1 A GIAY,A GIAY,#60H,LB1 ;chua dung 20 lan [tuc giay] ;chuyen giay sang A ;tang giay len ;hieu chinh so BCD A ;tra lai cho giay ;ss giay voi 60 MOV ADD DA MOV CJNE A,PHUT A,#1 A PHUT,A PHUT,#60H,LB0 ;chuyen phut sang A ;tang phut len ;hieu chinh so BCD A ;tra lai cho phut ;ss giay voi 60 LB2: ;goi chtr hien thi JMP LB3 ;lam lai tu dau ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh giai ma ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GIAIMA: MOV A,GIAY ANL A,#0FH ;xoa bit cao hang chuc giay MOVC A,@A+DPTR ;lay ma doan MOV 27H,A ;cat ma vao o nho 20h MOV ANL SWAP MOVC MOV A,GIAY A,#0F0H A A,@A+DPTR 26H,A MOV ANL MOVC MOV A,PHUT A,#0FH A,@A+DPTR 24H,A ;xoa bit thap hang dvi ;chuyen bit cao xuong vi tri thap ;lay ma doan hang chuc ;xoa bit cao hang chuc phut ;lay ma doan ;cat ma vao o nho 20h - 24 MOV ANL SWAP MOVC MOV RET A,PHUT A,#0F0H A A,@A+DPTR 23H,A ;xoa bit thap hang dvi phut ;chuyen bit cao xuong vi tri thap ;lay ma doan hang chuc ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx ;chuong trinh hien thi ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx HIENTHI4: MOV A,#11111110B ;ma quet MOV R0,#27H HT4A: MOV LED7,@R0 MOV QUET,A CALL DELAY1MS MOV QUET,#0FFH DEC R0 RL A ;chuyen sang led ke JB ACC.6, HT4A RET $INCLUDE(TV_DELAY.ASM) $INCLUDE(TV_7DOAN.ASM) END CHƯƠNG TRÌNH ĐẾM GIỜ - PHÚT - GIÂY HIỂN THỊ Ở LED chuong trinh dem dong ho so gio phut giay ;su dung ngat timer t0 de dem chinh xac ve thoi gian ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GIAY EQU R2 ;gan bien dem giay la R2 PHUT EQU R3 ;gan bien dem phut cho R3 GIO EQU R4 BDN EQU R1 ;gan bien dem ngat ORG 0000h ;bat dau chuong trinh JMP LB ;nhay den chtr chinh ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH CON NGAT TIMER0 SAU KHOANG THOI GIAN 50MS ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ORG 000BH INC BDN ;TANG BIEN DEM GIAY MOV TH0,#HIGH(-50000) ;khoi tao lai cho timer delay 50ms MOV TL0,#LOW(-50000) CLR TF0 RETI LB: MOV MOV MOV SETB MOV MOV DPTR,#MA7DOAN TMOD,#01H IE,#10000010B TR0 22H,#0FFH 25H,#0FFH ;dptr quan ly vung ma doan ;timer0: mod - dem 16 bit ;cho phep timer ngat ;cho timer bat dau dem - 25 LB4: LB3: LB0: LB1: MOV MOV MOV MOV GIO,#00H PHUT,#00H GIAY,#00H BDN,#00H ;GIO=00 ;phut=00 ;giay=00 ;nap bien den so lan ngat LB2: CALL GIAIMA CALL HIENTHI8 ;goi chtr hien thi CJNE MOV ADD DA MOV CJNE BDN,#20,LB2 A,GIAY A,#1 A GIAY,A GIAY,#60H,LB1 ;chua dung 20 lan [tuc giay] ;chuyen giay sang A ;tang giay len ;hieu chinh so BCD A ;tra lai cho giay ;ss giay voi 60 MOV ADD DA MOV CJNE A,PHUT A,#1 A PHUT,A PHUT,#60H,LB0 ;chuyen phut sang A ;tang phut len ;hieu chinh so BCD A ;tra lai cho phut ;ss giay voi 60 MOV ADD DA MOV CJNE A,GIO A,#1 A GIO,A GIO,#24H,LB3 ;chuyen gio sang A ;tang gio len ;hieu chinh so BCD A ;tra lai cho gio ;ss gio voi 24 JMP LB4 ;lam lai tu dau ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh giai ma ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GIAIMA: MOV A,GIAY ANL A,#0FH ;xoa bit cao hang chuc giay MOVC A,@A+DPTR ;lay ma doan MOV 27H,A ;cat ma vao o nho 27h MOV ANL SWAP MOVC MOV A,GIAY A,#0F0H A A,@A+DPTR 26H,A ;xoa bit thap hang dvi ;chuyen bit cao xuong vi tri thap ;lay ma doan ;cat ma vao o nho 26h MOV ANL MOVC MOV A,PHUT A,#0FH A,@A+DPTR 24H,A ;xoa bit cao hang chuc phut ;lay ma doan ;cat ma vao o nho 24h MOV ANL SWAP MOVC MOV A,PHUT A,#0F0H A A,@A+DPTR 23H,A ;xoa bit thap hang dvi phut ;chuyen bit cao xuong vi tri thap ;lay ma doan hang chuc ;cat ma vao o nho 23h MOV A,GIO ANL A,#0FH MOVC A,@A+DPTR ;xoa bit cao hang chuc phut ;lay ma doan - 26 MOV 21H,A ;cat ma vao o nho 21h MOV ANL SWAP MOVC MOV A,GIO A,#0F0H A A,@A+DPTR 20H,A ;xoa bit thap hang dvi phut ;chuyen bit cao xuong vi tri thap ;lay ma doan hang chuc ;cat ma vao o nho 20h RET ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx ;chuong trinh hien thi LED ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx HIENTHI8: MOV A,#11111110B ;ma quet MOV R0,#27H HT8A: MOV MOV CALL MOV DEC RL JB RET LED7,@R0 QUET,A DELAY1MS QUET,#0FFH R0 A ACC.0, HT8A ;chuyen sang led ke $INCLUDE(TV_DELAY.ASM) $INCLUDE(TV_7DOAN.ASM) END Thực bước giống chuẩn xem kết mạch có đếm phút giây hay không, không hiệu chỉnh lại Chú ý: giảmgiá trò so sánh biến bdn để thời gian chương trình giảm nhỏ giúp kiểm tra nhanh hàng phút, sau đếm hiệu chỉnh lại lệnh so sánh bdn với số 20 mạch đếm thời gian COPY đoạn chương trình hiển thò “HIENTHI8” vào thư viện “TV_7DOAN.ASM” III Bài tập ứng dụng: Hãy điều chỉnh chương trình đếm phút giây để đếm BCD từ 000000 đến 999999 hiển thò led 3,4,5,6,7,8 Hãy cho biết sai số cách làm giảm sai số Chương trình bắt đầu chạy 00 00 phút 00 giây Hãy viết chương trình quét phím để điều chỉnh phút giây theo ý muốn [...]... sẽ đếm đúng thời gian COPY đoạn chương trình hiển thò “HIENTHI8” vào thư vi n “TV_7DOAN.ASM” III Bài tập ứng dụng: 1 Hãy điều chỉnh chương trình đếm giờ phút giây để đếm BCD từ 000000 đến 999999 hiển thò ở các led 3,4,5,6,7,8 2 Hãy cho biết sai số và cách làm giảm sai số 3 Chương trình trên luôn bắt đầu chạy tại 00 giờ 00 phút 00 giây Hãy vi t chương trình quét phím để điều chỉnh giờ phút giây theo ý... LED0 ,A MOV ORL MOV RET A,X1 A,Z1 LED1 ,A CLR MOV RLC MOV C A,X0 A x0,a MOV RLC MOV RET A,X1 A X1,A CLR MOV RLC MOV C A,Y0 A Y0,A MOV RLC MOV RET A,Y1 A y1,a $INCLUDE(TV_DELAY.ASM) END - 12 - II Bài tập: 1 2 3 4 Hãy vi t chương trình điều khiển 3 port: 0, 1, 2 giống như trên Hãy vi t chương trình điều khiển 4 port: 0, 1, 2, 3 giống như trên Làm lại các bài cho các chiều di chuyển ngược lại Hãy vi t chương. .. chúng ta sẽ dùng timer để tạo ra các xung chính xác về thời gian cho các bài sau Bài tập: 1 Hãy vi t chương trình sáng tắt port 2 sử dụng timer làm bộ đònh thời delay 5 giây 2 Hãy vi t chương trình giống trên nhưng delay 10 giây 3 Tương tự hãy vi t chương trình delay 1 giờ CHƯƠNG TRÌNH ĐIỀU KHIỂN 1 LED 7 ĐOẠN RỜI ĐẾM TỪ 0 ĐẾN 9 ;CHUONG TRINH DEM TU 0 DEN 9 HIEN THI TREN 1L ED 7 DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx... đã vi t ở trên Trong phần tính toán chúng ta chưa tính toán các lệnh trong chương trình con delay Muốn vi t chương trình với các khoảng thời gian lớn hơn thì phải thêm thanh ghi ví dụ muốn vi t delay 5 giây thì ta vi t chương trình trình con delay 50000 µs = 50ms và cho chúng thực hiện 100 lần – sau này chúng ta sẽ dùng timer để tạo ra các xung chính xác về thời gian cho các bài sau Bài tập: 1 Hãy vi t... hãy xem lại chương trình, nếu chương trình hoàn toàn đúng thì hãy kiểm tra kết nối 2 port điều khiển với led Để sáng cùng 1 lúc 8 led ta sử dụng phương pháp quét led tức là tại một thời điểm chỉ có 1 led sáng và khi giảm thời gian delay vừa với thời gian lưu ảnh của mắt Lúc này, chúng ta sẽ thấy 8 led sáng cùng một lúc Nếu thời gian delay giữa các led lớn thì ta sẽ thấy 8 led nhấp nháy hay chập chờn... ;HIEN THI TREN LED 7 DOAN ;CHUAN BI CHO SO KE $INCLUDE(TV_DELAY.ASM) MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END I Câu hỏi và bài tập: • Hãy điều chỉnh chương trình trên để mạch đếm xuống CHƯƠNG TRÌNH ĐIỀU KHIỂN 2 LED 7 ĐOẠN RỜI ĐẾM TỪ 00 ĐẾN 99 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DEM TU 00 DEN 99 HIEN THI TREN 2 LED 7 DOAN ANODE... A ACC.2, HT2A ;chuyen sang led ke $INCLUDE(TV_DELAY.ASM) $INCLUDE(TV_7DOAN.ASM) END 1 Thực hiện các bước giống như các bài chuẩn cho đến khi mạch đếm đúng từ 00 đến 59 I Câu hỏi và bài tập ứng dụng: 1 Hãy vi t chương trình đếm lên từ 00 đến 99 thì làm như thế nào? 2 Hãy vi t chương trình đếm xuống từ 60 về 00 thì làm như thế nào? CHƯƠNG TRÌNH ĐẾM PHÚT - GIÂY HIỂN THỊ Ở 4 LED ;chuong trinh dem phut... 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END I Câu hỏi và bài tập: a b Hãy điều chỉnh lưu đồ và chương trình trên để mạch đếm từ 00 đến 25 Hãy điều chỉnh lưu đồ và chương trình trên để mạch đếm từ 05 đến 25 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH DEM TU 05 DEN 25 HIEN THI TREN 2 LED 7 DOAN ANODE CHUNG ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DONVI EQU R2 CHUC... chập chờn c Hiển thò 8 số từ 0 đến 7 trên 8 led 7đoạn – cách 2: - Giải thuật điều khiển: - 20 - - Chương trình điều khiển như sau: ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh hien thi 8 so tu 0 den 7 tren 8 led theo cach viet thu 2 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx QUET EQU P2 LED7 EQU P0 DEM EQU R4 LB: LB1: ORG MOV MOV... 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END CHƯƠNG TRÌNH ĐIỀU KHIỂN 8 LED 7 ĐOẠN QUÉT HIỂN THỊ TỪ SỐ 0 ĐẾN SỐ 7 TRÊN 8 LED chuong trinh thu 8 led 7 doan sang cac so 0 den so 7 tren 8 led ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx QUET EQU P2 ;DIEU KHIEN TRANSISOTR LED7 EQU P0 ;DIEU KHIEN CAC DOAN ORG 0000H - 19 - LB: MOV MOV CALL MOV QUET,#11111110B LED7 ,#11000000B DELAY1MS QUET,#11111111B