为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

ATmega128_串口

2011-09-11 18页 doc 62KB 37阅读

用户头像

is_768994

暂无简介

举报
ATmega128_串口引用 ATmega128学习(MOdbus串口通信) 引用 ATmega128学习(MOdbus串口通信) ATmega128 2010-09-03 18:25:55 阅读81 评论0   字号:大中小 订阅   引用 轩辕 的 (原)ATmega128学习(MOdbus串口通信) 软件资料包,软件部分原创,部分来源于网络,用于学习交流之用。所有程序均通过硬件测试完好,有好的建议请留言,给修改意见,以后更好 。  //ATmega128 AU  USART1,波特率9600,modbus协议,单速,1停止位,CRC校验 //编...
ATmega128_串口
引用 ATmega128学习(MOdbus串口通信) 引用 ATmega128学习(MOdbus串口通信) ATmega128 2010-09-03 18:25:55 阅读81 评论0   字号:大中小 订阅   引用 轩辕 的 (原)ATmega128学习(MOdbus串口通信) 软件资料包,软件部分原创,部分来源于网络,用于学习交流之用。所有程序均通过硬件测试完好,有好的建议请留言,给修改意见,以后更好 。  //ATmega128 AU  USART1,波特率9600,modbus,单速,1停止位,CRC校验 //编译器 :ICC7.22 //晶振:11.0592MHZ,,外部高频石英震荡器,启动时间4.1ms //熔丝:扩展位:0xff, 0x19af,加密位:0xff //作者:张奇 //创建时间:2010.07.16 //编写时间: 2010.7.16 //修改时间:2010-7-21 //*********************************************************************** //        初始化去,参数定义区   //*********************************************************************** #include #include #include #include #define  F_CPU 11059200  // 外部晶振11.0592MHz                   #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 send_485       PORTE|=(1<>1;                 CRC_word^=0xa001;               }              else               {                CRC_word>>=1;               }             }       }     return CRC_word; } /******************************************************************************* * 函数名称: USART_Flush( void ) * 函数功能: 刷新通信数据寄存器 * 参数变量: dummy * 全局变量: * 调用函数: * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void USART_Flush( void ) {    unsigned char dummy;   while ( UCSR1A & (1<10进制处理 ,五位 * 参数变量: A1,A2,A3,A4,A5[uchar],temp(uint) * 全局变量: * 调用函数: * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/  void data_do(uint temp_d)//  {      A1=temp_d%10;//?                    A2=(temp_d/10)%10;//      A3=(temp_d/100)%10;   A4=(temp_d/1000)%10;   A5=temp_d/10000;// } /******************************************************************************* * 函数名称: uart1_rx_isr(void) * 函数功能:中断接收多数据 * 参数变量: * 全局变量:usart_rx_data[rx_count], rx_count++; RX_bit; * 调用函数:USART_Flush() * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ #pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC void uart1_rx_isr(void) {    usart_rx_data[rx_count]=UDR1;//接收数据   USART_Flush();//刷新寄存器   rx_count++;//累计接收数据个数   RX_bit=1;//接收中断置位 } /******************************************************************************* * 函数名称: funtion_03() * 函数功能: modbus通信读操作(从机) * 参数变量: * 全局变量: * 调用函数: * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void funtion_03() { ; } /******************************************************************************* * 函数名称: funtion_04() * 函数功能: * 参数变量: * 全局变量: * 调用函数:TX_data_set[i] * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void funtion_04()// { ; } /******************************************************************************* * 函数名称: funtion_06() * 函数功能: modbus通信写操作(从机) * 参数变量: * 全局变量: work_data_do_Tx() * 调用函数:TX_data_set[i] * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void funtion_06()//??? {   ;//EEPROM?????? } /******************************************************************************* * 函数名称: funtion_06() * 函数功能:读故障详细参数 * 参数变量: * 全局变量: * 调用函数: * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void funtion_07() { ; } /******************************************************************************* * 函数名称: send_code_fun() * 函数功能: modbus发送读数据命令函数 * 参数变量:uchar addrs,uchar funtion,uint data_addr,uint data_length * 全局变量: * 调用函数: * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void send_code_fun(uchar addrs,uchar funtion,uint data_addr,uint data_length) {     char i=0;//  data_buf[0]=addrs;//从机地址  data_buf[1]=funtion;//功能码  data_buf[2]=data_addr/256;  data_buf[3]=data_addr%256;//数据地址  data_buf[4]=data_length/256;//  data_buf[5]=data_length%256;//数据长度  CRC_word=get_crc(6);//CRC_word 计算  data_buf[6]=CRC_word%256;//CRC_word 低位  data_buf[7]=CRC_word/256;//CRC_word 高位         for(i=0;i<6+2;i++)      {     usart_tx_data[i]=data_buf[i];//数据放入发送缓存器     USART_Transmit(usart_tx_data[i]);//发送数据   } } /******************************************************************************* * 函数名称:  receive_main() * 函数功能: 接收主函数 * 参数变量: * 全局变量: * 调用函数: * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void receive_main() {     delay_nms(300);  CLI(); //全局中断不使能  rx_count=0;//中断计数器清零  send_485;//485处于发送状态  UCSR1B=0x08; //串口初始化  delay_nms(15);//485响应时间  RX_length=data_buf[2]*256+data_buf[3];//取数据长度数据  RX_CRC_word=data_buf[RX_length+1]*256+data_buf[RX_length];//取CRC校验码  CRC_word=get_crc(RX_length);//计算接收数据校验码  if(CRC_word==RX_CRC_word)//校验数据比较    {         if(data_buf[0]==address||data_buf[0]==televise_add)//地址比较       {                  send_code_fun(1,3,0,1);//发送数据          UCSR1B=0x00; //通信不使能          switch(usart_rx_data[1])//接收数据处理                   {                       case 0x03:funtion_03();break;//???                 case 0x04:funtion_04();break;//                 case 0x06:funtion_06();break;//???                 case 0x07:funtion_07();break;//???                 default:  break;                   }       }     else ;       }    else ;  receive_485;//485处于接收状态     UCSR1B=0x90; //通信寄存器设置  delay_nms(15);//485响应时间  SEI(); //全局中断使能 } /******************************************************************************* * 函数名称: send_data_do(uint do_length) * 函数功能: 发送数据 * 参数变量: * 全局变量: * 调用函数:get_crc(uchar n) , * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void send_data_do(uint do_length) { // // // // //  CRC_word=get_crc(do_length);//CRC_word计算  data_buf[do_length]=CRC_word%256;//CRC_word 低位  data_buf[do_length+1]=CRC_word/256;//CRC_word 高位 } /******************************************************************************* * 函数名称: send_main(uint length) * 函数功能: * 参数变量: * 全局变量: send_data_do(length); * 调用函数:TX_data_set[i] * 作者: 张奇 * 编写时间:10-06-03 * 修改时间: 10—07-20 * 版本:V1.0 *******************************************************************************/ void send_main(uint length) {    uint i_tx=0;    send_485;//487处于发送状态    UCSR1B=0x08; //串行口处于发送    delay_nms(15);//485响应时间    send_data_do(length);//发送数据处理    for(i_tx=0;i_tx
/
本文档为【ATmega128_串口】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索