ARM 与 51单片机通信

发布者:tau29最新更新时间:2016-08-03 来源: eefocus关键字:ARM  51单片机  通信 手机看文章 扫描二维码
随时随地手机看文章
硬件 mini2440核心板,另外一块带串口的单片机学习板(挂着DS18B20),学习板连续输出DS18B20的温度值,波特率19200。

在一个文件夹里新建一个文件,我的是voltage_set.c(以后用来调压)

 

#include
#include
#include
#include
#include
#include
#include
#include
#include

#define FALSE -1
#define TRUE  1
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300, //
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,
38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
 int i;
 int status;
 struct termios Opt;
 tcgetattr(fd, &Opt);
 for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++)
 {
  if (speed == name_arr[i])
  {
   tcflush(fd, TCIOFLUSH);
   cfsetispeed(&Opt, speed_arr[i]); 
   cfsetospeed(&Opt, speed_arr[i]);
   status = tcsetattr(fd, TCSANOW, &Opt); 
   if (status != 0)
    perror("tcsetattr fd1");
   return;
  }
  tcflush(fd,TCIOFLUSH); //????
 }
}

int set_Parity(int fd,int databits,int stopbits,int parity)
{
 struct termios options; //?¨???????á??
 if ( tcgetattr( fd,&options) != 0) //?×???????????????è??options??,±???
 {
  perror("SetupSerial 1");
  return(FALSE);
 }
 options.c_cflag &= ~CSIZE; //?????è??c_cflag??????°?????????????
 switch (databits)
 {
 case 7:
  options.c_cflag |= CS7; //?è??c_cflag????????????7??
  break;
 case 8:
  options.c_cflag |= CS8; //?è??c_cflag????????????8??
  break;
 default:
  fprintf(stderr,"Unsupported data size\n"); //???????????§??
  return (FALSE);
 }
 switch (parity) //?è?????????é??c_cflag??c_iflag???§
 {
 case 'n':
 case 'N':
  options.c_cflag &= ~PARENB;
  options.c_iflag &= ~INPCK;
  break;
 case 'o':
 case 'O': options.c_cflag |= (PARODD | PARENB);
  options.c_iflag |= INPCK;
  break;
 case 'e':
 case 'E':
  options.c_cflag |= PARENB;
  options.c_cflag &= ~PARODD;
  options.c_iflag |= INPCK;
  break;
 default:
  fprintf(stderr,"Unsupported parity\n");
  return (FALSE);
 }
 
 switch (stopbits)
 {
 case 1:
  options.c_cflag &= ~CSTOPB;
  break;
 case 2:
  options.c_cflag |= CSTOPB;
  break;
 default:
  fprintf(stderr,"Unsupported stop bits\n");
  return (FALSE);
 }
 
 if (parity != 'n')
  options.c_iflag |= INPCK;
 
 
 options.c_cc[VTIME] = 150; // 15 seconds
 options.c_cc[VMIN] = 0;
 
 tcflush(fd,TCIFLUSH);
 if (tcsetattr(fd,TCSANOW,&options) != 0)
 {
  perror("SetupSerial 3");
  return (FALSE);
 }
 return (TRUE);
}

int OpenDev(char *Dev)
{
    int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY????·?????open????
    if (-1 == fd)
    {
  perror("Can't Open Serial Port");
  return -1;
    }
    else
  return fd;
}

