ATMEGA16单片机usart通信(主从多机通信)proteus仿真与源码

发布者:Meshulun最新更新时间:2020-07-12 来源: 51hei关键字:ATMEGA16  单片机  usart通信  主从多机通信 手机看文章 扫描二维码
随时随地手机看文章

部分单片机源程序如下:

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

This program was produced by the

CodeWizardAVR V2.05.1b Evaluation

Automatic Program Generator

?Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.


Project :

Version :

Date    : 2017/12/21

Author  : Freeware, for evaluation and non-commercial use only

Company :

Comments:



Chip type               : ATmega16

Program type            : Application

AVR Core Clock frequency: 4.000000 MHz

Memory model            : Small

External RAM size       : 0

Data Stack size         : 256

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


#include


flash unsigned char led_7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char point=0;



// External Interrupt 0 service routine

interrupt [USART_RXC] void usart_rx_isr(void)          //接收中断服务

{

  unsigned char status,resh,resl;

  status=UCSRA;

  resh=UCSRB;

  resl=UDR;

  if((status&(1<<4|(1<<3)|1<<2)) ==0)

  {

    resh=(resh>>1)&0x01;

   

    if (resh==0)

    PORTA=led_7[resl];

    else

    PORTA=0x00;

        

  }

#asm("sei")

}

interrupt [EXT_INT0] void ext_int0_isr(void)

{

// Place your code here

while(!(UCSRA&(1<<5)));

UDR=point;

#asm("sei")




}


// Standard Input/Output functions

#include


// Declare your global variables here


void main(void)

