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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-01-2007, 10:20 AM   #16
riquelme
Đệ tử 1 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 23
:
Có đoạn này trong datasheet PIC16F877A (note ở trang 54) em không hiểu, các bác giải thích cái nhé:
"Note: Writing to TMR0 when the prescaler is assigned to Timer0 will clear the prescaler count, but will not change the prescaler assignment."
riquelme vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2007, 12:50 PM   #17
minhpic
Đệ tử 9 túi
 
Tham gia ngày: Nov 2005
Bài gửi: 99
:
Mình có thể giải thích thế này, nếu bạn thực hiện một lệnh nào đó ghi vào TMR0 khi mà prescaler đã gán cho TIMER0 thì không làm thay đổi chỉ định này mà chỉ xóa tỷ số đã ghi vào prescaler(ví dụ: bạn đang đặt 1:2 thì sau lệnh ghi vào TMR0 tỷ số này bị xóa, do đó muốn sử dụng bạn phải đặt lại nhưng prescaler vẫn gán cho TIMER0 nếu từ đầu bạn đã gán cho nó)
minhpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2007, 10:30 PM   #18
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 minhpic View Post
Mình có thể giải thích thế này, nếu bạn thực hiện một lệnh nào đó ghi vào TMR0 khi mà prescaler đã gán cho TIMER0 thì không làm thay đổi chỉ định này mà chỉ xóa tỷ số đã ghi vào prescaler(ví dụ: bạn đang đặt 1:2 thì sau lệnh ghi vào TMR0 tỷ số này bị xóa, do đó muốn sử dụng bạn phải đặt lại nhưng prescaler vẫn gán cho TIMER0 nếu từ đầu bạn đã gán cho nó)
Không nên hiểu như vậy đâu.

Prescaler là một mạch chia tần số, thực sự chỉ là một bộ đếm xung (thường theo lũy thừa của 2 cho đơn giản phần cứng). Lấy ví dụ, prescaler 1:8 có nghĩa là 8 xung đầu vào thì mới có 1 xung ở đầu ra, tức là tốc độ xung đưa đến tải ở đầu ra của prescaler đã được giảm xuống (hay tần số đã bị chia nhỏ xuống). Người dùng có thể thắc mắc là nó sẽ bắt đầu đếm từ đâu, giả sử nó đếm từ 4 thì chỉ sau 4 xung đầu tiên đã có 1 xung ở ngõ ra của prescaler rồi. Microchip khẳng định bằng đoạn văn bản đó: Khi ghi vào thanh ghi TMR0 ở điều kiện prescaler được gán cho Timer0 thì số đếm của prescaler sẽ được xóa về 0, nhưng việc gán prescaler sẽ không thay đổi (có nghĩa là prescaler vẫn đang được gán cho Timer0). Thiết kế này đảm bảo trong mọi trường hợp bạn đều có tín hiệu ở ngõ ra của prescaler như mong muốn.

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

thay đổi nội dung bởi: namqn, 14-01-2007 lúc 07:58 PM. Lý do: lỗi typo
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2007, 01:17 AM   #19
riquelme
Đệ tử 1 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 23
:
Em muốn nói thêm là: Việc gán prescale sẽ không thay đổi (có nghĩa là prescale này vẫn đang được gán cho Timer0 và với giá trị scale không đổi)
riquelme vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2007, 03:39 PM   #20
sontt
Đệ tử 1 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 17
:
lap trinh cho pic 18f452, help me!

Em moi hoc pic, thu lap trinh dieu khien led bay thanh hien thi dem vong tu 1-9. Sau day la doan code:
Code:
#include<pic18.h>
#include<pic18f4550.h>
void delay(unsigned int time)
{
	while(time--)
	{
		asm("nop");
		asm("nop");
		asm("nop");
	}
}

const unsigned char ledarray[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void main()
{
        unsigned int led =0;
	PORTD=0x00;
	TRISD=0x00;// thanh ghi huong du lieu
	
	while(1)
	{	
		PORTD=ledarray[led];
		delay(10000);
		led++;
		if(led==10)led=0;
	}

}
chuong trinh tren khi nap vao thi chi thay co 3 thanh sang. ung voi cac chan 0,1,2 cua cong D. cac chan con lai cua cong D thi luon o muc dien ap 0. Thu voi cong B thi khong co chan nao co muc dien ap duoc cap len 1. Em da doc datasheet cua pic18f4550 nhung khong hieu cau hinh cac thanh ghi cua pic the nao de cac cong tren co the thiet lap len muc logic cao khi thiet lap la cong ra(ket hop 3 chan 0,1,2 cua cong D va cac chan cua cong A thi chuong trinh chay dung). Mong cac cao thu giai dap gium!
Thanhks!!!!!!!!!!!!!!!!!!!

thay đổi nội dung bởi: namqn, 14-01-2007 lúc 08:07 PM.
sontt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2007, 08:06 PM   #21
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 sontt View Post
Em moi hoc pic, thu lap trinh dieu khien led bay thanh hien thi dem vong tu 1-9. Sau day la doan code:
Code:
#include<pic18.h>
#include<pic18f4550.h>
void delay(unsigned int time)
{
	while(time--)
	{
		asm("nop");
		asm("nop");
		asm("nop");
	}
}

const unsigned char ledarray[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void main()
{
        unsigned int led =0;
	PORTD=0x00;
	TRISD=0x00;// thanh ghi huong du lieu
	
	while(1)
	{	
		PORTD=ledarray[led];
		delay(10000);
		led++;
		if(led==10)led=0;
	}

}
chuong trinh tren khi nap vao thi chi thay co 3 thanh sang. ung voi cac chan 0,1,2 cua cong D. cac chan con lai cua cong D thi luon o muc dien ap 0. Thu voi cong B thi khong co chan nao co muc dien ap duoc cap len 1. Em da doc datasheet cua pic18f4550 nhung khong hieu cau hinh cac thanh ghi cua pic the nao de cac cong tren co the thiet lap len muc logic cao khi thiet lap la cong ra(ket hop 3 chan 0,1,2 cua cong D va cac chan cua cong A thi chuong trinh chay dung). Mong cac cao thu giai dap gium!
Thanhks!!!!!!!!!!!!!!!!!!!
Khi bắt đầu cấp nguồn, các chân đa chức năng của PIC thường được thiết lập là analog pin nếu nó là một trong những ngõ vào analog.

Đọc chương 10 của datasheet, chú ý các phần Note, và các ví dụ khởi tạo cổng, để thấy người ta phải thiết lập các thanh ghi nào khi dùng một cổng nào đó (thông thường chỉ thiết lập TRISx sẽ không đủ).

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   Trả Lời Với Trích Dẫn
Old 17-01-2007, 10:07 PM   #22
riquelme
Đệ tử 1 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 23
:
Gửi bác Bắc:
Em hỏi câu này cái, không hiểu em tính toán sai chỗ nào:
nếu dao động là HS thì tốc độ là cỡ 4-20MHz, nếu cứ lấy chậm nhất là 4MHz thì thời gian trễ trong ví dụ đầu tiên là
Delay_time = (255+1 - TMR0_banđầu)* T_máy * time;
Với TMR0_bandau = 6; T_máy = 4*T_quartz = 1 uS;
Do đó Delay_time = 250*1 uS *time = 0,25 *time (miligiây). Như vậy thời gian trễ lớn nhất với High Speed là 0,25*time (miligiây) ?
riquelme vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-01-2007, 08:33 AM   #23
qanhep
Nhập môn đệ tử
 
Tham gia ngày: Jan 2007
Bài gửi: 9
:
Trích:
Nguyên văn bởi sontt View Post
Em moi hoc pic, thu lap trinh dieu khien led bay thanh hien thi dem vong tu 1-9. Sau day la doan code:
Code:
#include<pic18.h>
#include<pic18f4550.h>
void delay(unsigned int time)
{
	while(time--)
	{
		asm("nop");
		asm("nop");
		asm("nop");
	}
}

const unsigned char ledarray[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void main()
{
        unsigned int led =0;
	PORTD=0x00;
	TRISD=0x00;// thanh ghi huong du lieu
	
	while(1)
	{	
		PORTD=ledarray[led];
		delay(10000);
		led++;
		if(led==10)led=0;
	}

}
chuong trinh tren khi nap vao thi chi thay co 3 thanh sang. ung voi cac chan 0,1,2 cua cong D. cac chan con lai cua cong D thi luon o muc dien ap 0. Thu voi cong B thi khong co chan nao co muc dien ap duoc cap len 1. Em da doc datasheet cua pic18f4550 nhung khong hieu cau hinh cac thanh ghi cua pic the nao de cac cong tren co the thiet lap len muc logic cao khi thiet lap la cong ra(ket hop 3 chan 0,1,2 cua cong D va cac chan cua cong A thi chuong trinh chay dung). Mong cac cao thu giai dap gium!
Thanhks!!!!!!!!!!!!!!!!!!!
Pic18 thì không biết nhưng PIC16 thì bạn phải có thêm dòng xác lập fuse bit
__CONFIG(HS & PLVDIS) chẳng hạn. Nếu không thì trong quá trình nạp, bạn phải xác lập thêm các fuse bit cho bộ nạp.
qanhep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-01-2007, 09:37 PM   #24
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 riquelme View Post
Gửi bác Bắc:
Em hỏi câu này cái, không hiểu em tính toán sai chỗ nào:
nếu dao động là HS thì tốc độ là cỡ 4-20MHz, nếu cứ lấy chậm nhất là 4MHz thì thời gian trễ trong ví dụ đầu tiên là
Delay_time = (255+1 - TMR0_banđầu)* T_máy * time;
Với TMR0_bandau = 6; T_máy = 4*T_quartz = 1 uS;
Do đó Delay_time = 250*1 uS = 0,25*time (miligiây). Như vậy thời gian trễ lớn nhất với High Speed là 0,25(miligiây) ?
Nếu không dùng prescaler thì đúng như bạn tính. Nếu dùng prescaler thì thời gian trễ lớn nhất với HS là 256*0,25*time (miligiây), khi dùng prescaler với tỷ số 1:256, và giá trị ban đầu của TMR0 là 6.

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   Trả Lời Với Trích Dẫn
Old 19-01-2007, 09:51 PM   #25
riquelme
Đệ tử 1 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 23
:
Quên mất, em quên prescale, tuy nhiên em hỏi cho chắc vì sợ mình hiểu sai. Bởi vì trong bài em thấy lấy OPTION = 0x00 thì prescaler chỉ là 1:2 thôi, như vậy thì vòng lặp với đó không thể trễ 1ms được mà chỉ có thể tối đa là 2*0,25 (ms) ?
TB: Anh Nam này, em muốn hỏi về cách trả lời của diễn đàn cũng như các mod, thông thường, nếu như người viết đúng thì mod sẽ không trả lời lại nữa để khỏi mất công, còn nếu như sai mới được sửa lại? Bởi nhiều khi bài của mình không được trả lời, em cũng không chắc chắn về kiến thức của mình nữa nên không biết là mọi người không trả lời hay là bài đã viết đúng không cần sửa. Chi bằng ta thêm 1 nút của các mod là "đúng" để nhiều khi chỉ cần nháy vào đó là xong, đỡ phải mất công và cũng đỡ cho người viết.
riquelme vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-01-2007, 01:04 AM   #26
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chào bạn.

Cảm ơn sự góp ý của bạn về chương trình của mình. Mình mới thi xong nên chưa trả lời bài của bạn ngay được.

Bài của mình dùng thạch anh 20MHz và Prescaler với k = 1:2 cho Timer0 nên thời gian của hàm trễ là: 0.1 * time (đơn vị ms).

Có lẽ ngày xưa mình tính hơi bị nhầm tẹo nhưng không sao các bạn vẫn có thể dùng hàm đó ngon lành. Ví dụ các bạn đặt trễ là: 10ms thì cho time = 100.

Một lần nữa xin cảm ơn sự đóng góp của bạn. Mong bạn có nhiều ý kiến hơn về chương trình của mình viết.

Chúc các bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-01-2007, 09:42 PM   #27
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 riquelme View Post
Quên mất, em quên prescale, tuy nhiên em hỏi cho chắc vì sợ mình hiểu sai. Bởi vì trong bài em thấy lấy OPTION = 0x00 thì prescaler chỉ là 1:2 thôi, như vậy thì vòng lặp với đó không thể trễ 1ms được mà chỉ có thể tối đa là 2*0,25 (ms) ?
TB: Anh Nam này, em muốn hỏi về cách trả lời của diễn đàn cũng như các mod, thông thường, nếu như người viết đúng thì mod sẽ không trả lời lại nữa để khỏi mất công, còn nếu như sai mới được sửa lại? Bởi nhiều khi bài của mình không được trả lời, em cũng không chắc chắn về kiến thức của mình nữa nên không biết là mọi người không trả lời hay là bài đã viết đúng không cần sửa. Chi bằng ta thêm 1 nút của các mod là "đúng" để nhiều khi chỉ cần nháy vào đó là xong, đỡ phải mất công và cũng đỡ cho người viết.
Đúng là với OPTIOn = 0x00 sẽ cho prescaler 1:2 và gán cho Timer0, và vòng lặp trong cùng (kiểm tra cờ T0IF) chỉ làm trễ khoảng 2*0,25 ms ở clock 4 MHz.

Về việc trả lời, các mod khá bận rộn, do đó có thể không theo dõi hết được các bài viết. Nếu bạn nào nhất định cần được khẳng định thì cứ cho 1 câu hỏi vào trong bài viết là được. Việc thêm 1 nút "đúng" cũng là một ý kiến hay, nhưng mod không nhất định và không luôn luôn đúng, do đó việc tạo ra nút này theo anh sẽ không có hiệu quả lắ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

thay đổi nội dung bởi: namqn, 20-01-2007 lúc 10:18 PM.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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
HTPIC - các chương trình cho PIC6F877A ngohaibac Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 65 05-04-2014 01:10 AM
Giúp đỡ về HTPIC riquelme Cơ bản về vi điều khiển và PIC 0 11-01-2007 11:56 PM


Múi giờ GMT. Hiện tại là 02:21 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