![]() |
Mạch mô phỏng đèn giao thông
2 Attachment(s)
Chào các anh chị em, mình cũng vừa mới nghiên cứu về PIC16F84A và ứng dụng vào mô phỏng một mạch đèn giao thông có đếm số. Mình dùng thêm con 7447 để giải mã Led 7 đoạn và con 74138,74139 để phân kênh
Mạch mô phỏng mình dùng PROTEUS đễ vẽ. Còn đoạn code thì dùng chương trình MPLAB viết. Tuy nhiên vì sản phẩm đầu tay về con PIC nên đoạn mã chưa chạy, cũng chưa biết sai chỗ nào. Ở đây mình chỉ đơn thuần là xuất các chân trên các Port cho các Led sáng, sau đó delay một khoảng thời gian, và cứ như vậy theo phương pháp quét Led. Nào, anh chị em cùng ra tay giúp đỡ lính mới nhé. |
Đây là phần đầu code của bạn (Do dài quá diễn đàn cấm nếu số ký tự vượt giới hạn):
Code:
LIST P=16F84A |
Phần còn lại:
Code:
;.......................LUOT 2......................................; |
Xem nào !
Đầu tiên là các vòng lặp LOOPx của bạn tại sao lại kết thúc bằng return.Chỉ khi nào dùng lệnh call nhãn thì cuối nhãn đó bạn phải đặt lệnh return để nó quay trở về khi thực hiện xong. Trong mỗi vòng lặp LOOPx, bạn đều dùng lệnh GOTO LOOPx ở cuối.Nghĩa là với vòng lặp LOOP1 đầu tiên nếu viết đúng thì nó cứ lặp đi lặp lại những gì trong vòng lặp này chứ có nhảy tới vòng lặp LOOP nào khác nữa đâu. Từ Nhãn SET_PORTS trở đi là OK rồi. Bạn xem kĩ nhé! |
À ! Còn một lỗi cực kì quan trọng khiến chương trình mô phỏng của bạn bị tịt ngòi.
Đoạn cuối cùng code của bạn: Code:
;..........................................TAO HAM DELAY...................................; Trích:
d nhận một trong hai giá trị 0 hoặc 1 Nếu d=0, kết quả giảm bien se được lưu vào thanh ghi W (bien -> W), Nếu d=1, kết quả giảm bien sẽ được lưu vào bien (bien -> bien) |
Hay quá, vậy mà mình cứ tìm hoài không ra, để mình thử lại xem sao rồi nhắn lại cho anh em biết nhé. Cảm ơn bạn "nhh" nhiều.
|
1 Attachment(s)
Ban "nhh" cho mình hỏi tiếp nhé. Mình đã chỉnh sửa lại đoạn code rồi. Mình có gởi kèm đoạn code cho bạn xem đấy. Mình đã bỏ phần: Tạo hàm Delay, mà thay vào đó là viết luôn vào các Loop, tuy nhiên trình biên dịch MPLAB vẫn còn báo lỗi. Lần này lại phải nhờ tiếp đến bạn "nhh" và các anh chị em nữa rồi, giúp đỡ anh em với nhé.
|
Trích:
Code:
LOOP1 Code:
BCF STATUS,RP1 Chương trình sau sẽ làm sáng bừng 8 con led nối với portb của PIC6F84 qua 8 điện trở 220 Ohm: Code:
;==================================================================== Còn đây là chương trình nhấp nháy 8 con led trong trường hợp trên, thời gian trễ là 1s Code:
;======================================== Chúc học tốt nhé! |
chào các anh chị ,có ai có tai lieu ve vấn đề nay thi gưi cho em với , em đang làm đồ án mạch đèn giao thông do.cam ơn
|
Bác Nhh nên dùng ngắt Timer1 để viết cho chương trình nhấp nháy vừa ngắn gọn lại hiệu quả. Viết như vậy không xứng danh với đệ tử 9 túi.
Tại chương trình ngắt timer0 ta kiểm tra timer1 (Để tràn Timer1 là 0,5s) để tạo ngắt Timer0 0,5ms (đối với thạch anh 4MHz) bạn đưa 0xa0 vào thanh ghi INTCON, đưa 0x80 vào thanh ghi Option_Reg. Để tạo tràn timer1 0,5s bạn đưa 0x31 vào thanh ghi t1con ngay đầu Init chương trình ví dụ trong chương trình sử dụng ngắt Timer0, Dùng thạch anh trong Chip = 4Mhz. |
ví dụ trong chương trình sử dụng ngắt Timer0, Dùng thạch anh trong Chip = 4Mhz.
;--------------------------------------------------------------------- list p=pic16f627A, r=dec #include <p16f627A.inc> #include <Comm.h> __CONFIG _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT & _LVP_OFF & _MCLRE_OFF atris = 0x00 btris = 0x00 ;Files define org 0x0 ; Khi reset chip goto Init org 0x4 ; Địa chỉ ngắt Timer0 nop clrwdt ; cấm WD btfsc pir1,tmr1if call T1Int ; Có cờ tràn Timer1 bcf intcon,tmr0if ; Xóa cờ ngắt Timer0 T0End retfie ; Kết thúc chương trình ngắt Timer0 ;--------------------- T1Int bcf pir1,tmr1if movlw 0xff xorwf portb,f ; 8 Led nhấp nháy với tần số ~ 1Hz return ;--------------------- ;--------------------- Init call PortInit call TimerInit Loop goto Loop ;---------------------- ;---------------------- PortInit call rBank0 movlw 0x7 movwf cmcon ; All Pin are digital movlw 0xf movwf pcon call rBank1 movlw 0x80 movwf option_reg ;Timer0 Interrupt ~ 0.5 ms movlw atris movwf trisa movlw btris movwf trisb goto rBank0 ;------------------------ TimerInit movlw 0xa0 movwf intcon ; Ngắt Timer0 movlw 0x31 movwf t1con ; Tràn Timer1 = 0,5s return ;------------------------- ;---------------------------- rBank0 bcf status,rp0 bcf status,rp1 return ;--------------------- rBank1 bsf status,rp0 bcf status,rp1 return ;--------------------- end ;---------------------- |
ẹc
ai có mạch đèn giao thông có đếm ngược ko gởi dùm tui cái đi.Có led đếm ngược lun nghe .CẢM ƠN NHÌU NHÌU hEHHEHEHE |
Mạch đèn Giao Thông
2 Attachment(s)
Mình thấy chủ đề này không mới nhưng có nhiều bạn quan tâm, mới lục lại cái đồ án môn ngày xưa, post cho anh em đỡ phải mất thời gian mày mò, mạch này chạy ngon! Bây giờ bạn chỉ việc tập trung làm thêm phần giao tiếp máy tính cho phép thay đổi thời gian của các đèn là xong.
|
ui cảm ơn bạn nhìu nha.mà bạn ơi bạn có đoạn mã nào viết bằng hợp ngữ không đầy đủ tí không pót dùm mình đi.Mình lần đầu lam nên chưa hiểu rõ lém.Híc
|
Mình quen viết CCS C thôi, các tài liệu hướng dẫn hợp ngữ thì bạn tìm trong diễn đàn nhé, nhiều lắm!
|
Múi giờ GMT. Hiện tại là 12:21 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam