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 30-06-2007, 02:14 AM   #1
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 23-09-2007, 11:19 AM   #2
1322
Nhập môn đệ tử
 
Tham gia ngày: Nov 2006
Bài gửi: 4
:
help

Ban co the giup 123? tai sao minh bo cai program nay vao complier thu, tra loi rang, unknow device, try dung pcm, nghia la sao? minh dung ccs 3.2. xin vui long giup dum minh



Trích:
Nguyên văn bởi nhh View Post
Đây là 1 ví dụ nhỏ về ADC,chân RA0 lấy tín hiệu Analog từ biến trở và xuất giá trị số biến đổi tương ứng qua tám led nối ở portB
Code:
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8 
#use delay(clock=10000000)
Int8 adc;
main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(10);
while(true)
{
adc=read_adc();
output_B(adc);
}
}
1322 vẫn chưa có mặt trong diễn đàn  
Old 29-03-2006, 10:29 AM   #3
ngoalongdochanh
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 2
:
Cám ơn nhh đã trả lời cho mình, do lần trước mình khai báo chưa đúng cách giữa 16f877A và *=16 đúng ra phải viết liền như bạn minh lại viết cách ra như thế này "16f877A *=16". Nhân tiện cho mình hỏi luôn ý nghĩa của việc khai báo "#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT"
ngoalongdochanh vẫn chưa có mặt trong diễn đàn  
Old 31-03-2006, 12:15 PM   #4
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 ngoalongdochanh
Cám ơn nhh đã trả lời cho mình, do lần trước mình khai báo chưa đúng cách giữa 16f877A và *=16 đúng ra phải viết liền như bạn minh lại viết cách ra như thế này "16f877A *=16". Nhân tiện cho mình hỏi luôn ý nghĩa của việc khai báo "#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT"
He he...
Tui cứ tưởng ko ma nào vào luồng này chứ !
Khai báo:
Code:
"#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
-HS :sử dụng thạch anh tần số cao
-NOWDT:tắt WDT
-NOPROTECT:tắt PROTECT
-NOLVP:không dùng LVP
-NOBROWNOUT:ko BROWNOUT

Còn cụ thể ý nghĩa thế nào,bạn vào help của CCS C gõ :"#fuses"

Chào!
__________________
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, 01-04-2006 lúc 01:41 PM.
nhh vẫn chưa có mặt trong diễn đàn  
Old 27-06-2007, 11:34 AM   #5
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 ngoalongdochanh View Post
Cám ơn nhh đã trả lời cho mình, do lần trước mình khai báo chưa đúng cách giữa 16f877A và *=16 đúng ra phải viết liền như bạn minh lại viết cách ra như thế này "16f877A *=16". Nhân tiện cho mình hỏi luôn ý nghĩa của việc khai báo "#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT"
sao mình khai báo #device 16F877*=16 ADC=8 mà nó vẫn báo:
"can not change device type this far into the code"
thanhk!
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 01-04-2006, 12:33 PM   #6
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Cái luồng bên này nhh vẽ hình cẩu thả quá!

Cái chân MCLR*, bạn phải nối thên cái công tắc ấn vào. nhh nối như vậy thì không reset được con PIC đâu

Hai cái chân Vss phải được nối mass.

Chân nào không xài, nhh nên đánh dấu bỏ đi (trong thanh công cụ của ORCAD có cái dấu này đó).


Nếu mình chịu khó cẩn thận hơn một chút thì sẽ hạn chế được rất nhiều sự bỡ ngỡ cho người mới học. Bạn coi mấy cái hình mình vẽ trong mấy cái Tutorial thì thấy, từng chi tiết đều được chú ý cả, không thể tùy tiện được.

__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 01-04-2006, 01:42 PM   #7
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
Thank you!
Đúng là mình ko chú ý chỗ này!Mình sẽ sửa và up lên lạ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, 29-05-2006 lúc 01:53 PM.
nhh vẫn chưa có mặt trong diễn đàn  
Old 02-04-2006, 08:54 AM   #8
batos
Nhập môn đệ tử
 