int main(int argc, char **argv)
{
    int fd;
    int nread;
    char buff[512];
    char *dev ="/dev/ttySAC1";
    fd = OpenDev(dev);
    if (fd>0)
    {
 printf("Open Serial succeed\n");
 set_speed(fd,19200);
    }
    else
    {
  printf("Can't Open Serial Port!\n");
  exit(0);
    }
    if (set_Parity(fd,8,1,'N')== FALSE)
    {
  printf("Set Parity Error\n");
  exit(1);
    }
 
    while(1)
    {
 int i;
// char buff1[2]={0x5a,0x5a};
// write(fd,buff1,1);
 while((nread = read(fd,buff,512))>0)
 {
  printf("\nLen %d\n",nread);
  buff[nread+1]='\0';
  for(i=0;i    printf("0x%x",buff[i]);
  printf("\n");
 }
    }
    //close(fd);
    //exit(0);
}

 

完了之后arm-linux-gcc -o voltage_set voltage_set.c

生成voltage_set

下载到mini2440核心板中

执行#./voltage_set

把学习板的地与核心板的地相连,学习板的TX与核心板的RX2相连就可以看到温度值了,当然,我用16进制显示在超级终端上,关掉程序用ctrl+c

关键字:ARM  51单片机  通信 引用地址:ARM 与 51单片机通信

上一篇:ARM内存地址访问
下一篇:stm32的微秒延时程序

推荐阅读最新更新时间:2024-03-16 15:03

ARM指令中的立即数
在 ARM 数据处理指令中, 当参与操作的第二操作数为立即数时, 每个立即数都是采用一个8位的常数循环右移偶数位而间接得到, 其中循环右移的位数有一个4位二进制的2倍表示. 则有效立即数可表示为: := immed_8; 循环右移(2 rotate_imm). 其中: 代表立即数, immed_8 代表8位常数, 即所谓的 8位图 , rotate_imm 代表4位的循环右移值. 这样一来出现了一个问题: 尽管表示的范围变大了, 但是12位所能表现的数字的个数是一定的. 因此, ARM 规定并不是所有的32位常数都是合法的立即数, 只有通过上面的构造方法得到的才是合法的立即数, 编译的时候才不会报错. 举个例子吧. 0x3FC(00
[单片机]
基于ARM的热敏电阻温度计的设计
1 引言 随着半导体技术的不断发展,热敏电阻作为一种新型感温元件应用越来越广泛。他具有体积小、灵敏度高、重量轻、热惯性小、寿命长以及价格便宜等优点。 传统的热敏电阻温度计硬件上大多采用普通单片机(MCS-51系列)+A/D转换器以及LED显示模块构成,分立元件多、功耗大、设计复杂且难以调试;软件上也多采用冗长繁琐的汇编语言来实现,设计效率低、可移植性差、性能难以保证。 目前,嵌入式系统的应用已经进入到一个高、低端并行发展的阶段,其标志就是32位微控制器的发展。ARM(Advanced RISC Machines)是嵌入式系统应用比较广泛的一种32位微处理器核,具有体积小、功耗低、集成度高、硬件调试方便和可移植操作系统等优点。为
[单片机]
基于<font color='red'>ARM</font>的热敏电阻温度计的设计
日本精工电子HSDPA高速数据通信卡选用英飞凌UMTS射频收发器
通信集成电路领先供应商英飞凌科技股份公司(FSE/NYSE:IFX)宣布,日本精工电子有限公司(SII)的UMTS/HSDPA数据通信卡采用了英飞凌开发的SMARTia 3G 单片CMOS 射频(RF)收发器。日本领先的射频数据通信卡厂商SII将在其C01SI UMTS/HSDPA数据卡内采用SMARTi? 3G收发器,以实现笔记本和PDA用户通过无线网络接入互联网,享受高达3.6Mbps的高速下载服务。 这种全新的无线网卡是为日本领先的3G手机运营商Softbank Mobile生产的,用于后者刚刚推出的基于数据卡的UMTS/HSDPA服务。 日本精工电子有限公司副总裁兼移动通信系统部总经理Takaaki Yamamoto表
[焦点新闻]
ARM的综合实验设计
一、实验目的 学习做一个复杂的应用程序的方法和程序结构,结合应用以前16 次实验所学到的知识,编写一个比较综合的应用。 二、实验内容 用一个列表框作为主菜单,通过键盘可以选择功能,主要的功能有:显示bmp 文件、设定系统时间、USB 下载。同时,使用文本框控件作为系统的一个状态条,显示提示信息和系统的时间。 三、预备知识 1、用ARM SDT 2.5 集成开发环境,编写和调试程序的基本过程。 2、基于操作系统的应用程序的框架结构。 3、会使用Source Insight 3 编辑C 语言源程序 4、会使用消息循环响应键盘消息 5、会使用文本框控件和列表框控件 6、会编写通过USB 连接下载的程序 7、会控制系统的时钟和多线
[单片机]
<font color='red'>ARM</font>的综合实验设计
ARM吴雄昂:物联网需要开放的生态系统
      本报记者 倪雨晴 深圳报道   在物联网、智能硬件、可穿戴设备概念盛行的当下,产业链上游的半导体界也在风口挺进新技术的生态布局。   6月初,Intel宣布以167亿美元重金收购可编辑逻辑芯片公司Altera,增强其数据中心和物联网业务; 5月28日,Avago Technologies以370亿美元收购wifi芯片供应商Broadcom,亦有意进军物联网和可穿戴设备。   不难发现,在物联网和服务器领域,各种布局正拉开序幕。去年,ARM宣布推出mbed物联网设备平台,同年,英特尔也推出了英特尔物联网平台,两者的目的都是为用户提供解决方案。   ARM是半导体知识产权(IP)提供商,它是苹果、诺基亚、A
[手机便携]
瑞萨扩展4G/5G射频时钟通信产品阵容,具备高时钟频率
全球半导体解决方案供应商瑞萨电子集团宣布,推出三款适用于4G和5G射频的新型低相位噪声、高频RF时钟解决方案,以及两种全新成功产品组合以扩展瑞萨通信时钟产品阵容,满足市场对全信号链解决方案的需求。全新8V19N850射频时钟同步器和8V19N880、8V19N882 JESD204B/C时钟抖动衰减器可提供符合ITU-T标准的网络时钟同步、出色的低相位噪声和高时钟频率。 瑞萨电子数据中心事业部时钟产品副总裁Bobby Matinpour表示:“网络同步在向5G过渡的过程中扮演着越来越重要的角色。我们通过此次推出的最新产品和成功产品组合,帮助通信领域的客户开发出具有卓越性能与可靠性的下一代解决方案。” 8V19N850
[网络通信]
瑞萨扩展4G/5G射频时钟<font color='red'>通信</font>产品阵容,具备高时钟频率
Linux kernel的中断子系统之(六):ARM中断处理过程
一、前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作。具体整个处理过程分成三个步骤来描述: 1、第二章描述了中断处理的准备过程 2、第三章描述了当发生中的时候,ARM硬件的行为 3、第四章描述了ARM的中断进入过程 4、第五章描述了ARM的中断退出过程 本文涉及的代码来自3.14内核。另外,本文注意描述ARM指令集的内容,有些source code为了简短一些,删除了THUMB相关的代码,除此之外,有些debug相关的内容也会删除。 二、中断处理的准备过程 1、中断模式的stack准备 ARM处理器有多种processor mode,例如user mod
[单片机]
Linux kernel的中断子系统之(六):<font color='red'>ARM</font>中断处理过程
51单片机的ADC0808数字电压表设计
摘要 近些年来,数字电压表逐渐进入人们的视线中,它主要采取数字化测量技术。与传统的指针式仪表相比,它的功能有了进一步的完善,并且精度也有了很大的提高。数字电压表主要采用单片机和模/数转换模块,这样不仅提高了测量速度,而且抗干扰能力强、使用便捷、可扩展性强、测量准确。 本文主要采用AT89C51单片机和ADC0808芯片制作的简易数字电压表,可以采集0~5V和5~10V的模拟直流电压进行测量,其测量结果在液晶LCD1602上显示。该设计硬件电路主要有三个模块组成:A/D转换模块、数据处理模块及输出显示模块。数据处理由单片机AT89C51来完成,它主要把ADC0808传送来的数值经一定的数据处理,然后送至显示模块进行显示,同时控制
[单片机]
<font color='red'>51单片机</font>的ADC0808数字电压表设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved