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 28-06-2007, 01:54 PM   #226
HL2
Nhập môn đệ tử
 
Tham gia ngày: Jun 2007
Bài gửi: 6
:
Tuyệt vời, cảm ơn các bác nhiều lắm. Cảm ơn bác nhh đã khởi xướng ra chuyên mục này để anh em có cơ hội trao đổi kinh nghiệm, học hỏi.
HL2 vẫn chưa có mặt trong diễn đàn  
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  
Old 28-06-2007, 09:16 PM   #228
NBC
Nhập môn đệ tử
 
NBC's Avatar
 
Tham gia ngày: Mar 2006
Bài gửi: 3
:
Ghi và đọc bộ nhớ ngoài

Đây là đoạn chương trình có chức năng đọc giá trị ADC, sau đó ghi vào RAM ngoài, rồi đọc từ RAM ngoài để xử lí.
Có một vấn đề là khi tôi xóa dòng
output_high( PIN_D7 );
ở cuối hàm if thì các hàm này không thực thi được. Bác nào biết xin chỉ giúp tại sao.
File Kèm Theo
File Type: rar GhiDocRamNgoai.rar (17.2 KB, 287 lần tải)
NBC vẫn chưa có mặt trong diễn đàn  
Old 28-06-2007, 10:16 PM   #229
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi nhh View Post
Mạch quét 16 phím, hiện kết quả lên led 7 đoạn.
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)
#use fast_io(c)
#byte portb = 0x06
#byte portc = 0x07
#bit RB0 = 0x06.0
#bit RB1 = 0x06.1
#bit RB2 = 0x06.2
#bit RB3 = 0x06.3
#bit RB4 = 0x06.4
#bit RB5 = 0x06.5
#bit RB6 = 0x06.6
#bit RB7 = 0x06.7
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
int a;
const unsigned char dig[]={0b00111111,0b00000110, 0b01011011,0b01001111,\
0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111,0b01110111,\
0b01111100,0b00111001,0b01011110,0b11111001,0b11110001};
                  // ma hoa digital duoi dang mang
// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
   {
         {
         if(RB4&&RB0)
         a=dig[0];
         }
         {
         if(RB4&&RB1)
         a=dig[4];
         }
         {
         if(RB4&&RB2)
         a=dig[8];
         }
         {
         if(RB4&&RB3)
         a=dig[12];
         }
//.......
         {
         if(RB5&&RB0)
         a=dig[1];
         }
         {
         if(RB5&&RB1)
         a=dig[5];
         }
         {
         if(RB5&&RB2)
         a=dig[9];
         }
         {
         if(RB5&&RB3)
         a=dig[13];
         }
//........
          {
         if(RB6&&RB0)
         a=dig[2];
         }
         {
         if(RB6&&RB1)
         a=dig[6];
         }
         {
         if(RB6&&RB2)
         a=dig[10];
         }
         {
         if(RB6&&RB3)
         a=dig[14];
         }
//........
          {
         if(RB7&&RB0)
         a=dig[3];
         }
         {
         if(RB7&&RB1)
         a=dig[7];
         }
         {
         if(RB7&&RB2)
         a=dig[11];
         }
         {
         if(RB7&&RB3)
         a=dig[15];
         }
   RBIF=0; //Xoa co ngat RB
   }
}
// Chuong trinh chinh
main()
{
set_tris_b(0b11110000);
set_tris_c(0);
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
portb=0;
portc=0;
while(true)
   {
   portb=1;
   portb=2;
   portb=4;
   portb=8;
   portc=a;
   }
}
portb=1;
portb=2;
portb=4;
portb=8;
portc=a;
lệnh gán này không biết có ý nghĩa gì nhỉ?
thank!
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 28-06-2007, 11:53 PM   #230
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
mình đánh lại chương trình trên ,CCS thông báo không có lỗi gì nhưng khi mô phỏng không chạy được.
mong mọi người tìm ra chỗ sai hộ mình!
thank!

Code:
#include "C:\Documents and Settings\Administrator\Desktop\thu\giai ma ban phim\giai ma ban phim.h"

#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
//giai ma ban phim
#use fast_io(b)
#use fast_io(c)
#byte portb = 0x06
#byte portc = 0x07
#byte intcon = 0x000B
#bit RB0 = portB.0
#bit RB1 = portB.1
#bit RB2 = portB.2
#bit RB3 = portB.3
#bit RB4 = portB.4
#bit RB5 = portB.5
#bit RB6 = portB.6
#bit RB7 = portB.7
#bit RBIF = intcon.0 //dinh nghia ham ngat cong RB
#bit RBIE = intcon.3 //dinh nghia bit ngat RB
int a;
const unsigned char digital[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f\
                                 0x77,0x7c,0x39,0x5e,0x79,0x71};
      
//tao ham ngat
#int_ext
void ngat_RB(){
                     IF((RBIF)&&(RBIE)){
                                            if(RB4&&RB0)
                                            { a = digital[0];}
                                             
                                             if(RB5&&RB0)  
                                             {a = digital[1];}
                                             
                                            if(RB6&&RB0) 
                                            { a = digital[2];}
                                             
                                             if(RB7&&RB0) 
                                             {a = digital[3];}
                                             ////
                                             if(RB4&&RB1)
                                             { a = digital[4];} 
                                              
                                             if(RB5&&RB1)  
                                             {a = digital[5];}
                                             
                                             if(RB6&&RB1)  
                                             {a = digital[6];}
                                             
                                             if(RB7&&RB1) 
                                             {a = digital[7];}
                                             ////
                                             if(RB4&&RB2)
                                             {a = digital[8];} 
                                             
                                             if(RB5&&RB2)  
                                             {a = digital[9];}
                                             
                                             if(RB6&&RB2) 
                                             {a = digital[10];}
                                             
                                             if(RB7&&RB2) 
                                             {a = digital[11];}
                                             RBIF =0; //xoa co ngat                                          
} 
}
                                                                       
                     
                     
   //tao ham chinh
   void main(){
                    set_tris_b(0xf0);
                    set_tris_c(0x00);
                    portb = 0;
                    portc = 0;
                    enable_interrupts(int_ext); //ngat toan bo
                    ext_int_edge(H_to_L);
                    enable_interrupts(global);
                    while(true){
                              portb = 1;
                              portb = 2;
                              portb = 4;
                              portb = 8;
                              portc = a;
                    }
                        }

thay đổi nội dung bởi: falleaf, 29-06-2007 lúc 03:20 PM.
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 29-06-2007, 03:46 AM   #231
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
portb=1;
portb=2;
portb=4;
portb=8;
portc=a;
lệnh gán này không biết có ý nghĩa gì nhỉ?
thank!
Lần lượt cấp điện cho từng cột bàn phím, nếu có cột nào có phím nhấn thì nó sẽ tạo ngắt. Quét xong các cột bàn phím thì xuất giá trị của a ra LED 7 đoạn 1 lần, sau đó tiếp tục vòng lặp (cấp điện từng cột bàn phím, rồi xuất ra LED).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 29-06-2007, 11:55 AM   #232
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
Trích:
Nguyên văn bởi anh_gioi View Post
mình đánh lại chương trình trên ,CCS thông báo không có lỗi gì nhưng khi mô phỏng không chạy được.
mong mọi người tìm ra chỗ sai hộ mình!
thank!

#include "C:\Documents and Settings\Administrator\Desktop\thu\giai ma ban phim\giai ma ban phim.h"

#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
...
Ở đây có cả giải thuật và code, đã test trên mạch thật. Bạn tham khảo thêm:
http://www.picvietnam.com/forum/showthread.php?t=839
nhh vẫn chưa có mặt trong diễn đàn  
Old 29-06-2007, 12:43 PM   #233
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
cam on anh rất nhiều !
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 29-06-2007, 01:49 PM   #234
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi namqn View Post
Lần lượt cấp điện cho từng cột bàn phím, nếu có cột nào có phím nhấn thì nó sẽ tạo ngắt. Quét xong các cột bàn phím thì xuất giá trị của a ra LED 7 đoạn 1 lần, sau đó tiếp tục vòng lặp (cấp điện từng cột bàn phím, rồi xuất ra LED).

