• lvshiping
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 130
    下载次数
  • 2010-05-12 23:50
    上传日期
WINAVR中编写的AVR单片机485通讯程序,已经测试通过。
AVR_RS485.rar
  • AVR_RS485.c
    3KB
内容介绍
/********************************************** 工程名称:485通讯接口测试程序 控 制 器: ATmega16 说 明:CPU通过串口接RS485发送数据,终端PC机通过 RS485转RS232转换器接入PC机,使用串口调试 助手发送数据并接收数据。 端口配置: CPU RS485 RXD RO TXD DI PD2 DE,/RE **********************************************/ #include <avr/io.h rel='nofollow' onclick='return false;'> #include <util/delay.h> #include <avr/interrupt.h rel='nofollow' onclick='return false;'> #define uchar unsigned char #define uint unsigned int //常量声明 #define BAUD 9600 volatile uchar rdata; volatile uint8_t flag=0; volatile uint8_t n=0; /******************************************* 函数名称: port_init 功 能: 端口初始化 参 数: 返回值 : 无 ********************************************/ void port_init(void) { //USART的接收端口为PD0,发送端口为PD1, //PD2=0 485芯片的/RE端口使能,PD2=1 485芯片的DE端口输出驱动使能 PORTD = 0x00; DDRD |= (1 << PD1); //PD1为发送端口,置为输出 DDRD |= (1 << PD2); //PD2为485接收发送使能,置1为可输出 } /******************************************* 函数名称: uart_init 功 能: 计算波特率,可任意设置 参 数: 返回值 : 无 ********************************************/ void uart_init(void) { UCSRB=0x00; UCSRA=0x00; //控制寄存器清零 UCSRC = (1<<URSEL)|(0<<USBS)|(0<<UPM0)|(3<<UCSZ0);//设置帧格式: 8 个数据位, 1 个停止位,异步模式,禁止校验 UBRRL = (F_CPU / BAUD / 16 - 1) % 256; //波特率设置 UBRRH = (F_CPU / BAUD / 16 - 1) / 256; UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); //接收、发送使能,接收中断使能 SREG=_BV(7); //全局中断开放 } /******************************************* 函数名称: uart_sendB 功 能: 发送数据 参 数: 返回值 : 无 ********************************************/ void uart_sendB(uchar data) { while(!(UCSRA&(_BV(UDRE)))); UDR=data; while(!(UCSRA&(_BV(TXC)))); UCSRA|=_BV(TXC); } ISR(USART_RXC_vect) { UCSRB &= ~_BV(RXCIE); rdata=UDR; flag=1; UCSRB|=_BV(RXCIE); } /***************************************************************************************************** ;* 函数名称 : UART0_Puts ;* 描 述 : 串口发送字符串 ;* 输  入 : *Str: 字符串 ;* ;* 输  出 : 无 ****************************************************************************************************/ void UART_Puts(uchar *Str) { while (*Str) //字符串未结束则继续发送 { uart_sendB(*Str++); } } /******************************************* 函数名称: main 功 能: 完成异步串口接收数据,并返回给PC机(用串口调试助手) 参 数: 返回值 : 无 ********************************************/ int main(void) { port_init(); uart_init(); //初始化串口,设置波特率 PORTD |= _BV(PD2); // _delay_ms(2); UART_Puts("\r\n你发送的字符串是:");//发送字符串 _delay_ms(2); PORTD &= ~_BV(PD2); while(1) { if(flag) { PORTD |= _BV(PD2); // _delay_ms(2); uart_sendB(rdata); _delay_ms(2); PORTD &= ~_BV(PD2); flag=0; //清收到新数据标志位 } } }
评论
    相关推荐
    • PM11CSBE.zip
      Winavr source code, special hardware, PM10. if you need schematic please an email. LCD 128x64, AT45DB321, CS5532, AT keyboard, ATMega1280, 3xRS232, 1xRS485, RTC.
    • IIC2RS485.rar
      RS485总线转IIC总线的代码,以前调试四轴飞行器时用的工具,开发环境为WINAVR,单片机为MEGA16.
    • ATMega8.rar
      Atmel Studio 6.0 编写 串口升级 bootloader 程序 试用于AT Mega8 其他单片机需要自己手动修改
    • BACNet(适用于楼宇自动化和各种控制网络的协议栈)
      BACNet是在美国供热、冷藏、空调工程师协会(ASHRAE)的帮助下开发的协议栈。目前是美国国家标准、欧洲标准、ISO标准,在世界上有超过30个国家将它作为国家标准。
    • avrub_en_31.zip
      This is a avrusb project for study
    • MFirmwareISO14443A_em原厂下载的代码
      MFirmwareISO14443A_em原厂下载的...自己用winAVR建立工程能编译通过,原厂有配套的硬件。你也可以到EM原厂网站注册下载。我猜这个芯片自己用算法能做出MF1卡的认证,可以软件读里面的加密扇区。有喜欢研究的可以试试。
    • 单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序暂缺)
      1.2 AVR Studio+WinAVR开发环境安装及应用 1.3 AVR-GCC程序设计基础 1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:...
    • 单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序)
      1.2 AVR Studio+WinAVR开发环境安装及应用 1.3 AVR-GCC程序设计基础 1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:...
    • avrub_cn.zip
      附件为avr单片机的bootloader简单例程,可解压使用
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路