chào mọi người, mình viết một cái code đơn giản thế này thôi. mình cho xung vào chân T1 của atmega16, khi có xung vào chân T1 thì một biến sẽ tăng dần giá trị,
mình sử dụng ngắt tràn ở timer1 để cứ 1s thì sẽ in ra giá trị đó ra lcd,
nhưng kô hiểu sao nó chạy linh tinh kinh khủng
mọi người xem giúp mình với nhé
thank
mình sử dụng ngắt tràn ở timer1 để cứ 1s thì sẽ in ra giá trị đó ra lcd,
nhưng kô hiểu sao nó chạy linh tinh kinh khủng
PHP Code:
/****************************************************
Chip type : ATmega16
Program type : Application
Clock frequency : 12.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <stdio.h>
unsigned long ulSo_xung=0;
unsigned char tick = 0;
char buff[33];
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
//dat gia tri cho timer1
TCNT1H = 0xD239>>8;//timer1 se bat dau dem tu gia tri
TCNT1L = 0xD239&0xFF ;
tick++;
if(tick >= 1)
{
#asm("cli");
tick = 0;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Tan So La:");
lcd_gotoxy(0,1);
sprintf(buff," %d%d%d%d",ulSo_xung/1000,(ulSo_xung%1000)/100,(ulSo_xung%100)/10,ulSo_xung%10);
lcd_puts(buff);
ulSo_xung = 0;
#asm("sei");
}
}
// Declare your global variables here
void main(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xD2;
TCNT1L=0x39;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
/
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
// doạn chương trình này để nhận dạng một xung đầu vào
// Place your code here
if (PINB.1 ==1) {
while(PINB.1 == 0)
ulSo_xung++;
}
};
}
thank
Comment