{

// Declare your local variables here


// Input/Output Ports initialization

// Port A 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

PORTA=0x00;

DDRA=0xFF;


// Port B 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

PORTB=0x00;

DDRB=0x00;


// Port C 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

PORTC=0x00;

DDRC=0x00;


// Port D 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

PORTD=0x03;

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: 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: 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=0x00;


// 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=0x9d;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;


// Analog Comparator initialization

// Analog Comparator: Off

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

ACSR=0x80;

SFIOR=0x00;


……………………


关键字:ATMEGA16  单片机  usart通信  主从多机通信 引用地址:ATMEGA16单片机usart通信(主从多机通信)proteus仿真与源码

上一篇:ATtiny13 指令执行时序
下一篇:ATmega16读取RTC和ADC显示在LCD1602,同时串口输出

推荐阅读最新更新时间:2024-11-03 11:39

51单片机一种精确的判断脉冲宽度的方法
学到了一种很精确测量脉冲宽度的方法。 具体思想是: 利用定时器的内部资源(当GATE = 1时,计数器的停止和开始受TR和INT的电平共同控制),我们这里用定时器0 ,将外部脉冲接在INT0上,配置定时器0和外部中断0。当脉冲是高电平时,计数器(TH0,TL0)计数,当计数器溢出时,触发定时器中断。当脉冲为下降沿时,触发外部中断,此时停止计数,所记下的时间也就是脉冲的宽度。 代码如下: #include reg51.h #include intrins.h #define uint unsigned int #define uLint unsigned long int //长整型 uLint pulse_w
[单片机]
51<font color='red'>单片机</font>一种精确的判断脉冲宽度的方法
arm单片机的内核结构
ARM芯片的核心,即CPU内核(ARM720T)由一个ARMTTDMI 32位RISC处理器、一个单一的高速缓冲8KB Cache和一个存储空间管理单元(MMU)所构成。8KB的高速缓冲有一个四路相连寄存器,并被组织成52线四字(4×52×4字节)。高速缓冲直接与ARMTTDMI相连,因而高速缓冲来自CPU的虚拟地址。当所需的虚拟地址不在高速缓冲中时,由MMU将虚拟地址转换为物理地址。一个64项的转换旁路缓冲器(TLB)用来加速地址转换过程,并减少页表读取所需的总线传送。通过转换高速缓冲中未存储的地址,MMU就能够节约功率。通过内部数据总线和扩展并行总线,ARM可以和存储器(SRAM/Flash/Nand-Flash等)、用户接口
[单片机]
STC11F32单片机的射频读卡器设计
  引 言   无线射频识别技术(RFID)以其高度安全保密性、通信高速性、使用方便性、成本低等特点而得到快速的普及和推广,现已广泛地应用于各类门禁控制系统、公共交通支付系统、医疗保险系统、停车场管理系统、仓储管理、车辆防盗等方面,并带动了读写器和各类应用产品的开发和推广。本文在分析射频识别系统组成和原理的基础上,提出了基于STC11F32高速单片机和MFRC500芯片的射频读写器设计方案;同时,在该读卡器上扩展了点阵图形液晶LCD和串行存储器W25X80,以及USB芯片CH340T等外围设备。LCD可以显示各种图形和汉字;串行存储器用来存储点阵字库、图形库等;USB芯片使得该读卡器省去了串口和电源供电端口,可以通过USB接口和
[单片机]
STC11F32<font color='red'>单片机</font>的射频读卡器设计
一个通用MCU-51串口通信程序
一个通用MCU-51串口通信程序,以后每次复 制粘贴,程序中调用相应函数既可. #include reg51.h #include string.h unsigned char ch; bit read_flag= 0 ; //初始化串口 void init_serialcom( void ) { SCON = 0 50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr //UART为模式1,8位数据,允许接收 TMOD |= 0 20 ; //TMOD: timer 1, mode 2, 8-bit reload
[单片机]
浅谈分析51,AVR,PIC单片机的区别
我觉得51比较好。因为51是比较标准的复杂指令单片机,通过学习51可以比较全面掌握单片机和通用CPU知识,达到触类旁通的目的(Z80也不错,可惜有些过时了,开发工具也很落后)。而PIC是一种精简指令系统,虽然机器码好懂,但是局限性较大,就是说会过分偏重理解MicroChip的设计思想。其实全面掌握单片机技术较用精某一种芯片来得划算(不要被某一个公司捆住思想)。 类似PIC的芯片很多,比如AVR、MSP430、Z8等,掌握51的结构和指令系统之后理解这些单片机的原理就很容易。而反过来也许就要各个击破。 还有一些理由: 就芯片而言:51单片机有非常低廉的价格和数不胜数的衍生芯片系列,这些产品从低速(1MPS)到高速(30MPS)几乎涵
[单片机]
关于51单片机编程的一些错误总结
(1)这两天一直在受一个问题的干扰,那就是做单片机串口通信的时候,有些数据总是传得不对:当显示0~f这些数字的时候,显示没有错误,而显示其它8位数据的时候都错了,发送11(16进制)时,到单片机上居然是49(十进制),这显然是不对的,一直怀疑是程序的问题,反复地检查和修改之前编的一个数码管动态显示子程序,没有错,那只能是串口初始化和串口子程序有问题了……这么想太错了……先入为主,两天以来,都没解决(其实也没什么心情解决了,又是临近周末,都在看老友记),今天打定一定要解决了,就开始研究,刚开始一直在沿着老路,反复修改程序。。。。后来无意间一瞥,看到晶振上标着“12.000”,瞬间明白所有问题所在,立刻改为11.0592Mhz的晶振,
[单片机]
功耗测量辅助微控制器的选择
当设计工程师为低功耗应用选择微控制器时,芯片厂商的数据手册所提供的帮助是有限的。手册不能提供业界标准的功耗评价方法,也不能说明像高速缓存(Cache)和集成浮点运算单元等功能部件是怎样影响能量消耗和性能的。 当工程师尝试比较包含了片上系统(System-on-chip)的处理器内核时,如何解释这些部件或单元带来的好处成了一个难题。供应商也用芯片的典型消耗电流数值来衡量他们的微控制器,但这种测量几乎不能说明应用运行不同程序的能量消耗。为了解决这个问题,嵌入式处理器基准协会(Embedded Processor Benchmark Consortium——EEMBC)提出了一种在特定载荷下测量能量消耗的方法。本文中我们将以ARM-9为
[单片机]
单片机串口通信笔记(中断复习)
把单片机当做一个APP,中断系统就是其中的一项功能。这个功能强不强大,是衡量一个APP的标准。 这项功能的作用是帮助你处理突发事件的。我们做事都有个优先级。你放在中断系统里的事情肯定是要优先处理的事情,所以当中断触发的时候,单片机要停下它当前做的事,来处理中断中的事。也就是说,单片机要在中断触发时,停止运行主函数里的代码,转而运行中断里的代码。等到中断的代码运行完毕之后,再继续运行主函数的代码。 中断这一项功能是要手动打开的,所以在主函数的一开始就要先打开中断系统的开关。也就是EA=1,EA=0表示关掉所有的中断,EA=1表示打开。 中断可以被6种方式触发,有以下六种。 1.外部中断0,当P3.2口输入低电平时触发 2.外
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved