历史上的今天

今天是:2024年11月16日(星期六)

2019年11月16日 | avr单片机双通信C程序

发布者:Chanhero 来源: 51hei关键字:avr  单片机  双通信 手机看文章 扫描二维码
随时随地手机看文章

将下面2个程序分别烧录进2个单片机中.

单片机U1

//ICC-AVR application builder : 2013-6-14 10:17:58

// Target : M16

// Crystal: 8.0000Mhz

#include

#include

#define LED1_ON PORTD|=(1<#define LED1_OFF PORTD&=~(1<#define LED2_ON PORTD|=(1<#define LED2_OFF PORTD&=~(1<//共阳极数码管

unsigned char table[]={0XC0,0XF9,0XA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8e};

unsigned char count=0,count_h,count_l;

unsigned char a=0,cnt,cnt1;

unsigned char key,count_temp;

void port_init(void)

{

 PORTA = 0xFF;

 DDRA  = 0x00;

 PORTB = 0xFF;

 DDRB  = 0x00;

 PORTC = 0xFF; //m103 output only

 DDRC  = 0xFF;

 PORTD = 0xFF;

 DDRD  = 0x32;

}

//TIMER0 initialize - prescale:256

// WGM: Normal

// desired value: 0.005Sec

// actual value:  0.005Sec (0.2%)

void timer0_init(void)

{

 TCCR0 = 0x00; //stop

 TCNT0 = 0x64; //set count

 OCR0  = 0x9C;  //set compare

 TCCR0 = 0x04; //start timer

}

#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF

void timer0_ovf_isr(void)

{

    a++;

 TCNT0 = 0x64; //reload counter value

}

//UART0 initialize

// desired baud rate: 9600

// actual: baud rate:9615 (0.2%)

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;

}

#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC

void uart0_rx_isr(void)

{

 //uart has received a character in UDR

    unsigned char udr0;

 udr0=UDR;

 count_temp=udr0;

}

//call this routine to initialize all peripherals

void init_devices(void)

{

 //stop errant interrupts until set up

 CLI(); //disable all interrupts

 port_init();

 timer0_init();

 uart0_init();

 MCUCR = 0x00;

 GICR  = 0x00;

 TIMSK = 0x01; //timer interrupt sources

 SEI(); //re-enable interrupts

 //all peripherals are now initialized

}

//发送数据uart0_TX

//函数功能:把要发送的数据data送到发送数据缓存器UDR中,然后发送出去

void uart0_TX(unsigned char data)

{

     while(!(UCSRA&(1<  UDR=data;

}

//8M晶振频率下的延时一毫秒

void delay(unsigned int k)

{

    unsigned int m,n;

 for(m=0;m {

     for(n=0;n<1140;n++)

  {;}

 }

}

//数码管显示函数

void display(void)

{

    count_h=count/10;

 count_l=count%10;

 PORTC=table[count_h];

 LED1_ON;

 delay(1);//这个延时很重要,不加的话CUP运行过快将会导致LED数码管无法显示;

 LED1_OFF;

 PORTC=table[count_l];

 LED2_ON;

 delay(1);

 LED2_OFF;

}

//主函数

void main(void)

{

    init_devices();

 while(1)

 {

     key=PINB;

  uart0_TX(key);

  display();

  switch(count_temp)

  {

      case 1: TIMSK = 0x01;break;

   case 2: TIMSK = 0x00;break;

   case 3: count=0X00;TIMSK = 0x01;break;

  }

  if(a==150)

  {

      a=0;

   if(count==59)

   { count=0; }

   else { count++; }

  }

 }

}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

单片机U2


 //ICC-AVR application builder : 2013-6-14 10:31:18

// Target : M16

// Crystal: 8.0000Mhz

#include

#include

unsigned char led_dis;

unsigned char count_temp,cnt1,cnt=1;

void port_init(void)

{

 PORTA = 0x00;

 DDRA  = 0x00;

 PORTB = 0xFF;

 DDRB  = 0xFF;

 PORTC = 0x00; //m103 output only

 DDRC  = 0x00;

 PORTD = 0xFF;

 DDRD  = 0x02;

}

//UART0 initialize

// desired baud rate: 9600

// actual: baud rate:9615 (0.2%)

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;

}

#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC

void uart0_rx_isr(void)

{

 //uart has received a character in UDR

 unsigned char udr0;

   udr0=UDR;

   led_dis=udr0;

}

#pragma interrupt_handler int0_isr:iv_INT0

void int0_isr(void)

{

 //external interupt on INT0

    cnt++;

 if(cnt==1)

 {  

     count_temp=1;

    }

 else if(cnt==2)

 {

     count_temp=2;

  cnt=0;

 }

}

#pragma interrupt_handler int1_isr:iv_INT1

void int1_isr(void)

{

 //external interupt on INT1

     count_temp=3;

}

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

 GICR  = 0xC0;

 TIMSK = 0x00; //timer interrupt sources

 SEI(); //re-enable interrupts

 //all peripherals are now initialized

}

//发送数据函数

void USART_TX(unsigned char data)

{

    while(!(UCSRA&(1< UDR=data;

}

//主函数

void main(void)

{

    init_devices();

 while(1)

 {

     cnt1=count_temp;

  USART_TX(cnt1);

  PORTB=led_dis;

 }

}


关键字:avr  单片机  双通信 引用地址:avr单片机双通信C程序

上一篇:AVR单片机8路AD如何采样
下一篇:基于m128的LCD1602驱动(8线/4线)

推荐阅读

  一个工作日的下午五点,在惠州——中国广东省一个湖泊星罗棋布的城市,工人们涌出比亚迪制造工厂,一天的工作过后他们看起来有些疲惫。很多人径直来到工厂前排着队的拥挤的路边摊,享用下班后的面条和饮料。  “不管我们加班多久,我们仍然缺少人手,”一名工人说。  比亚迪惠州工厂的繁重工作只是该工厂生产的产品——电动汽车电池需求增长的一个...
(文章来源:江苏博实碳) 机械手臂在机器人领域应用较为广泛,常用于工业制造、生产、医疗设备等众多领域。虽然机械手臂的轴数和形态各不相同,但都是接受指令,然后精准定位到某一点进行操作的。要求机械手臂在工作中要在承受自重和抓取工件最大重量的情况下将工件准确无误地放置在固定位置上,碳纤维机械手臂的应用也就应运而生。 碳纤维机械手臂...
近日,TI杯2020年省级大学生电子设计竞赛(以下简称“省赛”)在各合作赛区落下帷幕,全国各校的顶尖人才激烈角逐,经过四天三夜如火如荼的比赛,由各省赛区专家组评选出了相应奖项的优胜者。省赛吸引了来自全国包括黑龙江、辽宁、天津、陕西、四川、湖北、山东、江苏、上海、浙江、重庆、湖南、福建、广西等17个省市赛区的616所院校报名参加,共计10,710...
据IT之家网友 @Kane-W 与 @李云龙师长 投稿,三星已为国行 Galaxy S21 系列用户推出了 One UI 4.0 的 Beta3 预览版本。  Beta3 版本的版本号为 ZUKA,具体版本号为:  G9980ZCU2ZUKA/G9980CHC2ZUKA/G9980ZCU2ZUKA  本次更新大小为 422.82MB,主要是进行了一些 Bug 修复。提高三星键盘功能的稳定性改善主界面动画效果并提高功...

史海拾趣

问答坊 | AI 解惑

A System Evaluation of CAN Transceivers

A System Evaluation of CAN Transceivers…

查看全部问答∨

PCB设计中经典技巧总结(二)

1.Protel VS PowerPCB    曾和PADS的工程师一块工作过半个月,当时我做Protel的技术支持,我们两家下一步可能都要做Veribest的代理,所以遇到一起了。听说PADS有不少很顺手的功能,用惯了上瘾,问那个哥儿们是不是这样,人家很谦虚,说 ...…

查看全部问答∨

关于在Marvell PXA310上USB HOST PORT3 的问题

我在 310 上可以正常使用 USB HOST PORT 2 (OTG) ,但是使用 USB HOST PORT 3 时,终端输出如下信息 <6>usb 1-3: new full speed USB device using pxa27x-ohci and address 84   usb 1-3: device descriptor read/64, error -62 ...…

查看全部问答∨

如何在VxWorks中添加应用程序!

我在usrApp中添加应用程序后总是在编译时出现 dld: warning: Undefined symbol \'IVEC_TO_INUM\' in file \'partialImage.o\' dld: Undefined symbols found - no output written 不知道是怎么回事?…

查看全部问答∨

大家申请的TI48元的LM3S8962的的板子是发的什么快递啊?

&nbsp;大家申请的TI48元的LM3S8962的的板子是发的什么快递啊?…

查看全部问答∨

CCSv4的TI的培训视频链接

现在很多芯片只能在CCSv4上支持,但是CCSv4已经和CCSv3.3是完全不同的架构,是基于eclipse架构的。所以调试界面与CCSv3.3是完全不同的。 TI有CCSv4的培训视频链接http://e2e.ti.com/cn/media/p/2090.aspx。 主要还是需要亲自调试,多使用。个人觉 ...…

查看全部问答∨

做个ARM系统,片内有64KRAM,还需要再外接一个RAM吗?

用STM32F103zet6做个zigbee手抄器板子,cpu内部有64k的ram,还需要再外接一个ram吗?…

查看全部问答∨

和ZigBee无线自组网相比WiMi-net无线自组网的优势

关于ZigBee技术,我们都知道ZigBee是一种技术规范,是一类产品的统称。由于ZigBee本身是一个非常庞大的体系,  不同实现厂家由于编码水平不同,对于ZigBee规范理解的不同,异常处理机制健壮程度不同,在特定的情况下其链路的智能程度也 ...…

查看全部问答∨

ZigBee协调器网络的建立

ZigBee协调器网络的建立 一、协调器网络的建立      1、 网络的格式化           A:初始化的能量阀值为16。通过设置ZDApp_event_loop任务中的事件ID为ZDO_NETWORK_INIT以便执行B。   ...…

查看全部问答∨

求助:一个关于PIC16F74的问题

小弟初学单片机,菜鸟一枚,最近写了一个无线通信的程序,用的是PIC16F74,RA3作为无线信号接收脚,平时电平为2.5V左右,程序是这样的:先检测2ms的低电平,再检测高电平,然后开始解码。可是我上电以后什么信号都没发就老是直接开始解码了,测RA3 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

更多每日新闻
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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