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 03-05-2007, 02:47 PM   #181
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
[QUOTE=nhh;8442]- #use fast_io(b): dùng cái này thì trình dịch chỉ set chân i/o với 1 lệnh duy nhất, nhớ là trong hàm main() phải dùng lệnh set_trix_x(); thì mới được.

- #byte portb=0x06: địa chỉ portb

-tấc cả nhửng cái này đã được định nghĩa rất kĩ và dể hiểu bạn tìm các bài của anh linhnc308, tìm bài nói về file _def_877a.h ấy.
chúc may mắn!!!
tranvanthuong vẫn chưa có mặt trong diễn đàn  
Old 05-05-2007, 11:56 PM   #182
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
- #use fast_io(b): dùng cái này thì trình dịch chỉ set chân i/o với 1 lệnh duy nhất, nhớ là trong hàm main() phải dùng lệnh set_trix_x(); thì mới được.

- #byte portb=0x06: địa chỉ portb

- #int_ext: chỉ thị hàm ngắt ngoài trên chân RB0

- enable_interrupts(global);: cho phép ngắt toàn cục

- enable_interrupts(int_ext);: cho phép ngắt ngoài trên chân RB0

- ext_int_edge(H_to_L);: kiểu ngắt cạnh xung cao xuống thấp

Bạn cố gắng tìm hiểu trong help của trình biên dịch, có cả đó. Đừng hỏi những câu dạng như thế này vì sẽ không ai trả lời cho bạn đâu.

vâng! em cám ơn anh.em cũng chưa kịp đọc help nên mới như vậy.
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 06-05-2007, 03:38 PM   #183
Jackie85
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 5
:
Mọi người cho em hỏi chút ạ,

Em đang viết ct hiện số cho led 7 thanh như mạch dưới dùng polling nhưng ko sao chạy được T_T. Nhất là ko chọn được 2 chân Anode chung, lúc nào cũng hiện cả 2 led cùng lúc.

Đoạn code của em như sau:

Code:
int chuso[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
int i, j;

void main()
{
   while(1){
      output_b(0x00);         //tat cac led
      output_e(0xFF);
      i = 0;
      //output_e(0x00);
      while(i<3){
         output_e(i);
         for(j = 0; j<=9; j++){
            output_b(~chuso[j]);
            delay_ms(10);
         }
         //delay_ms(30);
         i++;
      }
   }
}
Mong các bác giúp em với ạ O:-)
Hình Kèm Theo
File Type: jpg Led_7Segs.jpg (111.9 KB, 77 lần tải)
Jackie85 vẫn chưa có mặt trong diễn đàn  
Old 06-05-2007, 09:27 PM   #184
huybo02
Đệ tử 4 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 61
:
Trích:
Nguyên văn bởi Jackie85 View Post
Mọi người cho em hỏi chút ạ,

Em đang viết ct hiện số cho led 7 thanh như mạch dưới dùng polling nhưng ko sao chạy được T_T. Nhất là ko chọn được 2 chân Anode chung, lúc nào cũng hiện cả 2 led cùng lúc.

Mong các bác giúp em với ạ O:-)
Hình như bạn mắc mạch trans bị sai nên lúc nào chân anod của LED 7 đoạn luôn được đặt lên mức 1 làm cả 2 LED luôn sáng. Bạn mắc lại mạch trans đi. Dùng 2 NPN mắc C lên 5V qua 1 điện trở, E xuống 0 còn B thì nối giống bạn. 2 chân Anod nối với 2 E của 2 trans
Còn code khi tăng thời gian delay lên 1000 thì thấy rõ nhưng không hiểu bạn định làm gì.
Sao ko post được file đính kèm . Nhấn vào tải file từ máy rồi mà nó ko hiện ra

thay đổi nội dung bởi: huybo02, 06-05-2007 lúc 09:32 PM.
huybo02 vẫn chưa có mặt trong diễn đàn  
Old 07-05-2007, 08:57 AM   #185
Jackie85
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 5
:
Trích:
Nguyên văn bởi huybo02 View Post
Hình như bạn mắc mạch trans bị sai nên lúc nào chân anod của LED 7 đoạn luôn được đặt lên mức 1 làm cả 2 LED luôn sáng. Bạn mắc lại mạch trans đi. Dùng 2 NPN mắc C lên 5V qua 1 điện trở, E xuống 0 còn B thì nối giống bạn. 2 chân Anod nối với 2 E của 2 trans
Đúng đấy bạn ạ, đã thay thành npn và chạy được.

