![]() |
|
|
|
|
#1 |
|
Đệ tử 2 túi
|
Em có đoạn Code , cho led sáng tuần tự trên PORTB .Em không hiểu RTCC_DIV_
2 (chia prescaler 1:2) là gì ? Nó có tác dụng như thế nào trong Time0 , cũng như trong quá trình ngắt của đoạn Code trên. 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(2);
++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(2);// T_dinhthi = 2*(256 - 6)*1us = 500us
a = 0x01;
while(true)
{
PORTB = a;
}
}
thay đổi nội dung bởi: lexuantien, 11-03-2009 lúc 01:09 AM. |
|
|
|
|
|
#2 | |
|
Nhập môn đệ tử
Tham gia ngày: Mar 2009
Bài gửi: 3
: |
Trích:
mình cũng mới tìm hiểu về PIC và có xem qua đoạn mắc này giống bạn, đây là câu trả lời đầy đủ của anh ntc, bạn xem xong sẽ hiểu: rtcc_state là một trong những constant sau: RTCC_INTERNAL RTCC_EXT_L_TO_H RTCC_EXT_H_TO_L Mỗi Timer đều có 2 tác dụng: Tác dụng định thời: Timer sẽ dựa vào các xung tạo ra bởi bộ dao động (thạch anh, dao động RC, ...) cung cấp cho vi điều khiển để đếm. Và dựa vào tần số bộ dao động, giá trị các bộ chia tần số và giá trị của Timer, ta có thể xác định được thời gian thực. Như vậy trong trường hợp muốn Timer hoạt động ở chế độ định thời, ta phải khai báo rtcc_state là "RTCC_INTERNAL" (xử dụng tần số dao động nội). Tác dụng đếm: Timer sẽ dựa vào các xung lấy từ môi trường bên ngoài để đếm. Tùy theo Timer mà ta sử dụng chân lấy xung tương ứng (Timer 0 là chân RA4, Timer1 là chân RC0). Các xung này có tác dụng phản ánh các hiện tượng trong thực tế, và việc đếm các xung cũng đồng nghĩa với việc đếm các hiện tượng đó. Và để linh động hơn trong quá trình xử lí, Timer còn cho phép chọn cạnh tác động lên bộ đếm (chế độ này chỉ có ở Timer 0). Như vậy muốn Timer hoạt động ở chế độ đếm, ta phải khai báo rtcc_state là một trong 2 trường hợp còn lại (sử dụng dao động ngoài). Trích: 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 Ở đây có đến 2 hàm dùng để ấn định tỉ số chia của prescaler, một hàm là "RTCC_DIV_...", một hàm là "WDT_ ...". Đó là bởi vì Timer 0 và WDT dùng chung bộ chia tần số. Khi bộ chia được Timer 0 sử dụng thì WDT không đựoc hỗ trợ với bộ chia này nữa. Như vậy sự khác biệt về thao tác giữa 2 hàm này có thể là như sau: Hàm "RTCC_DIV_..." : cho phép Timer 0 sử dụng bộ chia tần số, không cho phép WDT sử dụng và ấn định tỉ số chia của nó. Hàm "WDT_ ..." : cho phép WDT 0 sử dụng bộ chia tần số, không cho phép Timer 0 sử dụng và ấn định tỉ số chia của nó. |
|
|
|
|
|
|
#3 |
|
Banned
Tham gia ngày: Sep 2008
Bài gửi: 4
: |
CCS 4.088 new
Link download:
Tested OK |
|
|
|
|
|
#4 |
|
Đệ tử 1 túi
Tham gia ngày: Jul 2006
Bài gửi: 11
: |
Giúp em code làm việc với 74HC595
Chào các bác.
Bác nào chỉ giúp em đoạn code làm việc với 595 theo 2 cách - sử dụng SPI module có sẵn của 16F877A - có thể sử dụng pin khác của Port khác Giúp em code bằng CCS C được ko ah. Em xin chân thành cảm ơn. thay đổi nội dung bởi: hatbui, 02-05-2009 lúc 10:17 AM. |
|
|
|
|
|
#5 |
|
Đệ tử 5 túi
|
Đây là cách phần mềm :
#bit SCK=0x06.6 #bit DATA=0x06.4 #bit SCL=0x06.7 void Data_in(int1 k) { output_bit(pin_b4,k); output_low(pin_b6); output_high(pin_b6); } void LatchData() { output_low(pin_b7); output_high(pin_b7); } Đây là spi phần cứng : spi_write(0b11111111); setup_spi(spi_master |spi_h_to_l|spi_clk_div_4);
__________________
Bảng ledsigns chất lượng cao... http://www.ledviet.info - manhha2700@yahoo.com Đt:0949299699 |
|
|
|
![]() |
|
|