• PUDN用户
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 2
    下载次数
  • 2016-09-01 15:54
    上传日期
基于AVR单片机的RS485通讯程序编写,使用ICCAVR软件编写
AVR-Rs485.zip
  • Rs485
  • Rs485.c
    1.8KB
  • Rs485.h
    330B
内容介绍
#include "..\..\App\include.h" static uint16 u16BaudSet; static void rs485_io_init(void); static void rs485_config(uint16 u16Baud); static void rs485_send_char(uint8 u8Char); static bool rs485_send_string(uint8 *u8Buff,uint8 u8Length); static uint16 rs485_crc_check_val(uint8 *u8Buff,uint8 u8Length); static uint8 rs485_add1_check_val(uint8 *u8Buff); void rs485_init(void) { rs485_io_init(); rs485_config(9600); } static void rs485_io_init(void) { DDRD|=0x1E; PORTD&=0xE0; DDRD&=~BIT(PD2); } static void rs485_config(uint16 u16Baud) { UCSR1A=0X00; UCSR1B=0X00; UCSR1B=(1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1); UCSR1C=(1<<UCSZ11)|(1<<UCSZ10); u16BaudSet=fclk/16/u16Baud-1; UBRR1L=u16BaudSet; UBRR1H=u16BaudSet>>8; } static void rs485_send_char(uint8 u8Char) { RS485_WR; delay_ms(1); while(!(UCSR1A|(1<<UDRE1))); UDR1=u8Char; while(!(UCSR1A|(1<<TXC1))); UCSR1A|=BIT(TXC1); delay_ms(1); RS485_RE; } static bool rs485_send_string(uint8 *u8Buff,uint8 u8Length) { uint8 cnt; if(u8Buff == null) { return false; } for(cnt=0;cnt<u8Length;cnt++) { rs485_send_char(*(u8Buff+cnt)); } return true; } static uint16 rs485_crc_check_val(uint8 *u8Buff,uint8 u8Length) { uint16 crc_value=0XFFFF; uint16 i; while(u8Length--) { crc_value^=*u8Buff++; for(i=0;i<8;i++) { if(crc_value & 0x0001) { crc_value>>=1; crc_value^=0xA001; } else { crc_value>>=1; } } } return crc_value; } static uint8 rs485_add1_check_val(uint8 *u8Buff) { uint8 u8CheckNum=0; while(*u8Buff!=null) { u8CheckNum+=*u8Buff; u8Buff++; } u8CheckNum=~u8CheckNum+1; return u8CheckNum; } void rs485_led_flash(void) { RS485_LED_ON; delay_ms(50); RS485_LED_OFF; delay_ms(50); }
评论
    相关推荐