// Target : M16
// Crystal: 8.0000Mhz
//AVR单片机atmega16串口中断接收和发送程序。接收到字符后再发送出去
#include
#include
unsigned char com_in_buf[1];
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}
void send_data(unsigned char back)
{
while( !( UCSRA & (1<
UDR=back;
}
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
//uart has received a character in UDR
com_in_buf[0]=UDR;
send_data(com_in_buf[0]);
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
uart0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
char j;
init_devices();
while(1)
{
for(j=1;j<100;j++)
;
}
}
关键字:AVR单片机 atmega16 串口中断
引用地址:
AVR单片机atmega16串口中断接收和发送程序
推荐阅读最新更新时间:2024-03-16 15:05
Atmega16的定时器0使用
//经验正以下程序是正确的,可以实现LED 1s亮 1s灭 #include avr/io.h #include avr/interrupt.h #define uchar unsigned char #define uint unsigned int uint count; void init() { DDRB|=_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7); PORTB&=~(_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7)); TCNT0=155;//初值为55,即记数到255-155=100次溢出并进入定时器0中断函数 TIMSK|=_BV(TOIE0);//溢出中
[单片机]
AVR单片机教程——蜂鸣器
引子 定时/计数器(简称定时器)是单片机编程中至关重要的一部分,再简单的单片机也会带有定时器。 也许你会觉得我们已经在delay函数中接触过定时器了,然而并不是,它只是软件地通过“浪费时间”来实现延时。我们接触定时器在数码管中,segment_auto函数可以自动完成动态扫描,好像在main函数背后又开了一个线程,两者并行执行一样。这就用到了定时器中断。 中断是一种必要的程序流程控制方法,但这两讲我们先聚焦于利用定时器来输出波形。 本讲中,我们用定时器来输出一定频率的方波,让蜂鸣器发出声音。 定时/计数器 ATmega324PA提供了3个定时器:定时器0、定时器1、定时器2。其中,定时器0和2都是8位的,定时器1是
[单片机]
AVR单片机新手避免锁死的方法
新手尽量不要设定熔丝,但是下载程序又必须设定一些,因此下面这些显得十分必要: 1、针对新买的AVR,它的内部没有程序,在电路板第一次通电写程序前设置与实际工作相符的熔丝位。特别是没有外部晶振时设置成外部时钟那肯定必死无疑。 2、如果AVR已有程序,且之前没有用外部晶振电路,中途想加外部晶振怎么办,焊接好外部晶振后,不要急着修改熔丝位,否则后果你懂得。先在内部RC工作模式下清除FLASH程序,然后再将熔丝位修改成外部晶振时钟。 3、如果熔丝锁死已经发生,没办法,要么用高压编程,要么自己买个大于4M的有源晶振(4个脚)直接给AVR提供时钟解锁。
[单片机]
基于AVR单片机的电冰箱控制系统的设计
多年来电冰箱在国内市场上一直作为储物、保鲜的空间,人们对于电冰箱的需求也是最基本的冷冻、冻藏等功能。近年来,随着家用电冰箱的普及以及80后主流消费群体的迅速崛起,人们对电冰箱的性能要求越来越高,加速了对电冰箱功能和需求的转型和升级,相应地对电冰箱的控制功能要求也越来越高。 单片机自问世以来,性能不断提高,功能不断增多和完善,加之具有集成度高、功能强、速度快、体积小、功耗低、使用方便、性能可靠、价格低廉等特点,因此,广泛应用在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域,基于AVR单片机的电冰箱控制系统的设计把单片机技术充分利用在电冰箱的控制系统上,为现代电冰箱的发展提供技术支撑。 1 系统总体设
[单片机]
嵌入式学习笔记18——AVR单片机之熔丝位设置
1.熔丝位简介: 熔丝位状态为 1 表示未编程,熔丝位状态为 0 表示编程,因为在AVR的器件手册中是使用已编程和未编程定义熔丝位的。 AVR单片机的熔丝位是可以多次编程的。 AVR单片机芯片加密锁定之后(LB2/LB1=1/0,0/0)不能通过任何方式读取芯片内部的Flash和EEPROM的数据。 下载编程的正确步骤是:下载运行代码和数据,配置相关的熔丝位,最后配置芯片的加密位。 2. AVR单片机加密熔丝位的设置 3. 功能熔丝位的设置 4. Bootloader熔丝位简介 5. 系统时钟源选择熔丝位 6. 使用外部晶体时的工作模式设置 7.
[单片机]
AVR单片机I/O口使用的几个注意事项
简介:AVR单片机I/O口使用的几个注意事项 1.先正确设置DDRx方向寄存器,再进行I/O口的读写操作。 2.I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效,外部引脚呈现三态高阻输入状态。 3.当I/O口工作在输入方式时,且要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。 4.当I/O工作在输入方式时,要根据实际情况使用或不使用内部的上拉电阻。 5.一旦将I/O口的工作方式由输出设置成输入方式后,必须等待1个时钟周期后才能正确读到外部引脚PINxn的值。
[单片机]
AVR单片机定时器T0的基本中断使用ICCAVR
#include iom128v.h void main(void) { TCNT0=0x83; TCCR0=0x07; TIMSK=0x01; SEI(); DDRC=0xff; PORTC=0; OCR0=0X00; while(1); } #pragma interrupt_handler Timer0:iv_TIMER0_OVF void Timer0() { TCNT0=0x83; PORTC=~PORTC; } 得出一个结论:别指望巧合。
[单片机]
基于AVR单片机多任务嵌入式Internet系统设计
1 引言 目前,嵌入式系统已经广泛渗透到人们的工作、生活中。从家用电器、信息终端、手持通信设备到仪器仪表、制造工业、过程控制等领域,嵌入式设备已随处可见。另一方面,近几年来Internet技术的飞速发展给嵌入式应用带来了新的契机,在未来嵌入式系统中应用Internet技术具有很大的优势。 目前嵌入式Internet技术的实现主要有下面三种方式 : 第一种方式是EMIT技术,采用支持TCP/IP协议的高性能服务器作为网关(emGateway), 嵌入式设备通过RS-232、RS-485或者CAN总线等与网关服务器连接,间接通过服务器网关连接Internet。经过多年的发展EMIT技术已经在工业设备的网络化中得到了广
[应用]