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 Bài Trong Ngày Vi điều khiển

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 30-06-2007, 08:12 PM   #241
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Các bác ơi! Em gặp nhiều trường hợp vẽ orcad bị nhầm. Theo em biết thì proteus có thể mô phỏng và thiết kế mạch in nữa. Vậy tại sao không dùng Proteus? Có ai so sánh hai món này giúp em ko? Cho em hỏi thêm: Làm sao để tạo bus trong proteus. Cảm ơn các bác rất nhiều!
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Old 01-07-2007, 01:27 AM   #242
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
cái đoạn code này:
#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);
}
}

/////////////////////////////
setup_adc_ports(AN0);
//tại sao lại lại chọn chân AN0, mình có thể chọn chân khác được không.nếu chọn chân khác thì mình có phải thay thông số nào khác nữa không?
thank!
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 01-07-2007, 04:22 AM   #243
thaithienanh
Đệ tử 7 túi
 
thaithienanh's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 189
:
Send a message via Yahoo to thaithienanh
Smile

To anh giỏi @ : bạn phải nắm đuợc các tập lệnh sẵn của ccs

Như lệnh Setup_ADC_port (value) dùng để xác định chân nhận tín hiệu Analog và điện thế chuẩn sử dụng (Vref), thường thì mình hay dùng (all_analogs) tức là dùng hết các chân analog mà VDK cung cấp và điện thế chuẩn bằng VDD,
nhưng tuỳ vào nguời sử dụng muốn biến một chân Analog thành pin I/O và Vref từ một nguồn khác thì sẽ chọn value này khác đi .

Lệnh Set_ADC_channel (channel) dùng để chọn chân đọc giá trị ADC
channel là các số từ 0->n (n phụ thuộc vào từng loại vi điều khiển đuợc trang bị bao nhiêu cổng ADC) ví dụ như bạn nhìn thấy chân AN3, và bạn muốn đọc giá trị từ chân này thì bạn sẽ đánh vào là (3) rất đơn giản phải không

Ví dụ cho bạn chút nhá :
setup_adc(adc_clock_internal); // chọn xung lấy mẫu ADC = xung nội
setup_adc_ports(all_analogs); //sử dụng tất cả các chân ADC và vef=VDD
While(true){ // vòng lặp chính
while(true){
set_adc_channel(0); // chọn chân lấy mẫu là ANO
delay_ms(10); // tạo trễ để lấy mẫu ADC chuẩn xác
adc0=read_ADC(); // nạp giá trị đọc đuợc vào biến adc0
set_adc_channel(1); // chọn chân lấy mẫu là AN1
delay_ms(10);
adc1=read_ADC();
}
sau đó bạn muốn làm gì đó với các giá trị thu đuợc thì làm OK
}

To dvnccbmacbt @ : Proteus hỗ trợ luôn cho nguời dùng tiện ích là Ares (thần nam tính theo ngữ hi lạp cổ ), mình có thể dùng để vẽ mạch khá tốt, đồ hoạ khá bắt mắt (có hỗ trợ cả chức năng mô phỏng mạch 3D), giải thuật giải đẩy khi đi mạch của nó cũng khá thông minh (hơn cả Orcad tất nhiên là theo mình thui), nhưng nó có một điểm cực yếu là khi đi vào cấy hình chi tiết các thông số cho mạch in thì nó không có đủ , nên nếu là các mạch dơn giản thì Proteus là một trong những lựa chọn hàng đầu của mình, Orcad điểm mạnh là các thông số OK (quá chi tiết), trình nhiều nguời dùng nên có thể giao lưu học hỏi qua lại, phần help dễ nắm bắt..v.v... tuy nhiên điểm yếu của nó là cực kỳ dễ nhầm lẫn trong thiết kế (chỉ cần phần nguyên lý bạn không cẩn thận chồng dây hay gì đó là sinh chuyện rồi ), đồ hoạ thì xấu hoắc, thuật đi mạch thì ngốc hết biết (thường thấy mấy anh dùng toàn vẽ tay ),... Nên lựa chọn hàng đầu của mình hiện giờ là Protel hoàn hảo hết tất cả những gì mình muốn ,khuyên bạn nên dùng Protel nếu như cảm thấy mình có khả năng tự tiếp thu tốt (do tài liệu hiện rất ít và chẳng đầy đủ) và chọn Orcad khi muốn học hỏi lớp nguời đi trước ,

Còn về vẽ Bus trong Proteus thì quá đơn giản rùi bạn chọn cái tool nào có hình giống như "sợi bus" vậy là xong, sau đó nối các đường dây từ linh kiện vào dùng tiếp tool net_label đặt nhãn cho từng đường để bus còn biết đâu là các đầu dây của cùng một dây , nếu vẫn chưa hiểu rõ về bus thì bạn phải tìm về một ví dụ nào đó rồi xem tại sao lại nối như vậy

Chú ý nếu bạn vẫn chưa rõ thì hãy rê chuột lên trên các tool chờ 1 lát trình sẽ hiện lên tên của từng tool (cái này giúp ích bạn rất nhiều khi mò mẫm một phần mềm nào đấy )
__________________
_____________________________Tri nhân tri tự bất tri tâm_____________________________
_ _ _ _ _ _ _ _ Yêu mến tất cả anh em Picvietnam.com _ _ _ _ _ _ _ _
. . . . . . . . . . . . . . . . Để post đuợc một câu hỏi rõ ràng xin tham khảo link sau : . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . http://www.picvietnam.com/forum/showthread.php?t=1263. . . . . . . . . . . . . . . .
thaithienanh vẫn chưa có mặt trong diễn đàn  
Old 01-07-2007, 08:49 PM   #244
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Tui có cuốn sách này về CCS. hi vọng có thể giúp cho cho 1 số bạn :
http://d3.myfreefilehosting.com/d1/C...update%20I.pdf
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Old 01-07-2007, 08:57 PM   #245
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 thaithienanh View Post
To dvnccbmacbt @ : Proteus hỗ trợ luôn cho nguời dùng tiện ích là Ares (thần nam tính theo ngữ hi lạp cổ ), mình có thể dùng để vẽ mạch khá tốt, đồ hoạ khá bắt mắt (có hỗ trợ cả chức năng mô phỏng mạch 3D), giải thuật giải đẩy khi đi mạch của nó cũng khá thông minh (hơn cả Orcad tất nhiên là theo mình thui), nhưng nó có một điểm cực yếu là khi đi vào cấy hình chi tiết các thông số cho mạch in thì nó không có đủ , nên nếu là các mạch dơn giản thì Proteus là một trong những lựa chọn hàng đầu của mình, ...
Cho ví dụ về những thông số cho mạch in mà Proteus không có đủ?

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 09-07-2007, 08:12 PM   #246
cuopbienquin
Đệ tử 2 túi
 
cuopbienquin's Avatar
 
Tham gia ngày: Jun 2007
Bài gửi: 43
:
Chương trình ngắt đây

Các bạn coi gium` mình có sai chỗ nào không mà mình delay không được
Mình muốn khi đóng RB4 thì LED sẽ nháp nháy với delay 50ms chẳng hạn.
Phần ngắt chuyển chế độ thì mình làm được nhưng delay trong mỗi chế độ thì potay.
Code:
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=1000000)
#use fast_io(b)
#byte portb=0x06
#byte intcon=0x000B
#bit RB4=portb.4
#bit RB5=portb.5
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB

// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
   {
      //Kiem tra sw1
      {
      if(RB4==0)
         {
         
         portb=0b00000001;
         
         delay_ms(200);
         portb=0b00001111;
         delay_ms(200);
                  
         }
      }
      //Kiem tra sw2
      {
      if(RB5==0)
         {
         portb=0b00001000; 
                                    }
      }
      
   RBIF=0; //Xoa co ngat RB
   }
}
// Chuong trinh chinh
main()
{
set_tris_b(0b11110000);
portb=0b11110000;
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
while(true)
   {
   
   }
}
File Kèm Theo
File Type: rar ngat.rar (13.9 KB, 213 lần tải)
cuopbienquin vẫn chưa có mặt trong diễn đàn  
Old 09-07-2007, 08:53 PM   #247
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 cuopbienquin View Post
Các bạn coi gium` mình có sai chỗ nào không mà mình delay không được
Mình muốn khi đóng RB4 thì LED sẽ nháp nháy với delay 50ms chẳng hạn.
Phần ngắt chuyển chế độ thì mình làm được nhưng delay trong mỗi chế độ thì potay.
Code:
#include <16F877A.h>
...
}
Code:
#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 RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB

// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
   {
      //Kiem tra sw1
      {
      if(RB4==0)
         {
         
         portb=0b00000001;
         
         delay_ms(50);
         portb=0b00001111;
         delay_ms(50);
                  
         }
      }
      //Kiem tra sw2
      {
      if(RB5==0)
         {
         portb=0b00001000; 
                                    }
      }
      
   RBIF=0; //Xoa co ngat RB
   }
}
// Chuong trinh chinh
main()
{
set_tris_b(0b11110000);
portb=0b11110000;
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
while(true)
   {
   }
}
Đã sửa lại cho phù hợp file mô phỏng của bạn. Với code trên, kết thúc ngắt tất nhiên ko còn delay nữa. 50ms hơi ít, tăng lên 1000ms, thấy kết quả.
nhh vẫn chưa có mặt trong diễn đàn  
Old 09-07-2007, 10:55 PM   #248
cuopbienquin
Đệ tử 2 túi
 
cuopbienquin's Avatar
 
Tham gia ngày: Jun 2007
Bài gửi: 43
:
Mình đã sữa lại thành 1000ms và đã chạy mô phỏng được,có điều khi chuyển chế độ (nhấn button tới 2 lần và mối làn nhấn phải giữ một thời gian) thì mới chuyển được .
Mình muốn nhấn button (1 lần) thì chế đọ 1 chạy,nhấn button 2 thi chế độ 2 chạy,vạy thôi.Mình hi vọng các bạn có thể sửa giùm mình thêm đoạn code đó nha.
#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 RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB

// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
{
//Kiem tra sw1
{
if(RB4==0)
while(RB5==1)
{

portb=0b00000001;
delay_ms(1000);
portb=0b00001111;
delay_ms(1000);

}
}
//Kiem tra sw2
{
if(RB5==0)
while(RB4==1)
{
portb=0b00001000;

delay_ms(1000);
portb=0b00001111;
delay_ms(1000);
}
}

RBIF=0; //Xoa co ngat RB
}
}
// Chuong trinh chinh
main()
{
set_tris_b(0b11110000);
portb=0b11110000;
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
while(true)
{
}
}
cuopbienquin vẫn chưa có mặt trong diễn đàn  
Old 11-07-2007, 09:47 AM   #249
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
BẠN SỪA LẠI #fuses NOWDT,PUT,XT,NOPROTECT THÀNH
#fuses NOWDT,PUT,HS,NOPROTECT LÀ CHƯƠNG TRÌNH ỔN RỒI
__________________
Cổng trường Đại học cao vời vợi
Đồng ruộng mênh mong đón em về!
tranvanthuong vẫn chưa có mặt trong diễn đàn  
Old 11-07-2007, 09:50 AM   #250
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
Lúc Bạn Viết Chương Trình Ngắt Thì Trong Chương Trình Này Phải Cấm Ngắt Toàn Cục Xử Lí Xong Mới Cho Phép Ngắt Lại
Vài điều Trao đổi Cùng Bạn!
__________________
Cổng trường Đại học cao vời vợi
Đồng ruộng mênh mong đón em về!
tranvanthuong vẫn chưa có mặt trong diễn đàn  
Old 11-07-2007, 02:34 PM   #251
cuopbienquin
Đệ tử 2 túi
 
cuopbienquin's Avatar
 
Tham gia ngày: Jun 2007
Bài gửi: 43
:
thx bạn nhiều.Mình chạy được rồi,ah,mà bạn giải thích mình thay "Xt" trong dòng đó bằng "HS" la sao hả bạn.
cuopbienquin vẫn chưa có mặt trong diễn đàn  
Old 12-07-2007, 09:52 AM   #252
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
bài này:
Code:
/*-----------------------------------------------------------------------------
* Author     : nhh
* Date       : 05/04/06
* Hardware   : PIC16F877A
* Compiler     : CCS C 3.249
* Description   : Hien thi LCD
*=============================================================================*/
#include <16F877A.h>
//#include <DEFS_16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#define RS  RD0
#define RW  RD1
#define E   RD2
#define LCD PORTB

