Kết quả 1 đến 5 của 5
-
11-04-2014, 08:16 PM #1
Silver member
- Ngày tham gia
- Apr 2016
- Bài viết
- 0
help ngắt timer & 3Lm35 + atmega16
anh chị kiểm tra giúp e với. code này ko báo lỗi trong codevision nhưng vào proteus nó ko chạy ạ. ngày mai e thuyết trình mất rồi.
Đề tài: Nghiên cứu bộ Timer 0 (8bit) trong ATMEGA16 và ngắt Timer. Thiết kế mạch VĐK ATMEGA16 đọc 3 cảm biến LM35 vào 3 kênh. Dùng ngắt Timer 0 để cho phép mỗi 2s đọc lần lượt các kênh ADC và hiển thị nhiệt độ ra LCD.
Mã:/***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. HP InfoTech - CodeVisionAVR C Compiler Project : Version : Date : 11/4/2014 Author : NeVaDa Company : Comments: Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 8.000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega16.h> #include <delay.h> // Alphanumeric LCD Module functions #include <alcd.h> #define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 4 unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; #define ADC_VREF_TYPE 0x00 int t1,t2,t3; int i; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here TCNT0=0x04; // Khoi tao gia tri ban dau cho TIMER0 =4 i++; // moi lan ngat tran thi i tang len 1 if(i==80){PORTA.0^=1;i=81; }; // khi dem den 91 thi dao trang thai PORTA.0 gán i=0 de bat dau lai if(i==160) {PORTA.1^=1;i=161;}; if(i==240){PORTA.2^=1;i=0;} } // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } void hienthilcd(int so,char x,char y) { char tram,chuc,dv; tram=so/100; chuc=(so%100)/10; dv=(so%10); lcd_gotoxy(x,y); lcd_putchar(tram+48); lcd_putchar(chuc+48); lcd_putchar(dv+48); } // Declare your global variables here void main(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected PORTA=0x00; DDRA=0x07; TCCR0=0x05; //Dung xung clock lck I/O= 1024 ( CS00=1, CS01=0 và CS02=1) TCNT0=0x04; // Khoi tao timer0 =4 OCR0=0x00; TIMSK=0x01; // cho phep ngat tran timer 0 #asm("sei") // cho phep ngat toan cuc // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // USART initialization // USART disabled UCSRA=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: ADC Stopped // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; // Alphanumeric LCD initialization // Connections specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 16 lcd_init(16); // Global enable interrupts #asm("sei") while (1) { // Place your code here t1=(adc_data[0])/2; t2=(adc_data[1])/2; t3=(adc_data[2])/2; hienthilcd(t1,0,0); hienthilcd(t2,5,0); hienthilcd(t3,10,0); } }
[IMG]http://*************/attachments/44375/[/IMG]
View more random threads:
- Nỗ lực triệt phá tín dụng đen ngay đầu năm mới 2020
- Những yếu tố cần thiết để chơi xì dách hay nhất
- nhở mọi người tư vấn hệ thống băng chuyền sản xuất phân loại sản phẩm
- mobile robot
- muốn tìm con plc này
- Ai có kinh nghiệm định hướng giúp mình với.
- Trả lời câu hỏi Chữa yếu sinh lý không cần thuốc ĐƠN GIẢN chưa
- Mong các anh giúp em, gấp lắm rồi ạ...
- giúp mình địa chỉ mua ic ở nhật tảo với
- Hỏi về Psim
-
11-04-2014, 08:48 PM #2
Silver member
- Ngày tham gia
- Apr 2016
- Bài viết
- 0
Mình không hiểu ý tưởng của bạn lắm. Tại sao lại PORTA.0^=1;
-
11-04-2014, 08:53 PM #3
Junior Member
- Ngày tham gia
- Jun 2016
- Bài viết
- 0
PORTA.0^=1. để nó thay đổi giá trị đó bạn. giống như là cho con Led mỗi 2s sáng 1 lần, thay vì con led mình cho Lm35 mỗi 2s lấy 1 lần giá trị
-
11-04-2014, 09:04 PM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi Bùi Tuấn Vũ
Mình thấy bạn có hàm read_adc mà sao không dùng?
-
11-04-2014, 11:26 PM #5
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi dangsonbk
Cắt môi bé bao lâu thì quan hệ...
Hôm nay, 09:45 AM in Rao vặt tổng hợp