• 大小: 5.90KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-04-20
  • 语言: C/C++
  • 标签: 串口通讯  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;
}

资源截图

代码片段和文件信息

//********************************************************************
//DMAVR-L型开发板RS485通信实验,程序具有收发一体的功能
//RS485之间通过双绞线连接,如果距离近,可以不使用120欧电阻匹配
//将2个DMAVR-L板子通过导线(双绞线、杜邦线等)连接,连接方式为A-AB-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
//作者:www.avrgcc.com
//日期:2014.07.8

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

uchar key=0xFF;
uint   tx_count=200tx_flag=0xff;
static uchar A1A2A3;                                  
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<
  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
 

评论

共有 条评论