Thân,
anh có thể nói rõ hơn được không a? số: 1,2,4,6,8 nó mặc định cho cổng đấy a?
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 30-06-2007, 01:44 AM   #235
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
dịch

tui dốt tiếng anh quá, mọi người có thể dịch những từ dưới ra tiếng việt được ko? thanhk!
#FUSES NOWDT
#FUSES XT
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES BROWNOUT
#FUSES LVP
#FUSES NOCPD
#FUSES NOWRT
#FUSES NODEBUG
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 30-06-2007, 02:01 AM   #236
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
anh có thể nói rõ hơn được không a? số: 1,2,4,6,8 nó mặc định cho cổng đấy a?
- Xuất 1 ra PORTA thì chỉ có bit 0 (tức là chân RA0) ở mức 1, các bit (chân) khác là 0.
- Xuất 2 ra PORTA thì chỉ có bit 1 (tức là chân RA1) ở mức 1, các bit (chân) khác là 0.
- Xuất 4 ra PORTA thì chỉ có bit 2 (tức là chân RA2) ở mức 1, các bit (chân) khác là 0.
- Xuất 8 ra PORTA thì chỉ có bit 3 (tức là chân RA3) ở mức 1, các bit (chân) khác là 0.

Bạn nhìn vào sơ đồ mạch của nhh sẽ thấy các chân RA0 .. RA3 nối với các cột của bàn phím.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 30-06-2007, 02:13 AM   #237
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
cám ơn anh lần nữa nha
anh có thể dịch cho em masy nghĩa của từ trên kia được ko ạ.
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 30-06-2007, 02:14 AM   #238
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
tui dốt tiếng anh quá, mọi người có thể dịch những từ dưới ra tiếng việt được ko? thanhk!
#FUSES NOWDT
#FUSES XT
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES BROWNOUT
#FUSES LVP
#FUSES NOCPD
#FUSES NOWRT
#FUSES NODEBUG
Đây là những tên viết tắt đã được định nghĩa sẵn bởi trình biên dịch (thường thông qua tập tin include .h). Tôi không dịch (vì những từ đó là viết tắt) mà sẽ giải thích:

NOWDT - Không dùng watchdog timer (cái này không nên dịch ra)
XT - Dùng mức XT (mức công suất trung bình) cho bộ dao động với thạch anh ngoài
NOPUT - Không dùng power up timer (làm trễ khi bật nguồn)
NOPROTECT - Không bảo vệ code (không cấm đọc nội dung flash)
BROWNOUT - Dùng chức năng bảo vệ chống thấp áp
LVP - Cho phép chế độ nạp chương trình ở điện áp thấp
NOCPD - Không bảo vệ EEPROM dữ liệu (không cấm đọc nội dung EEPROM)
NOWRT - Không cấm ghi vào flash
NODEBUG - Không dành riêng các chân RB6 và RB7 cho debug

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 30-06-2007, 11:50 AM   #239
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Cool Hỏi về ADC!

Đây là chưong trinh :
Code:
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8
#use delay(clock=10000000)
#use fast_io(b)
int8 adc;
main()
{set_tris_b(0);
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(10);
while(true)
{
adc=read_adc();
output_B(adc);
}
}
Còn đây là mạch :


sau khi chạy thì tất cả các led đều sáng.Em không hiểu tại sao. Do sai ở mạch hay do chương trình.


Có bác nào giúp em với
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Old 30-06-2007, 05:04 PM   #240
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

Giữa biến trở và tụ C5 của bạn cần kéo xuống đất, nếu ko ngõ ra biến trở luôn ở mức cao 5V nên portB của bạn 8 đèn luôn sáng.

Thành thật cáo lỗi vì nhầm lẫn ngớ ngẩn này!
nhh 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 về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
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à 03:23 AM.


Đượ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