• PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 16KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2015-06-10 00:50
    上传日期
基于avr的485通信
RS485.zip
  • RS485
  • default
  • dep
  • RS485-2.o.d
    2.5KB
  • RS485.lss
    11.8KB
  • RS485.hex
    1.3KB
  • RS485.eep
    13B
  • RS485.o
    6KB
  • RS485.map
    11.8KB
  • Makefile
    1.9KB
  • RS485.elf
    5.9KB
  • RS485.c
    4.3KB
  • rs485.aws
    107B
  • RS485.aps
    3.3KB
内容介绍
//DMAVR-L的RS485通信示例程序,采用串口1,发送采用查询方式,接收采用中断的方式 //通过串口调试助手将16进制数据发送到系统板,系统板再发回电脑,在串口调试助手中显示出来 //电脑发送和接收的数据格式如09,请选中16进制形式显示,电脑端串口调试助手都是16进制形式 //编译环境 AVR Studio 4.17/AVR GCC //系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms //作者:阿迪 www.avrgcc.com //日期:2011.09.14 //*********************************************************************** // 包含文件 //*********************************************************************** #include <string.h> #include <stdio.h> #define F_CPU 7372800 // 单片机主频为7.3728MHz,用于延时子程序 #include <util/delay.h> #include <avr/io.h rel='nofollow' onclick='return false;'> #include <avr/iom128.h rel='nofollow' onclick='return false;'> #include <avr/interrupt.h rel='nofollow' onclick='return false;'> //中断信号头文件 //*********************************************************************** // 定义变量区 //*********************************************************************** #define Data_IO PORTE //8个发光二极管所在数据口 #define Data_DDR DDRE //方向寄存器 #define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us) #define delay_ms(x) _delay_ms(x) //AVR GCC延时函数 x(ms) #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define baud 9600 //设置波特率的大小 #define baud_setting (uint)((ulong)F_CPU/(16*(ulong)baud)-1) //波特率计算公式 #define baud_h (uchar)(baud_setting>>8) //提取高位 #define baud_l (uchar)(baud_setting) //低位 #define CTR_L PORTD &= ~(1 << PD4) //控制线置低,RS485接收状态 #define CTR_H PORTD |= (1 << PD4) //控制线置高,RS485发送状态 uint tx_count=200,tx_flag=0xff; uchar usart_tx_data; uchar usart_rx_data; //*********************************************************************** // IO端口初始化 //*********************************************************************** void system_init() { Data_IO=0xFF; //数据口为输出 Data_DDR=0xFF; DDRD|= 0x10; } //************************************************************************* // 将收到的串口数据显示到LED发光二极管,可以根据自己的情况更改 //************************************************************************* void Display_usart(uchar Data_Rev) { Data_IO=Data_Rev; } //************************************************************************* // 串口初始化,RS485使用串口1,按照使用串口的方式初始化即可 //************************************************************************* void usart_init() { UCSR1A=0x00; //单倍速模式 UCSR1B=0x98; //接收中断和发送中断允许 UCSR1C=(1<<UCSZ11)|(1<<UCSZ10); //写UCSRC寄存器,异步通信无校验,8位数据1位停止位 UBRR1H=baud_h; //写波特率的值 UBRR1L=baud_l; } //************************************************************************* // 串口相关中断服务子程序 //************************************************************************* //数据发送结束中断向量 SIGNAL(SIG_USART1_TRANS) //中断服务程序 { delay_ms(10); //相关操作 } void usart_send(uchar data) { CTR_H; while ( !(UCSR1A & (1<<UDRE1)) ); UDR1 = data; //接收到的数据再发回电脑 delay_ms(2); CTR_L; } //数据接收结束中断向量 SIGNAL(SIG_USART1_RECV) //中断服务程序 { CTR_L; usart_rx_data=UDR1; //将接收到的数据取出 usart_send(usart_rx_data); //将接收到的数据再发出去 Display_usart(usart_rx_data); //显示接收到的数据直接显示到LED发光二极管 } //************************************************************************* // 主程序 //************************************************************************* int main(void) { system_init(); //系统初始化 usart_init(); //usart串口初始化配置 usart_tx_data=0x88; //开机显示200个0x88 CTR_L; SREG|=0x80; //开启全局中断 while(1); }
评论
    相关推荐