0% found this document useful (0 votes)
24 views13 pages

CODEAVRMAU

AVR

Uploaded by

n21dcvt066
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
Download as docx, pdf, or txt
0% found this document useful (0 votes)
24 views13 pages

CODEAVRMAU

AVR

Uploaded by

n21dcvt066
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1/ 13

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.0 Professional

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 12/23/2023

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 <string.h>

#include <delay.h>

// Alphanumeric LCD Module functions

#include <alcd.h>

unsigned long nhietdo,ADC,VOLT;

unsigned char hangdvi,hangchuc;

#define ADC_VREF_TYPE 0x00


// Read the AD conversion result

unsigned int 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; //ADCSRA=ADCSRA | 0x40;

// Wait for the AD conversion to complete

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

PORTB.0 =~ PORTB.0;

#ifndef RXB8

#define RXB8 1

#endif

#ifndef TXB8

#define TXB8 0

#endif
#ifndef UPE

#define UPE 2

#endif

#ifndef DOR

#define DOR 3

#endif

#ifndef FE

#define FE 4

#endif

#ifndef UDRE

#define UDRE 5

#endif

#ifndef RXC

#define RXC 7

#endif

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<DOR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer

#define RX_BUFFER_SIZE 8

char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE <= 256


unsigned char rx_wr_index,rx_rd_index,rx_counter;

#else

unsigned int rx_wr_index,rx_rd_index,rx_counter;

#endif

// This flag is set on USART Receiver buffer overflow

bit rx_buffer_overflow;

// USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void)

char status,data;

status=UCSRA;

data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

rx_buffer[rx_wr_index++]=data;

#if RX_BUFFER_SIZE == 256

// special case for receiver buffer size=256

if (++rx_counter == 0)

#else

if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;

if (++rx_counter == RX_BUFFER_SIZE)

rx_counter=0;

#endif

rx_buffer_overflow=1;

//vi tri dat code nhan led


if(data=='A'){

PORTC.0=1;

}else if(data=='B'){

PORTC.0=0;

}else if(data=='C'){

PORTC.1=1;

}else if(data=='D'){

PORTC.1=0;

}else if(data=='E'){

PORTC.2=1;

}else if(data=='F'){

PORTC.2=0;

}else if(data=='G'){

PORTC.3=1;

}else if(data=='H'){

PORTC.3=0;

}else if(data=='I'){

PORTC.4=1;

}else if(data=='J'){

PORTC.4=0;

}else if(data=='K'){

PORTC.5=1;

}else if(data=='L'){

PORTC.5=0;

}else if(data=='M'){

PORTC.6=1;

}else if(data=='N'){

PORTC.6=0;

}else if(data=='O'){

PORTC.7=1;

}else if(data=='P'){
PORTC.7=0;

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

char getchar(void)

char data;

while (rx_counter==0);

data=rx_buffer[rx_rd_index++];

#if RX_BUFFER_SIZE != 256

if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;

#endif

#asm("cli")

--rx_counter;

#asm("sei")

return data;

#pragma used-

#endif

// USART Transmitter buffer

#define TX_BUFFER_SIZE 8

char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE <= 256

unsigned char tx_wr_index,tx_rd_index,tx_counter;

#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;

#endif

// USART Transmitter interrupt service routine

interrupt [USART_TXC] void usart_tx_isr(void)

if (tx_counter)

--tx_counter;

UDR=tx_buffer[tx_rd_index++];

#if TX_BUFFER_SIZE != 256

if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;

#endif

#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART Transmitter buffer

#define _ALTERNATE_PUTCHAR_

#pragma used+

void putchar(char c)

while (tx_counter == TX_BUFFER_SIZE);

#asm("cli")

if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))

tx_buffer[tx_wr_index++]=c;

#if TX_BUFFER_SIZE != 256

if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;

#endif

++tx_counter;
}

else

UDR=c;

#asm("sei")

#pragma used-

#endif

// Standard Input/Output functions

#include <stdio.h>

// Timer1 overflow interrupt service routine

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

// Reinitialize Timer1 value

TCNT1H=0xD2;

TCNT1L=0x39;

PORTB.1 =~ PORTB.1;

// Declare your global variables here

void main(void)

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;
DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out

// State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=0

PORTB=0x00;

DDRB=0x03;

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=T

PORTD=0x00;

DDRD=0x02;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock


// Clock value: 7.813 kHz

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 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/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: On

// INT0 Mode: Falling Edge

// INT1: Off

// INT2: Off

GICR|=0x40;

MCUCR=0x02;

MCUCSR=0x00;

GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x04;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=0x00;

UCSRB=0xD8;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;
// ADC initialization

// ADC disabled

ADCSRA=0x00;

// 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 - PORTA Bit 1

// RD - PORTA Bit 2

// EN - PORTA Bit 3

// D4 - PORTA Bit 4

// D5 - PORTA Bit 5

// D6 - PORTA Bit 6

// D7 - PORTA Bit 7

// Characters/line: 16

lcd_init(16);

// Global enable interrupts

#asm("sei")

while (1)

// ADC initialization
// ADC Clock frequency: 1000.000 kHz

// ADC Voltage Reference: AREF pin

// ADC Auto Trigger Source: ADC Stopped

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x83;

ADC=read_adc (0);

VOLT=ADC*5000/1023;

nhietdo=VOLT/10;

hangchuc=nhietdo/10;

hangdvi=nhietdo%10;

lcd_gotoxy(0,0);

lcd_puts("NHIET DO: ");

lcd_gotoxy(9,0);

lcd_putchar(hangchuc+0x30);

lcd_putchar(hangdvi+0x30);

You might also like