Tham gia ngày: Apr 2006
Bài gửi: 1
:
cho mình hỏi viết chương trình như thế nào để có thể nạp qua bootloader cho 877A dùng Tinybootloader . Bạn có thể viết 1 ví dụ nháy led như trên đc ko
batos vẫn chưa có mặt trong diễn đàn  
Old 02-04-2006, 10:30 AM   #9
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Viết chương trình như bình thường, không có gì thay đổi, nhưng vị trí đầu tiên của chương trình phải lưu ý. Bạn xem hướng dẫn tinybootloader.

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn  
Old 02-04-2006, 11:27 AM   #10
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
Talking Timer

Hi....!

Trong Pic16f877a có 3 timer :
+ Timer0 : 8 bit
+ Timer1 : 16 bit
+ Timer2 : 8 bit
Timer dùng cho nhiều ứng dụng : định thời, capture, pwm, ...

1.Timer0

Thanh ghi tác động:

Các lệnh:
Code:
setup_TIMER_0(mode);
setup_COUNTERS (rtcc_state, ps_state); // hay setup_WDT()
set_TIMER0(value); // hay set_RTCC(value) :xác định giá trị ban đầu (8bit) cho Timer0
get_TIMER0(); // hay get_RTCC() :trả về số nguyên (8bit) của Timer0
Trong đó mode là một hoặc hai constant (nếu dùng hai thì chèn dấu "|"ở giữa) được định nghĩa trong file 16F877A.h gồm :

RTCC_INTERNAL : chọn xung clock nội
RTCC_EXT_L_TO_H : chọn bit cạnh lên trên chân RA4
RTCC_EXT_H_TO_L : chọn bit cạnh xuống trên chân RA4

RTCC_DIV_2 :chia prescaler 1:2
RTCC_DIV_4 1:4
RTCC_DIV_8 1:8
RTCC_DIV_16 1:16
RTCC_DIV_32 1:32
RTCC_DIV_64 1:64
RTCC_DIV_128 1:128
RTCC_DIV_256 1:256

rtcc_state là một trong những constant sau:

RTCC_INTERNAL
RTCC_EXT_L_TO_H
RTCC_EXT_H_TO_L

ps_state là một trong những constant sau:

RTCC_DIV_2
RTCC_DIV_4
RTCC_DIV_8
RTCC_DIV_16
RTCC_DIV_32
RTCC_DIV_64
RTCC_DIV_128
RTCC_DIV_256
WDT_18MS
WDT_36MS
WDT_72MS
WDT_144MS
WDT_288MS
WDT_576MS
WDT_1152MS
WDT_2304MS

Mình cũng chưa hiểu ý nghĩa của hàm WDT_..., ko biết có phải khai báo như trên thì sau khoảng thời gian ms bao nhiêu đó đặt sau WDT_ thì sẽ reset lại Pic ?????

2.Timer1

Thanh ghi tác động:

Các lệnh:
Code:
setup_TIMER_1(mode);	
set_TIMER1(value);	  	// xác định giá trị ban đầu (16bit) cho Timer1
get_TIMER1();               	// trả về số nguyên (16bit) của Timer1
mode gồm (có thể kết hợp bằng dấu "|"):

T1_DISABLED : tắt Timer1
T1_INTERNAL : xung clock nội (Fosc/4)
T1_EXTERNAL : xung clock ngoài trên chân RC0
T1_EXTERNAL_SYNC : xung clock ngoài đồng bộ
T1_CLK_OUT
T1_DIV_BY_1
T1_DIV_BY_2
T1_DIV_BY_4
T1_DIV_BY_8

3.Timer2

Thanh ghi tác động:

Các lệnh:
Code:
setup_TIMER_2(mode, period, postscale);
set_TIMER2(value);        	// xác định giá trị ban đầu (8bit) cho Timer2
get_TIMER2();              	// trả về số nguyên  8bit
Với mode gồm (co the ket hop bang dau "|"):

T2_DISABLED
T2_DIV_BY_1
T2_DIV_BY_4
T2_DIV_BY_16

period là số nguyên từ 0-255, xác định giá trị xung reset
postscale là số nguyên 1-16, xác định reset bao nhiêu lần trước khi ngắt.
__________________
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, 02-04-2006 lúc 11:34 AM.
nhh vẫn chưa có mặt trong diễn đàn  
Old 11-06-2007, 03:08 PM   #11
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Timer ! Help !

Các bác có thể chỉ rõ hơn về timer ko? ví dụ như khi nào timer sẽ tràn( reset ) . giống như 8051( la TF =0)
Và muốn định khỏan thời gian đếm cho timer phải làm sao?
Ví dụ như : tạo một xung vuông với tần số 1Hx, cách tính thời gian set timer như thế nào ? giá trị nạp cho timer là bao nhiêu ?
Còn timer 16 bit .. sau khi reset có cần phải nạp lại gia trị ban đầu ko?( giống như 8051 vậy ..).. Ai có the so sanh giữa 8051 va 16f877 kô?
Mong các bác giúp đỡ sớm để em mau biết rõ hơn ...
Cam ơn các bác !

thay đổi nội dung bởi: LeDuc, 15-06-2007 lúc 03:17 PM.
LeDuc vẫn chưa có mặt trong diễn đàn  
Old 21-06-2007, 06:53 PM   #12
nguyen.geo
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 27
:
Trích:
Nguyên văn bởi LeDuc View Post
Các bác có thể chỉ rõ hơn về timer ko? ví dụ như khi nào timer sẽ tràn( reset ) . giống như 8051( la TF =0)
Và muốn định khỏan thời gian đếm cho timer phải làm sao?
Ví dụ như : tạo một xung vuông với tần số 1Hx, cách tính thời gian set timer như thế nào ? giá trị nạp cho timer là bao nhiêu ?
Còn timer 16 bit .. sau khi reset có cần phải nạp lại gia trị ban đầu ko?( giống như 8051 vậy ..).. Ai có the so sanh giữa 8051 va 16f877 kô?
Mong các bác giúp đỡ sớm để em mau biết rõ hơn ...
Cam ơn các bác !
Theo mình thì bạn cần xem lại datasheet của 16F877A Từ Trang 47-60.
Mỉnh thấy nó nói khá rõ mà.
nguyen.geo vẫn chưa có mặt trong diễn đàn  
Old 02-04-2006, 11:40 AM   #13
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
Intterupt

INTERRUPT

Các lệnh dùng cho ngắt:
Code:
enable_interrupts(level);	//cho phép ngắt kiểu level   
disable_interrupts(level); 	             //cấm ngắt kiểu level
ext_int_edge(edge);         	             // chọn cách lấy xung loại  edge
level bao gồm:

GLOBAL : ngắt toàn cục
INT_RTCC : tràn TMR0
INT_RB : có thay đổi trạng thái một trong các chân RB4 đến RB7
INT_EXT : ngắt ngoài
INT_AD : chuyển đổi AD đã hoàn tất
INT_TBE : bộ đệm chuyển RS232 trống
INT_RDA : data nhận từ RS232 sẵn sàng
INT_TIMER1 : tràn TMR1
INT_TIMER2 : tràn TMR2
INT_CCP1 : có capture hay compare trên CCP1
INT_CCP2 : có capture hay compare trên CCP2
INT_SSP : có hoạt động SPI hay I2C
INT_PSP : có data vào cổng parallel slave
INT_BUSCOL : xung đột bus
INT_EEPROM : ghi vào eeprom hoàn tất
INT_TIMER0 : tràn TMR0
INT_COMP : kiểm tra bằng nhau comparator

edge bao gồm:

L_TO_H : cạnh lên
H_TO_L : cạnh xuống

Sau khai báo trên để vào đoạn chương trình ngắt, khai báo:

#INT_.........

Ví dụ vào thực thi ngắt ngoài, ta có đoạn code:
Code:
#INT_EXT
void ngat_ngoai()
{
//Chương trình ngắt tại đây
}
__________________
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 23-02-2008, 07:12 PM   #14
tinhgiac_vp
Đệ tử 2 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 42
:
Trích:
Nguyên văn bởi nhh View Post
INTERRUPT

Các lệnh dùng cho ngắt:
Code:
enable_interrupts(level);	//cho phép ngắt kiểu level   
disable_interrupts(level); 	             //cấm ngắt kiểu level
ext_int_edge(edge);         	             // chọn cách lấy xung loại  edge
level bao gồm:

GLOBAL : ngắt toàn cục
INT_RTCC : tràn TMR0
INT_RB : có thay đổi trạng thái một trong các chân RB4 đến RB7
INT_EXT : ngắt ngoài
INT_AD : chuyển đổi AD đã hoàn tất
INT_TBE : bộ đệm chuyển RS232 trống
INT_RDA : data nhận từ RS232 sẵn sàng
INT_TIMER1 : tràn TMR1
INT_TIMER2 : tràn TMR2
INT_CCP1 : có capture hay compare trên CCP1
INT_CCP2 : có capture hay compare trên CCP2
INT_SSP : có hoạt động SPI hay I2C
INT_PSP : có data vào cổng parallel slave
INT_BUSCOL : xung đột bus
INT_EEPROM : ghi vào eeprom hoàn tất
INT_TIMER0 : tràn TMR0
INT_COMP : kiểm tra bằng nhau comparator

edge bao gồm:

L_TO_H : cạnh lên
H_TO_L : cạnh xuống

Sau khai báo trên để vào đoạn chương trình ngắt, khai báo:

#INT_.........

Ví dụ vào thực thi ngắt ngoài, ta có đoạn code:
Code:
#INT_EXT
void ngat_ngoai()
{
//Chương trình ngắt tại đây
}
các cao thủ vui lòng viết 1 ví dụ cụ thể về ngắt ngoài được không??????? Em đã thử viết nhưng không chạy được. Chương trình của em dùng ngắt ngoài RB_0 và hiển thị lên port_C
#include <16F877A.h>
#byte portb = 0x06
#byte portc = 0x07
#use delay (clock = 20000000)
int count=1;
#INT_EXT
void EXT_LED()
{
portc=count;
count=count+1;
delay_us(100);
bit_clear(portb,0);
}
void main() {
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(global);
set_tris_b(0xff);
set_tris_c(0x00);
portc=0;
bit_set(portb,0);
while(1)
{
}

}
tinhgiac_vp vẫn chưa có mặt trong diễn đàn  
Old 02-04-2006, 11:45 AM   #15
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 Timer0

Đây là chương trình dùng ngắt Timer0 định thì 1s.
Đầu tiên led ở chân RB0 sáng, sau 1s sẽ dịch sang trái, nghĩa là led 1 trên chân RB1 sáng , lần lượt như vậy cho các led trên portB và lặp lại mãi mãi.
Code:
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
   set_timer0(6);
   ++count;
   if(count == 2000)   // 2000*500us = 500000us = 1s
      {
         count=0;
         rotate_left(&a,1);
      }
}
//Chuong trinh chinh
void main(void)
{
   set_tris_b(0);
   enable_interrupts(int_timer0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); 
   enable_interrupts(global);
   set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
   a = 0x01;
   
   while(true)
   {
      PORTB = a;
   }
}
File Kèm Theo
File Type: rar Interrupt_Timer0.rar (22.3 KB, 2635 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, 22-09-2007 lúc 10:37 AM. Lý do: Update
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à 02:31 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