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 12-10-2007, 12:59 AM   #331
cooloo
Nhập môn đệ tử
 
Tham gia ngày: Oct 2007
Bài gửi: 2
:
Trích:
Nguyên văn bởi nhh View Post
Chương trình này làm nhấp nháy con led ở chân RB0 1s sáng, 1s tắt.
Code:
#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=10000000)
main()
{
while(true)
	{
	output_high(PIN_B0);
	delay_ms(1000);
	output_low(PIN_B0);
	delay_ms(1000);
	}
}
Trên đây:
Code:
#include<16F877A.h>
Khai báo con PIC bạn sử dụng, file này chương trình viết sẵn nhằm khai báo các bit, thanh ghi quan trọng trong con pic này.Các bạn có thể vào thư mục cài đặt C:\Program Files\PICC\Devices\16F877A.h để xem nó khai báo được những gì trong đó!
Code:
#fuses NOWDT,PUT,HS,NOPROTECT
Thiết lập các config
Code:
#use delay(clock=10000000)
Khai báo tần số dao động cấp cho PIC
Code:
output_high(PIN_B0)
Xuất ra chân RB0 mức logic 1 (tức 5V), do khi thực hiện hàm này đã bao hàm luôn việc tác động lên thanh ghi TRISB (dùng chọn chân I/O) do vậy ta không cần viết lệnh chọn chân I/O nữa.
Code:
output_low(PIN_B0)
Ngược lại
Code:
delay_ms(1000)
Tạo trễ khoảng thời gian theo mili giây là 1000 (tức 1s)
Chú ý hàm này chỉ có tác dụng khi có khai báo tần số dao động cấp cho PIC

Và bây giờ thử làm cho tất cả 8 led nối với portB chớp tắt 1s xem nào!Phải chăng ta sẽ làm như sau (Viết trong vòng lặp while):
Code:
{
output_high(PIN_B0);
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
delay_ms(1000);
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
delay_ms(1000);
}
Viết như thế này thì quá dài và thiếu chính xác nữa, có cách nào khác hay hơn không ? Sao ta không xuất đẩy hẳn portB lên mức cao,tạo trễ 1s rồi ép cho nó xuống mức thấp,tạo trễ 1s cùng một lúc nhỉ !
Bài tiếp theo sẽ đưa ra câu trả lời....
Bạn ơi , khi mình compile cái code như trên thì nó báo lỗi warning về thiếu "void" . Mình bỏ thêm : void main(void) vào thì nó mới chạy .
Những function : delay() , rs232(), i2c thì tìm ở đâu vậy ???

thay đổi nội dung bởi: cooloo, 12-10-2007 lúc 04:54 AM. Lý do: thêm vào
cooloo vẫn chưa có mặt trong diễn đàn  
Old 12-10-2007, 02:43 AM   #332
thanco112
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
Talking Hỏi về PWM

Oe oe, các bác lừa em nhá. Các bác bảo là tập trung mổ xẻ phần PWM làm em đọc mãi hết hai mấy trang mà thấy có mỗi 2 bài liên quan. Bác nào biết về phần này thì chỉ bảo em với ạ.

Em đang có một con step motor 4 dây (đỏ, xám- đen, vàng). Em đang tìm cách điều khiển nó (chạy, dừng, đảo chiều) nhưng mà chưa biết làm thế nào cả. Các bác cho em hỏi:

1. Em dùng 16f877 điều khiển nó có được không?
2. Cần phải có những kiến thức gì để điều khiển nó?

Bác nào có tài liệu về phần này bằng tiếng Việt thì share cho em với ạ.

Em cám ơn các bác ạ!!!!
thanco112 vẫn chưa có mặt trong diễn đàn  
Old 12-10-2007, 09:01 AM   #333
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
Tất nhiên dùng 16F877 được, phí phạm nữa là đằng khác.

Tài liệu tiếng Việt về stepper motor, bạn vào phần điều khiển motor trong diễn đàn này tìm.

Stepper motor của bạn nếu công suất bé có thể dùng ULN lái.
Tham khảo điều khiển stepper motor ở đây:http://www.interq.or.jp/japan/se-inoue/e_step.htm
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn  
Old 12-10-2007, 09:41 AM   #334
Nguoidumuc204
Nhập môn đệ tử
 
Nguoidumuc204's Avatar
 
Tham gia ngày: Oct 2007
Bài gửi: 6
:
output_high(pin_xx);
output_low (pin_xx);

Hai câu lệnh trên chỉ làm cho chân ra xx là cao hay thấp, ứng với mức logic 1 hoặc 0.trong bài trên ta muốn cho sáng tất một port thì chỉ càn câu lệnh :
Code:
void main (void )
{
   set_tris_b(0);      // cả port B là port ra
   set_tris_c(0);     // cả port C là port ra
   port_b(0x00);    // khởi tạo giá trị đầu port B là 0 ( Tất cả led đều tắt )
   port_c(0x00);   // khởi tạo giá trị đầu port B là 0 ( Tất cả led đều tắt )
   delay_ms(100);
   while(1)
  {
        port_b(0xff);   
        delay_ms(1000);
        port_c(0xff); 
        delay_ms(1000);
   }  
}

thay đổi nội dung bởi: namqn, 12-10-2007 lúc 05:57 PM. Lý do: Bài lại sai lỗi chính tả !!
Nguoidumuc204 vẫn chưa có mặt trong diễn đàn  
Old 12-10-2007, 06:12 PM   #335
vandungevn
Đệ tử 5 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 116
:
Send a message via Yahoo to vandungevn
Những function : delay() , rs232(), i2c thì tìm ở đâu vậy ???

bạn xem rõ hơn trong phần help của nó nhé, hoặc tạo new project = PIC Wizard xem trong đó có nói về Những function : delay() , rs232(), i2c ......!
__________________
Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam"
Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368
Nick name : VanDungEvn ( Yahoo + Skype )
Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR.
Email: vandungevn@gmail.com Website: www.dientuphuongdung.com
Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam.
vandungevn vẫn chưa có mặt trong diễn đàn  
Old 12-10-2007, 10:28 PM   #336
manhckgtcck45
Nhập môn đệ tử
 
Tham gia ngày: Jul 2007
Bài gửi: 5
:
Các anh ơi giúp e với. Các anh có thể chỉ cho em cách sử dụng ngắt ngoài để đếm thời gian của sự thay đổi tín hiệu vào port B không?
manhckgtcck45 vẫn chưa có mặt trong diễn đàn  
Old 13-10-2007, 12:13 AM   #337
thongtr
Đệ tử 2 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 27
:
Send a message via Yahoo to thongtr
cá pac ơi giúp em!! em bi lỗi gì vậy!
Hình Kèm Theo
File Type: bmp untitled.bmp (234.5 KB, 35 lần tải)
__________________
thongtr0601@yahoo.com!!
Giúp nhau cùng tiến bộ.....
thongtr vẫn chưa có mặt trong diễn đàn  
Old 13-10-2007, 09:09 AM   #338
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 thongtr View Post
cá pac ơi giúp em!! em bi lỗi gì vậy!
Bạn không nhận thấy chương trình đòi dấu "}" à?
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn  
Old 13-10-2007, 12:52 PM   #339
thongtr
Đệ tử 2 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 27
:
Send a message via Yahoo to thongtr
mình cũng a thêm đấu } vào rồi nhưng cũng ko có tác dụng!! với lại mình đưa chuột tới đấu } cuối cùng đó thì nó hiện ra màu xanh và nhìn lên trên thì thấy màu xanh đó ứng với đấu { dưới hàm void main(void) !!!
mình cũng ko biết bị chuyện nữa!!
File Kèm Theo
File Type: rar VIdu2.rar (524 Bytes, 153 lần tải)
__________________
thongtr0601@yahoo.com!!
Giúp nhau cùng tiến bộ.....
thongtr vẫn chưa có mặt trong diễn đàn  
Old 13-10-2007, 02:04 PM   #340
thongtr
Đệ tử 2 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 27
:
Send a message via Yahoo to thongtr
Trích:
Nguyên văn bởi thongtr View Post
Em vừa mới viết xong ct hiển thị LCD 4 bit! có hiệu ứng chữ chạy rất hay!! em post lên cho các pác tham khảo nhé! và góp ý cho em nhé!

#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#define use_portb_lcd TRUE
#include <lcd.c>
const unsigned char line1[]={'H','E','L','L','O',' ','P','I','C','V','N','!','#'};
const unsigned char line2[]={'Y','H',':','T','H','O','N','G','T','R','0','6', '0','1','@',\
'Y','A','H','O','O','.','C','O','M','#'};

void main(void)
{ while(true)
{
int I=0,y=0,k=0,z=0;
delay_ms(100); // tao tre 100ms cho LCD khoi dong
lcd_init();
lcd_gotoxy(1,1);
while (line1[y]!='#')
{
lcd_putc(line1[y]);
delay_ms(200);
y++;
}
lcd_gotoxy(1,2);
while (i<16)
{
lcd_putc(line2[I]);
i++;
delay_ms(200);
}
i=2;

while (line2[z]!='#')
{
lcd_init();
lcd_gotoxy(1,1);
y=0;
while (line1[y]!='#')
{
lcd_putc(line1[y]);
y++; }

lcd_gotoxy(1,2);
k=i+16;
for(z=i;z<k;z++)
{lcd_putc(line2[z]);}
delay_ms(400);
i++;
}
}
}
Chương trình này minh mô phỏng chạy rồi nhung sao khi cho chạy thực tế khì ko dc!!
Mình đã mắc mạch theo sơ đồ này!! (chỉ có thay thạch anh 20M thôi!)
Hình Kèm Theo
File Type: gif LCD_4pindata.gif (10.8 KB, 1017 lần tải)
__________________
thongtr0601@yahoo.com!!
Giúp nhau cùng tiến bộ.....
thongtr vẫn chưa có mặt trong diễn đàn  
Old 13-10-2007, 02:05 PM   #341
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 thongtr View Post
mình cũng a thêm đấu } vào rồi nhưng cũng ko có tác dụng!! với lại mình đưa chuột tới đấu } cuối cùng đó thì nó hiện ra màu xanh và nhìn lên trên thì thấy màu xanh đó ứng với đấu { dưới hàm void main(void) !!!
mình cũng ko biết bị chuyện nữa!!
- Bạn thiếu dấu ngoặc kép của line1[].

- Chưa include file lcd.c

- Chú ý phép gán = và phép so sánh bằng ==

Việc chạy mô phỏng đúng ko hẳn thực tế sẽ đúng nhưng chạy mô phỏng sai thì chạy trên mạch thật sai là cái chắc.
File Kèm Theo
File Type: rar VIdu2.rar (4.6 KB, 249 lần tải)
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263

thay đổi nội dung bởi: nhh, 13-10-2007 lúc 05:34 PM.
nhh vẫn chưa có mặt trong diễn đàn  
Old 13-10-2007, 05:21 PM   #342
ghosttn
Nhập môn đệ tử
 
Tham gia ngày: Oct 2007
Bài gửi: 9
:
Xin loi vi chen ngang các anh

Em muon' cho 595 ra 8 bit 1 luc nhung lam mai khong duoc. Em sai ởi chỗ nào
do mới học em chỉ có thể nghĩ đơực như vậy thôi. các anh tối ưu code+ mạch hộ em với.
====================================

#include <16f877a.h>
#use delay(clock=4M)
int8 i;
void input_byte(){
for(i=0;i<=7;i++){
output_bit(pin_B0,0); //1.tao xung cho pin_sck
output_bit(pin_B1,i%=2);//2.dich du lieu vao luc pin_sck o trang thai suon
output_bit(pin_B0,1); //3.ket thuc xung tai pin_sck
}
}
void output_byte(){
output_bit(pin_B2,0); //1.tao xung clock cho pin_rck
delay_ms(100); //2.dung lai de xem
output_bit(pin_B2,1); //3.ket thuc xung tai pin_rck
}

void main(){
set_tris_b(0);
output_bit(pin_B4,0);//khoi dong 595 pin_/OE

while(1){
output_bit(pin_B3,1);//cho phep ghi du lieu pin_MR =1
input_byte();
output_byte();
output_bit(pin_B3,0);//all pin out 595= level low
}//end while
}// end main
==========================
Hình Kèm Theo
File Type: bmp cc.bmp (404.4 KB, 50 lần tải)

thay đổi nội dung bởi: ghosttn, 13-10-2007 lúc 05:46 PM. Lý do: sai
ghosttn vẫn chưa có mặt trong diễn đàn  
Old 14-10-2007, 01:12 AM   #343
thanco112
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
hỏi về ngắt

Các bác cho em hỏi về các loại ngắt của con 16f877 này với ạ. Tên của nó này, chế độ hoạt động của nó như thế nào (khi nào thì ngắt ấy ạ). Em gà, mới nghiên cứu pic, các bác giúp cho!

GLOBAL
INT_RTCC
INT_RB
INT_EXT
INT_AD
INT_TBE
INT_RDA
INT_TIMER1
INT_TIMER2
INT_CCP1
INT_CCP2
INT_SSP
INT_PSP
INT_BUSCOL
INT_EEPROM
INT_TIMER0

Thanks các bác nhiều
thanco112 vẫn chưa có mặt trong diễn đàn  
Old 22-10-2007, 02:45 PM   #344
vandungevn
Đệ tử 5 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 116
:
Send a message via Yahoo to vandungevn
Hiển thị dùng 595 trên CCS

Dưới đây là một chương trình đưa một byte bằng 74hc595 dùng trên CCS

Code:
void display(unsigned char dataout)
{
	unsigned char temp;
	//dataout = 0xa4;
	output_low(pin_c0); 
for(i=0;i<8;i++)
{       
	temp = dataout;
	temp = temp&0x80;
	if(temp==0x80)
	{
	output_high(pin_c1);    // Data
	}
	else
	{
	output_low(pin_c1);  	// Data
	}
	output_high(pin_c0); 	// Clock
	dataout *=2;  
	output_low(pin_c0);	// Clock
}
output_high(pin_c2);		// Latch
output_low(pin_c2);		// Latch
}
chúc bạn thành công.!
__________________
Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam"
Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368
Nick name : VanDungEvn ( Yahoo + Skype )
Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR.
Email: vandungevn@gmail.com Website: www.dientuphuongdung.com
Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam.

thay đổi nội dung bởi: namqn, 14-01-2008 lúc 09:32 PM.
vandungevn vẫn chưa có mặt trong diễn đàn  
Old 26-10-2007, 07:06 PM   #345
Yeu PIC
Nhập môn đệ tử
 
Tham gia ngày: Oct 2007
Bài gửi: 1
:
trong ct mình dùng hai file của bộ compiler: lcd.c và ds1307.c
khi biên dịch thành file .hex thì bị những lỗi về delay như thế này:
Nguyên nhân do đau vậy!
Hình Kèm Theo
File Type: bmp untitled.bmp (69.3 KB, 41 lần tải)
Yeu PIC 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 24 17-03-2024 12:25 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
TUT về USART trong PIC16F877A mafd_47a MPASM 10 28-09-2009 09:58 PM
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à 02:43 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