/*Ham yeu cau goi lenh dieu khien LCD*/
void comnwrt(void)
{
 RS = 0;
 RW = 0;
 E  = 1;
 E  = 0;
 delay_ms(1);
}
/*Ham yeu cau goi du lieu hien thi len LCD*/
void datawrt(void)
{
 RS = 1;
 RW = 0;
 E  = 1;
 E  = 0;
 delay_ms(1);
}
/*Ham main*/
void main(void)
{
 set_tris_B(0);
 set_tris_D(0);
 delay_ms(100);   //   Tao tre 100ms cho LCD khoi dong

 LCD = 0x38;      //   Hai hang, ma tran dot 5*7, 8 bit interface
 comnwrt();
 LCD = 0x0C;      //   Bat hien thi, tat con tro
 comnwrt();

 LCD = 0x85;      //   Vi tri hang 1,cot 6
 comnwrt();

 LCD = 'B';       //   Xuat dong chu "BE YEU" ra LCD
 datawrt();
 LCD = 'E';
 datawrt();
 LCD = ' ';
 datawrt();
 LCD = 'Y';
 datawrt();
 LCD = 'E';
 datawrt();
 LCD = 'U';
 datawrt();
 LCD = '!';
 datawrt();
}
bài này không bít gọi file DEFS_16F877A.h ra như thế nào nhỉ?
mong mọi người chỉ dùm.thank!

thay đổi nội dung bởi: namqn, 12-07-2007 lúc 06:54 PM. Lý do: thêm tag định dạng code
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 12-07-2007, 06:56 PM   #253
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 cuopbienquin View Post
thx bạn nhiều. Mình chạy được rồi,ah,mà bạn giải thích mình thay "Xt" trong dòng đó bằng "HS" la sao hả bạn.
XT là đặt bộ dao động ở chế độ dùng với thạch anh tần số thấp (4 MHz trở lại), HS là đặt bộ dao động ở chế độ dùng với thạch anh tần số cao hơn (4 MHz đến maximum của chip).

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 12-07-2007, 07:30 PM   #254
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
mọi ngừoi ơi! xem hộ mã này với
không bít có sai gì ko ,nó không báo lỗi nhưng nó không hiển thị chữ

Code:
#include "16F877A.h"
#include "C:\Documents and Settings\Administrator\Desktop\DEFS_16F877A\DEFS_16F877a.h"
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 4M)
#define RS RD0
#define RW RD1
#define E  RD2
#define LCD portB

//tao ham goi lenh dieu khien
void comnwrite(){
                    RS = 0; //chon thanh ghi lenh  
                    RW = 0; //chon che do ghi
                    E = 1; //tao suon xung
                    E = 0;
                    delay_ms(1); //tao do tre cho LCD
                           }
// tao ham ghi du lieu
void datawrite(){
                   RS = 1;
                   RW = 0;
                   E = 1;
                   E = 0;
                   delay_ms(1);
                           }
//ham chinh
void main(){
             set_tris_b(0);
             set_tris_d(0);
             delay_ms(100); //tao tre cho lcd khoi dong
             
             LCD = 0x38; //tao ma tran 5x7
             comnwrite();
             LCD = 0x0C ; //bat hien thi,tat con tro
             comnwrite();
             LCD = 0x80; //dau dong thu nhat
             comnwrite();
             
             //xuat chu ANH_GIOI
             LCD = 'A';
             datawrite();
             LCD = 'N';
             datawrite();
             LCD = 'H';
             datawrite();
             LCD = '_';
             datawrite();
             LCD = 'G';
             datawrite();
             LCD = 'I';
             datawrite();
             LCD = 'O';
             datawrite();
             LCD = 'I';
             datawrite();
                     }
thank!

namqn: bạn xem lại tôi sửa như thế nào để hiển thị code, sau đó bạn làm như vậy khi post code. Tôi không thể sửa cho mọi post có code được.

thay đổi nội dung bởi: namqn, 12-07-2007 lúc 10:09 PM.
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 12-07-2007, 08:43 PM   #255
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
kiểm tra lại hóa ra chẳng có lỗi gì cả.
anh_gioi vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá


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à 05:39 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