PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 05-04-2006, 11:08 AM   #1
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Ngắt ngoài trên RB4-RB7

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);  
   }
}
Không như trong MPLAB, đã định nghĩa sẵng các thanh ghi và bit tương ứng, còn CCS C chỉ định nghĩa chân PIC, những thanh ghi, những bit mà CCS C cho là cần thiết, ta xem trong file PIC16F887A.h, thanh ghi, bit nào chưa định nghĩa mà muốn sử dụng thì phải định nghĩa nó.
Ta có thể viết riêng 1 file.h loại này sao cho mình dễ nhớ nhất, đến khi muốn sử dụng chỉ cần khai báo #include<file.h> vào là xài thôi!

File Kèm Theo
File Type: rar thaydoitocdochopleddungngatngoai.rar (14.0 KB, 1761 lần tải)

thay đổi nội dung bởi: nhh, 09-07-2007 lúc 09:02 PM. Lý do: Attach file
nhh vẫn chưa có mặt trong diễn đàn  
Old 04-12-2006, 11:20 AM   #2
alamanda
Đệ tử 1 túi
 
alamanda's Avatar
 
Tham gia ngày: Nov 2005
Bài gửi: 19
:
Question

[QUOTE=nhh;2261]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
//************************************************** ***************************
Bác nhh ơi,tui đang đang dùng CCS C version 4.013 ( tui mới học PIC gần đây). Khi tui copy file của bác về chạy thử thì nó báo lỗi. Ở khai báo #byte portb=0x06, nó báo lỗi là Expecting an identifier và Expecting a declaration. Còn ở lệnh: portb=led;thì nó báo lỗi Expecting LVALUE such as a variable name or *expression. Cụ thể là bài của bác tui dịch ra là 8 lỗi. Tui pó tay .Rất mong sự chỉ giáo của bác,và các bậc tiền bối.
alamanda vẫn chưa có mặt trong diễn đàn  
Old 28-06-2007, 07:58 PM   #3
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  
Ðề tài đã khoá

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 30 25-07-2026 03:13 AM
TUT về USART trong PIC16F877A mafd_47a MPASM 19 23-07-2026 08:09 AM
Lập nhóm PIC16F877A nhh Cơ bản về vi điều khiển và PIC 285 08-03-2017 11:08 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
Pic16f877a TỪ DỄ TỚi KhÓ ntc Cơ bản về vi điều khiển và PIC 373 23-05-2009 10:24 PM


Múi giờ GMT. Hiện tại là 12:44 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam