Em tìm được đoạn code này ( đọc encode và tính toán hiển thị số vòng động cơ lên LCD 16x2) nhưng còn vài chỗ chưa hiểu vì ngôn ngữ C em chưa bik nhiều lắm, mong anh chị giải thích giùm em. Em cũng mới tìm hiểu về Pic.
Code:
#include <16f877a.h>
#include <def_877a.h>
#include <lcd_lib_4bit.c>
#use delay(clock=20000000)
int8 nghin,tram,chuc,donvi;
void tinhtoan_hienthi(int16 x);
int16 count,so_vong,int_count1,x;
#define INTS_PER_SECOND1 25
#int_rtcc // Ngat Timer 0
void Timer0_isr() // Dem so vong quay dong co
{
count++;
}
#INT_TIMER1 // Chuong trinh ngat Timer 1
void Timer1_isr()
{ // Ham duoc goi khi Timer1 tran (65535->0) //
//Timer1 dinh thoi 1s //
if(--int_count1==0) //Em chưa hiểu cái hàm timer
{ //này nó như thế nào
int_count1 = INTS_PER_SECOND1;
so_vong = (count*255 + get_timer0())/400; //
count = 0;
set_timer0(0);
}
}
void tinhtoan_hienthi(int16 x) // giải thích lun giúp em hàm này
{nghin = x / 1000 + 0x30;
x = x % 1000;
tram = x / 100 + 0x30; // tach so hang tram
x = x % 100; // chia lay phan du
chuc = x / 10 + 0x30; // tach lay phan chuc
donvi = x % 10 + 0x30; // phan don vi
lcd_putcmd(0xC0);
printf(lcd_putchar,"toc do=");
lcd_putchar(nghin);
lcd_putchar(tram);
lcd_putchar(chuc);
lcd_putchar(donvi);
}
void init()
{
lcd_putcmd(0x80);
int_count1 = INTS_PER_SECOND1;//19 lan 1 giay
setup_timer_0 (RTCC_DIV_1|RTCC_EXT_H_TO_L); // Timer0 is Counter
set_timer0(0);
set_timer1(15535);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // Timer1 is Timer
enable_interrupts(INT_RTCC);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
count = 0;
lcd_init();
delay_ms(200);
printf(lcd_putchar,"toc do dong co");
}
void main()
{
init();
//setup_adc_ports(NO_ANALOGS);
//setup_adc(ADC_OFF);
//setup_psp(PSP_DISABLED);
//setup_spi(FALSE);
so_vong = 0;// khoi tao gia tri
while(1) // doan chuong trinh hien thi len LCD
{
tinhtoan_hienthi(so_vong);
delay_ms(500);
}
}
chỗ cái hàm timer đó cách tính số vòng như thế nào vậy?
với lại các lệnh tách số đó em nên hiểu như thế nào ?
Em hỏi hơi nhiều nhỉ? hihi. nhưng mà nghĩ ko ra nên đành lên đây hỏi vậy!
em cảm ơn trước ạh!