Dù sao cũng cám ơn bạn nhé.
Jackie85 vẫn chưa có mặt trong diễn đàn  
Old 07-05-2007, 04:19 PM   #186
meishun
Đệ tử 6 túi
 
meishun's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 135
:
Mình viết chương trình đọc giá trị trả về từ bộ ADC của PIC, sau đó xử lý dữ liệu để xuất ra LED 7 đoạn. Khi chạy thử thì thấy hiển thị sai, hiển thị lung tung. Kiểm tra lại phần cứng và phần mềm thấy OK. Cho chạy Deburg thì phát hiện CCS thực hiện phép chia sai (kết quả luôn bằng 0 bất chấp kiểu của biến).Bó tay!
Có ai biết lí do xin chỉ giúp mình với.
Cảm ơn!
meishun vẫn chưa có mặt trong diễn đàn  
Old 07-05-2007, 05:12 PM   #187
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
Anh nào có phần mền viết font 32 x 16 cho em xin với em chân thành cám on
tranvanthuong vẫn chưa có mặt trong diễn đàn  
Old 09-05-2007, 11:36 AM   #188
conanhung
Nhập môn đệ tử
 
Tham gia ngày: Apr 2006
Bài gửi: 4
:
Code:
#include<16F876A.h>
#fuses NOLVP, NOWDT,PUT,HS,NOPROTECT
#use delay(clock=12000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#byte porta=0x5
#byte portb=0x6
#byte portc=0x7
#bit RB0=portb.0
#bit G1 = porta.0
#bit G2 = porta.1
#bit G3 = porta.2
#bit G4 = porta.3
#bit G5 = porta.4
#bit G6 = porta.5
#bit G7 = portc.0
#bit G8 = portc.1
#bit G9 = portc.2
#bit G10 = portc.3
#bit G11 = portc.4
#bit G12 = portc.5
#bit G13 = portc.6
#bit G14 = portc.7
#bit G15 = portb.1
#bit G16 = portb.2
#bit G17 = portb.3
#bit G18 = portb.4
#bit G19 = portb.5
#bit G20 = portb.6
#bit led = portb.7
main()
{
setup_adc( ADC_OFF );
set_tris_a(0);
set_tris_b(0b00000001);
set_tris_c(0);
while(true)
	{
G1=1;
G2=1;
G3=1;
G4=1;
G5=1;
G6=1;
G7=1;
G8=1;
G9=1;
G10=1;
G11=1;
G12=1;
G13=1;
G14=1;
G15=1;
G16=1;
G17=1;
G18=1;
G19=1;
G20=1;
	}
}
Mạch em mắc 20 đèn led vào 3 port thông qua 20 điện trở R=4k7 xuống GND, khi nạp cho PIC6F876A thì 19 đèn đều sáng, chỉ có đèn G5, tức là ở port RA4, mặc dù port này em đã kéo lên Vdd qua điện trở 4k7 rồi, mà đèn led nối ở RA4 vẫn ko sáng.

Ah, em đã thử thêm dòng lệnh

Code:
ADCON1 = 0x06;
vào hàm main() nhưng chương trình CSS C lại báo lỗi ADCON1 chưa khai báo và không dịch được.

Cho em hỏi chương trình em viết có thiếu gì không? và thiếu thì thêm như thế nào? Em xin cám ơn.

thay đổi nội dung bởi: conanhung, 09-05-2007 lúc 11:41 AM. Lý do: thêm
conanhung vẫn chưa có mặt trong diễn đàn  
Old 09-05-2007, 04:29 PM   #189
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
Trích:
Nguyên văn bởi conanhung View Post
Code:
#include<16F876A.h>
#fuses NOLVP, NOWDT,PUT,HS,NOPROTECT
#use delay(clock=12000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#byte porta=0x5
#byte portb=0x6
#byte portc=0x7
#bit RB0=portb.0
#bit G1 = porta.0
#bit G2 = porta.1
#bit G3 = porta.2
#bit G4 = porta.3
#bit G5 = porta.4
#bit G6 = porta.5
#bit G7 = portc.0
#bit G8 = portc.1
#bit G9 = portc.2
#bit G10 = portc.3
#bit G11 = portc.4
#bit G12 = portc.5
#bit G13 = portc.6
#bit G14 = portc.7
#bit G15 = portb.1
#bit G16 = portb.2
#bit G17 = portb.3
#bit G18 = portb.4
#bit G19 = portb.5
#bit G20 = portb.6
#bit led = portb.7
main()
{
setup_adc( ADC_OFF );
set_tris_a(0);
set_tris_b(0b00000001);
set_tris_c(0);
while(true)
	{
G1=1;
G2=1;
G3=1;
G4=1;
G5=1;
G6=1;
G7=1;
G8=1;
G9=1;
G10=1;
G11=1;
G12=1;
G13=1;
G14=1;
G15=1;
G16=1;
G17=1;
G18=1;
G19=1;
G20=1;
	}
}
Mạch em mắc 20 đèn led vào 3 port thông qua 20 điện trở R=4k7 xuống GND, khi nạp cho PIC6F876A thì 19 đèn đều sáng, chỉ có đèn G5, tức là ở port RA4, mặc dù port này em đã kéo lên Vdd qua điện trở 4k7 rồi, mà đèn led nối ở RA4 vẫn ko sáng.

Ah, em đã thử thêm dòng lệnh

Code:
ADCON1 = 0x06;
vào hàm main() nhưng chương trình CSS C lại báo lỗi ADCON1 chưa khai báo và không dịch được.

Cho em hỏi chương trình em viết có thiếu gì không? và thiếu thì thêm như thế nào? Em xin cám ơn.
RA4 là chân ngõ vào cực thu hở, bạn cho nó lên mức cao (5V), bạn lại mắc con trở kéo lên nguồn (5V). Như thế thì đèn nào sáng cho được.

Bạn cho G5 = 0; thì đèn sáng thôi.
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn  
Old 09-05-2007, 05:53 PM   #190
conanhung
Nhập môn đệ tử
 
Tham gia ngày: Apr 2006
Bài gửi: 4
:
Em viết lại đoạn code này và cho chạy:
Code:
#include<16F876A.h>
#fuses NOLVP, NOWDT,PUT,HS,NOPROTECT
#use delay(clock=12000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#byte adcon1=0x9F
#byte porta=0x5
#byte portb=0x6
#byte portc=0x7

#bit G5 = porta.4
#bit G6 = porta.5

main()
{
adcon1=0x06;
set_tris_a(0);
set_tris_b(0b00000001);
set_tris_c(0);
while(true)
	{
      G5=1;
      G6=1;
      delay_ms(2000);
      G5=0;
      G6=0;
      delay_ms(2000);
	}
}
Nếu như anh picpicpic nói thì đèn G5 (chân RA4) phải nhấp nháy chứ, đằng này chỉ có đèn G6 nhấp nháy. Em không hiểu tại sao?

2 lệnh
Code:
#byte adcon1=0x9F
và
adcon1=0x6;
để cài đặt tất cả các chân của port A là digital viết vậy có đúng không?
conanhung vẫn chưa có mặt trong diễn đàn  
Old 09-05-2007, 09:05 PM   #191
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi conanhung View Post
Em viết lại đoạn code này và cho chạy:
Nếu như anh picpicpic nói thì đèn G5 (chân RA4) phải nhấp nháy chứ, đằng này chỉ có đèn G6 nhấp nháy. Em không hiểu tại sao?
Trên chân RA4 của bạn có 2 con điện trở, giữ nguyên con pull-up, bỏ con 4K7 mắc với LED xuống GND. Bạn để 2 con thế thành 10K, áp sụt trên con LED chừng 2V -> dòng qua LED chỉ có 0.3mA ko đủ cho led sáng.

Thông thường để hạn dòng bạn chỉ nên dùng 470 ohm.

Trích:
Nguyên văn bởi picpicpic
RA4 là chân ngõ vào cực thu hở, bạn cho nó lên mức cao (5V), bạn lại mắc con trở kéo lên nguồn (5V). Như thế thì đèn nào sáng cho được.

Bạn cho G5 = 0; thì đèn sáng thôi.
So với các chân RA khác, trong sơ đồ mạch vào ra của chân RA4 không có con MOSFET P bên trên, chỉ có con MOSFET N bên dưới. Bạn set bit RA4=0 thì con FET bên dưới dẫn, làm áp trên chân RA4 về 0 vậy làm sao LED sáng được. Khi set 1, con FET N tắt, nếu có pull-up thì áp trên chân RA4 cao.

Đã lỡ sửa bạn thì sửa luôn, không có ngõ vào cực thu hở chỉ có ngõ ra cực thu hở. Ở đây gọi chính xác là cực máng hở - Open Drain, cực thu hở - Open Collector chỉ trong các mạch logic TTL.
Trích:
2 lệnh
Code:
#byte adcon1=0x9F
và
adcon1=0x6;
để cài đặt tất cả các chân của port A là digital viết vậy có đúng không?
Bạn làm vậy đúng, nhưng CCS hỗ trợ hàm setup_adc_ports, dùng hàm này nhanh hơn.

