Tôi đã viết các bài viết ở Điện tử Việt Nam tại luồng này:
http://dientuvietnam.net/forums/show...4688#post14688
Ngôn ngữ là: HTPIC
Có lẽ bài toán nháy led là bài toán đơn giản và tạo hứng thú cho các bạn học vi điều khiển. Tôi xin mạn phép up chương trình nháy led đơn giản và xin các bạn cho ý kiến là liệu có thể tối ưu chương trình này đến mức nào nữa?
Miêu tả phần cứng: nối các chân của PORTD với các 8led. Các chân còn lại của led nối với một con trở hạn dòng 330Ohm, sau đó nối với GND.
Đây là sơ đồ nguyên lý:
Hình 1: Nháy 8led rất đẹp .
Phần mềm: dùng HTPIC.
Hiện tuợng: các bạn chạy thử xem thế nào
Giải pháp: có 2 giải pháp là dùng ngắt hoặc dùng delay.
Chương trình đầu là dùng delay:
Sau đây là chương trình:
Code:
#include<pic.h>
__CONFIG(HS & PWRTEN & BOREN & LVPDIS & WDTDIS );
//================================================================
//== ham Delay doi so la so miligiay can gay tre
void delayMS(unsigned int time){
while(time--){
TMR0 = 6;
T0IF = 0; // xoa co ngat
while(!T0IF);
};
}
// == Ham khoi tao cho chip PIC16F877A
void init(void){
// Khoi tao I/O cho cac port
ADCON1 = 0x07; // PortA dung la I/O Port
TRISA = 0xFF; // Port A as input
TRISB = 0xFF;
TRISC = 0xFF;
TRISD = 0x00;// PortD as output
// Khoi tao cho cac thanh ghi
OPTION = 0x00; // dung prescaler cho timer0 voi ti le la 1:2
}
// Chuong trinh chinh
void main(void){
unsigned char i;
init();
while(1){
for(i = 0;i<8;i++){
PORTD = (1<<i) + (1<<(7-i));
delayMS(5000);
};
};
}
Câu lênh PORTD = (1<<i) + (1<<(7-i)); là dùng toán tử dịch bít.
File gửi kèm có 2 file: PJ1.c và PJ2.c . PJ1.C là chương trình dùng delay, PJ2 là dùng ngắt.
Xin mọi người cho ý kiến.