在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → atmega128 串口通讯(RS485.c)

atmega128 串口通讯(RS485.c)

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:5.90KB
  • 下载次数:11
  • 浏览次数:355
  • 发布时间:2020-11-15
  • 实例类别:嵌入式开发
  • 发 布 人:whw197910
  • 文件格式:.c
  • 所需积分:2
 相关标签: 串口通讯 ATM GA 串口 12

实例介绍

//DMAVR-L型开发板RS485通信实验,程序具有收发一体的功能
//RS485之间通过双绞线连接,如果距离近,可以不使用120欧电阻匹配
//将2个DMAVR-L板子通过导线(双绞线、杜邦线等)连接,连接方式为A-A,B-B
//将该程序分别下载到2个板子中,按任意一个板子的4个按键,都会将键值显示到另外一个板子的LED灯上
//显示LED为二进制形式,比如1,显示的是D1灭,其他的都亮
//发送端按下按键时,8个LED灯会同时灭掉
//也可以将485接口与485转232模块连接通信,通信操作方式一样,按4个按键发送不同的键值
//电脑端发送的话一定要16进制,单字节发送
//硬件相关的配置文件在Config.h里,自己建立项目时,需要复制到项目文件夹下
//编译环境 AVR Studio 4.17/AVR GCC 优化度-00
//系统时钟16MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms


//***********************************************************************

// 包含文件
//***********************************************************************
#include <string.h>
#include <stdio.h>
#define F_CPU 16000000 // 单片机主频为16MHz,用于延时子程序,熔丝位必须设置到外部高频晶振才行
#include <util/delay.h>
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/interrupt.h>    //中断信号头文件
#include  <avr/pgmspace.h>  //须增加的头文件,用来将数据存放在flash中
#include "Config.h"                  //配置头文件,与硬件相关的配置在这里更改

uchar key=0xFF;
uint   tx_count=200,tx_flag=0xff;
static uchar A1,A2,A3;                                  
uchar usart_rx_data=0xff;
volatile  uchar key_check;
volatile  uchar key_checkin;

uchar aa;

//***********************************************************************
//               MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
  LEDDDR  = 0xFF;                      //设置IO口方向为输出

  LED = 0xFF;                          //PE口初始设置为FF

  KEYDDR  = 0x00;    //设置为输入,并且要打开上拉电阻
  
  KEYDDR = 0x00 | (1<<RS485_CTR_RDE); 

  KEYPort |= ((1 << PD1) |(1 << PD5)|(1 << PD6)|(1 << PD7)); //四位独立按键连接在PD1/PD5/PD6/PD7上

  
}

//**********************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************

uchar keyboardscan(void) 
{

  key_checkin=KEYRead;          //读取IO口状态,判断是否有键按下
  key_checkin=KEYRead;          //读取IO口状态,判断是否有键按下

  key_checkin&= 0xE2;          //读取IO口状态,判断是否有键按下

  if(key_checkin!=0xE2)            //IO口值发生变化则表示有键按下
  {
    delay_ms(20);                  //键盘消抖,延时20MS

    key_checkin=KEYRead;
key_checkin&= 0xE2;

    if(key_checkin!=0xE2) //再次读取状态,判断是否有按键按下
    {     
      key_check=KEYRead;

      switch (key_check & 0xE2)
      {
      case 0xE0:key=1;break; //S1按下

      case 0xC2:key=2;break; //S2按下

case 0xA2:key=3;break; //S3按下

      case 0x62:key=4;break; //S4按下

      }
          
    }
  }

 
 else
  {
  return(key);
  }
}

//*************************************************************************
//               MSP430串口1初始化
//*************************************************************************
void UART1_Init()
{
 
 // DDRD |= (1<<PD3);
  
  //DDRD &= ~(1<<PD2); 

  UCSR1A=0x00;                                 //单倍速模式
  
  UCSR1B=0x98;                                 //接收中断允许,发送结束和寄存器空中断关闭,采用查询发送模式                               
  
  UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);              //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
  
  UBRR1H=baud_h;                               //写波特率的值
  
  UBRR1L=baud_l; 
}

//*************************************************************************
//              串口1发送数据函数
//*************************************************************************

void Send_Byte(uchar usart_tx_data)
{
  RS485_CTR1;

  while(!(UCSR1A&(1<<UDRE1))); //等待发送寄存器空

  UDR1=usart_tx_data; //写入发送数据

  while(!(UCSR1A&(1<<TXC1))); //等待发送完毕

  UCSR1A|=(1<<TXC1);

  delay_ms(5);                      //切换之前先有个小延时
  
  RS485_CTR0;
}


实例下载地址

atmega128 串口通讯(RS485.c)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警