![]() |
mình muốn chạy led nhièu hiệu ứng cùng lúc làm thể nào
mình vẫn dùng con pic 16f84a ,đièu khiển portb 8 chân và porta a chân .
mình có một số thắc măc mà làm mãi không được . 1,mình muỗn ghép 2 port a và b để điều khiển chạy led theo cùng một hiệu ứng ,như vậy mình sẽ có 12 chân điều khiển . 2.mình muốn hỏi có thể đièu khiển cùng một lúc các chân với các hiệu ứng khác nhau ko ? VD: portb có 8 chan là Rb0->rb7 vậy chia đôi ra từ rb0->rb3 là 1 hiệu ứng ,và 4 chân còn lại 1 hiệu ứng khác mà lại chạy cùng lúc song song nhau ,thời gian trễ khác nhau có dc ko ? mình đang định làm một cái biển quảng cáo cafe bằng đèn led ,dung pic 16f84a 8 bit mình muốn dùng 3 chân của portb để đièu khiển chạy viền xung quanh ,các chân còn lại để đièu khiển các chữ trong bên trong bảng ,một bài toán là viền ngoài vẫn chạy bình thường và chữ bên trong vẫn nháy loạn lên cùng một thòi điểm .v.v. thanks ,rất mong dc chỉ giáo |
nội dung bạn làm đơn giản,bạn làm tới đâu rùi pót lên mọi người góp ý cho, chưa làm mà hỏi e rằng kô ai trả lời đâu...
|
Trích:
việc hiện thị nội dung các chữ thì bạn chạy bình thường, còn chương trình chạy viền thì bạn viết trong ngắt ấy,đia chỉ ngắt của 16f84 là 04h, mỗi một " nháy loạn "( từ bạn viết) thì minh goi 1 ngắt, nguyen lý của ngắt là nếu chương trình chính đang chạy nếu có một ngắt xảy ra thì nó sẽ dừng lại để thực hiện ngắt sau đó tiếp tục quay trở lại chương trình chính thực hiện tiếp |
uh ý mình là thế đó ,mình mới học ccs và pic dc 4 ngày thôi ,có nghe đến ngắt nhưng chưa hiểu lắm ,và mình nghĩ là chắc phải dùng đến ngắt .
bạn có thể chỉ cho mình thêm về ngắt ,có đọc một số tài liệu nhưng ko hiểu lắm , cú pháp của nó như thế nào ? theo như bạn nói ,một chương trình chính đang chạy có ngắt thì sẽ dừng lại để thực hiện trong ngắt ,vậy nếu chương trình chính là nháy chữ bên trong thì mỗi một "nháy" cua chương trình chính mình gọi ngắt ,chương trình chính sẽ dừng lại đê thực hiện ngắt , mình có đièu chỉnh đuọc thời gian ngắt ,.v.v. nói chung là bạn có thể cho mình những kiến thức cơ bản nhất vè ngắt .thanks đi vào cái này mới thấy có nhiều vấn đề học mãi ko hết |
Trích:
enable_interrupts(level);//cho phép ngằt kiểu level disable_interrupts(level);//cấm ngắt kiểu level ext_int_edge(edge);// chọn lấy xung cạnh thấp hay cao level bao gồm: GLOBAL : ngắt toàn cục INT_RTCC : tràn TMR0 INT_RB : có thay đổi trạng thái một trong các chân RB4 đến RB7 INT_EXT : ngắt ngoài INT_AD : chuyển đổi AD đã hoàn tất INT_TBE : bộ đệm chuyển RS232 trống INT_RDA : data nhận từ RS232 sẵn sàng INT_TIMER1 : tràn TMR1 INT_TIMER2 : tràn TMR2 INT_CCP1 : có capture hay compare trên CCP1 INT_CCP2 : có capture hay compare trên CCP2 INT_SSP : có hoạt động SPI hay I2C INT_PSP : có data vào cổng parallel slave INT_BUSCOL : xung đột bus INT_EEPROM : ghi vào eeprom hoàn tất INT_TIMER0 : tràn TMR0 INT_COMP : kiểm tra bằng nhau comparator edge bao gồm: L_TO_H : cạnh lên H_TO_L : cạnh xuống vi du ban viết cho ngằt INT_RB ( ngắt khi có thay đổi trạng thái của các chân RB4 ->RB7) #INT_RB void chayvien() {....code....ban viết để điều khiển viền theo ý bạn} trong main bạn phai viết các lệnh trên dể có thể sử dụng nó ( cho phép nó và nó xày ra khi nào :xung thap hay cao ) |
thanks mình phải ngâm kíu thêm ,"cho phép nó và nó xày ra khi nào :xung thap hay cao )" ở trong mian ,cái này chuă hiểu lắm ,để mình đọc thêm tài liệu về ngắt đã ,có gì ko hiểu sẽ hỏi bạn tiếp .cảm ơn nhièu
bạn có đoạn code nào sử dụng ngắt cho mình xem làm vi dụ với ,1 chương trình hoàn chỉnh . |
trong hàm main bạn khai báo sử dụng loại ngắt (timer, ngắt ngoài,...)(cho phép ngắt), nhưng khi nào thì xảy ra ngắt...mỗi loại ngắt có một tác động riêng khi dấu hiệu này bị tác động sẽ gây ra ngắt (ví dụ timer ngắt khi bị trào, ngắt ngoài khi thay đổi xung,...)
đoạn code đầy đủ sử dụng ngắt timer đây Code:
//******************************************************************** |
cảm ơn bạn nhiệt tình quá ,để mình thử làm xem .
|
INT_TIMER0 : tràn TMR0
INT_TIMER1 : tràn TMR1 INT_TIMER2 : tràn TMR2 ngắt timer khi bị trào là thế nào hả bác trong code bạn giải tyhichs hộ mình giá trị (count==560) là gì ,giá trị 560 mình ko hiểu |
Đơn giản ví dụ bạn đặt thời gian cho Timer là 1s thì sau đúng 1 s sẽ xảy ra ngắt.
|
Code:
#include <16F877a.h> nhưng mình thử chèn thêm một đoạn code cho cổng b sáng theo ý mình thì portc đèn chạy chậm lại .vậy là sao nhỉ , |
bạn xem kỹ chương trình, khi gán giá trị timer là số bất kỳ (tùy timer0,1,..giá trị đếm lên khác nhau) sau dòng lệnh set_timer thi timer sẽ đếm đến giá trị 8bit hay 16 bit nó trào sinh ra ngắt nhảy đến ngắt thực thi xong sẽ nhảy về chổ cũ lúc gọi ...
|
mình hiểu rồi ,thanks các bác .em hoàn thành dc cái biển quảng cáo roài hihi .
|
Múi giờ GMT. Hiện tại là 10:20 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam