Ðề tài: CCS C for PIC16F877A
View Single Post
Old 28-06-2007, 07:58 PM   #227
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
thay dổi tốc độ LED ngoài

Trích:
Nguyên văn bởi nhh View Post
Còn đây là ứng dụng ngắt ngoài trên RB4 đến RB7 để thay đổi kiểu cũng như tốc độ chớp nháy mấy con led chỉ để....ngắm cho vui mắt !

Ấn sw1, led1 nhấp nháy với delay 250ms
Ấn sw2, led1,2 nhấp nháy với delay 200ms
Ấn sw3, led1,2,3 nhấp nháy với delay 150ms
Ấn sw4, led1,2,3,4 nhấp nháy với delay 100ms
[code]//************************************************** ***************************
// Author : nhh
// Date : 03/04/06
// Hardware: PIC16F877A
//************************************************** ***************************
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x06
#byte intcon=0x000B
#bit RB4=portb.4
#bit RB5=portb.5
#bit RB6=portb.6
#bit RB7=portb.7
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
int led=0,speed;
// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
{
//Kiem tra sw1
{
if(RB4==0)
{
led=0b00000001; //led1 sang
speed=250;
}
}
//Kiem tra sw2
{
if(RB5==0)
{
led=0b00000011; //led1,2 sang
speed=200;
}
}
//Kiem tra sw3
{
if(RB6==0)
{
led=0b00000111; //led1,2,3 sang
speed=150;
}
}
//Kiem tra sw4
{
if(RB7==0)
{
led=0b00001111; //led1,2,3,4 sang
speed=100;
}
}
RBIF=0; //Xoa co ngat RB
}
}
// Chuong trinh chinh
main()
{
set_tris_b(0b11110000);
portb=0b00001111;
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
while(true)
{
portb=led;
delay_ms(speed);
portb=0;
delay_ms(speed);
}
}

các bác ơi kiểm tra hộ em nhé.
em viết lại bài này ,thông báo không có lỗi gì,nhưng khi mô phỏng proteus thì không nhấp nháy dc.các bác kiểm tra hộ em phát


//thay doi toc do nhap nhay LED theo cac bit vao RB4-RB7
//RB0-RB3 bit ra

//khai bao cong vao ra
#use fast_io(b)
#byte portb = 0x06
#byte intcon = 0x000B
#bit RB4 = portB.4
#bit RB5 = portB.5
#bit RB6 = portB.6
#bit RB7 = portB.7
#bit RBIF = intcon.0 //dinh nghia ham ngat RB
#bit RBIE = intcon.3 //dinh nghia bit ngat RB
int LED = 0,speed;

//tao ham ngat
#int_ext
void ngat_RB(){
IF((RBIE)&&(RBIF)){
if(RB4==0){
LED = 0x01;//den 1 sang
speed = 500;
}
if(RB5==0){
LED = 0x03;//den 1 va 2 sang
speed = 300;
}
if(RB6==0){
LED = 0x07;//den 1 2 3 sang
speed = 200;
}
if(RB7 ==0){
LED = 0x0f;
speed = 50;
}
RBIF = 0;
}
}

//ham chinh

void main(){

set_tris_b(0b11110000); //dinh nghia cong vao ra
portb = 0x00; //bit cao thap
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
enable_interrupts(global);
while(true){
portB = LED;
delay_ms(speed);
portB = 0;
delay_ms(speed);
}
}
anh_gioi vẫn chưa có mặt trong diễn đàn