thay đổi nội dung bởi: bien_van_khat, 09-05-2007 lúc 09:07 PM. Lý do: dư 2 chữ "của" :(
bien_van_khat vẫn chưa có mặt trong diễn đàn  
Old 11-05-2007, 12:58 AM   #192
conanhung
Nhập môn đệ tử
 
Tham gia ngày: Apr 2006
Bài gửi: 4
:
ok, thanks các bác nhiều, thật ra em dùng điện trở hạn dòng 330, còn điện trở kéo lên Vcc là 4k7 mà ghi nhầm, sory. Thanks các bác.
conanhung vẫn chưa có mặt trong diễn đàn  
Old 12-05-2007, 07:54 PM   #193
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 tranvanthuong View Post
em có đề tài đó nè! nhưng của anh linhnc308 anh cho mail cua anh di em goi cho anh!
than chao anh!
chào cậu! cậu có thể gửi cho mình cái đề tài đó được ko vay?
mail cua mình: anh_gioi@yhaoo.com
cám ơn cậu nha
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 18-05-2007, 12:29 PM   #194
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Đo tấn số
Xin chào! Tôi là thành viên mới. Thấy anh em trong diễn đàn tao đổi hay quá, tôi xin tham gia cùng.
Tôi gửi chương trình làm với PIC6F876A cho anh em tham khảo cùng. Mạch này đo được tần số lên đến 50MHz. Tôi muốn anh em giúp tôi khi muốn đo tần số sóng mang trong tín hiệu đã điều chế biên độ thì làm thế nào?

Code:
/*==============================================================================
* Author        :DRAGON(Hungnv0401@gmail.com)
* File Name     :Do tan so den 50MHz va hien thi tren LCD
* Data          :16/5/2007
* Hardware      :PIC16F876A
* Compiler      :CCS C 3.249
* Description   :50MHz frequency Counter & Display on LCD, Input is PIN_C0(Pin11)
*=============================================================================*/

#include <16F876A.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP


#bit TMR1IF = 0x0C.0
#use delay(clock=20000000)
#define RS PIN_C4
#define RW PIN_C5
#define CE PIN_C7

int8 ch_tr, tr, tr_ngh, van, ngh; // chuc trieu, trieu, tram nghin, van, nghin
int8 cycles8, cycles;
int16 freqc_high;
int16 freqc_low;
int32 freq;
//-----------------------------------------------------------------------------//

//* --------------------- Khoi tao cho LCD -----------------------------------*//
void lcd_init()
{
      output_low(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(0x0f);
      delay_us(100);
      output_high(CE);
      delay_us(100);
      output_low(CE);
}
//-----------------------------------------------------------------------------//

//*---------------------- Dua byte ra LCD -----------------------------------*//
void lcd_put(byte data)
{
      output_high(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(data);
      delay_us(500);
      output_high(CE);
      delay_us(500);
      output_low(CE);
}
//-----------------------------------------------------------------------------//

//*-------------------------- Chon 2 dong cho LCD ---------------------------*//
void lcd_2lines()
{
      output_low(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(0x38);
      delay_us(500);
      output_high(CE);
      delay_us(500);
      output_low(CE);
}
//-----------------------------------------------------------------------------//


//*----------------------------- Gui dia chi cho LCD ------------------------*//
void lcd_add(byte add)
{
      byte real_add;
      real_add = 0x80 + add;

      output_low(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(real_add);
      delay_us(500);
      output_high(CE);
      delay_us(500);
      output_low(CE);
}
//-----------------------------------------------------------------------------//



//*--------------------------- Chuong trinh chinh ---------------------------*//

void main()
{
lcd_init();
lcd_2lines();
   
while (TRUE)
   {
      cycles8=0;
      cycles=0;
      freqc_high=0;
      TMR1IF = 0;
      set_timer1(0);
      setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
      
//* -------------------------- Doi 1 giay ---------------------------------- *//
      while (cycles!=0xFF)			
       { 					
       cycles8=0; 				
       while (cycles8!=0xFF)
            { 
            if (TMR1IF)             
               {
               TMR1IF = 0;freqc_high++;
               }   
            else                                        
               {
               delay_cycles(5);
               }                       
            delay_cycles(62); 
            cycles8++; 
            }
            delay_cycles(216);	
            cycles++;		 	
        }
        delay_cycles(211);	
//*----------------------Ket thuc 1 giay ------------------------------------*//


//* ----------------Lay gia tri tu bo dem tan so ----------------------------*//

         freqc_low = get_timer1();	
         freq=(65536*freqc_high + freqc_low)/5;	//Vi thuc chat thach anh ta su dung 
                                                //o day la 4MHz = 1/5 cua 20MHz
         ch_tr = freq/10000000 + 48;
         tr = (freq%10000000)/1000000 + 48;
         tr_ngh = ((freq%10000000)%1000000)/100000 + 48;
         van = (((freq%10000000)%1000000)%100000)/10000 + 48;
         ngh=((((freq%10000000)%1000000)%100000)%10000)/1000 + 48;
         
         lcd_add(0x02);
         lcd_put('F'); lcd_put('r'); lcd_put('e');lcd_put('q'); lcd_put(32);
         lcd_put('C'); lcd_put('o'); lcd_put('u');lcd_put('n'); lcd_put('t');
         lcd_put('e'); lcd_put('r'); lcd_put(32);lcd_put(32); lcd_put(32);
                          
         lcd_add(0x42);
         lcd_put('F'); lcd_put('r'); lcd_put('e');lcd_put('q'); lcd_put(':');
         lcd_put(ch_tr); lcd_put(tr);   lcd_put('.');    lcd_put(tr_ngh);
         lcd_put(van);   lcd_put(ngh);   lcd_put(32);
         lcd_put('M');  lcd_put('H'); lcd_put('z');lcd_put(32);lcd_put(32);
         lcd_put(32);lcd_put(32);lcd_put(32);
         delay_ms(50);
 
     }
} //End

thay đổi nội dung bởi: falleaf, 18-05-2007 lúc 03:41 PM.
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 18-05-2007, 02:54 PM   #195
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Chào anh nhh!
Cảm ơn anh đã post lên nhiều chương trình rất dễ hiểu. Anh cho hỏi: Tôi muốn vừa tiến hành đo điện áp và hiển thị lên LCD vừa định thời gian thì làm thế nào?. Cụ thể là tôi có bài tập tiến hành đo điện áp của 1 thiết bị sạc ác quy, vấn đề này thì không có gì, nhưng tôi muốn đo thời gian nó đã sạc nữa, đơn vị tính thời gian là phút. Mong anh nhh va các anh em trong diễn đàn giúp đỡ!
Thanks alot!
An Hiep 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 ve I2C ( pic16f877a ) mafd_47a MPASM 26 07-05-2024 08:55 AM
TUT về USART trong PIC16F877A mafd_47a MPASM 11 04-05-2024 04:43 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à 11:57 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