TQ2440裸奔程序:串口UART的PC机按键测试程序

发布者:数字探险家最新更新时间:2018-11-26 来源: eefocus关键字:TQ2440  裸奔程序  串口UART  按键测试 手机看文章 扫描二维码
随时随地手机看文章

  //=========================================


  // NAME: main.c


  // DESC: TQ2440串口UART测试程序


  //=========================================

  

  #include "def.h"


  #include "option.h"


  #include "2440addr.h"


  #include


  #include


  #include


  #include


  #include


  //======================================================


  static volatile int uart_port = 0;


  void uart_init(int pclk,int buad,int ch)


  {


  //UART初始化:端口使能、功能设定、波特率、设置数据格式


  rGPHCON = (rGPHCON & ~(0xfff<<4)) | (0xaaa<<4);//端口RX[0:2]、TX[0:2]功能


  rGPHUP = rGPHUP | (0x7<<1); //端口GPH[1:3]禁止上拉


  rUFCON0 = 0x0; //禁止FIFO


  rUFCON1 = 0x0; //禁止FIFO


  rUFCON2 = 0x0; //禁止FIFO


  rUMCON0 = 0x0; //禁止AFC


  rUMCON1 = 0x0; //禁止AFC


  //Normal:No parity:One stop:8-bits 中断响应 UART clock: PCLK


  rULCON0 = (rULCON0 & ~0xff) | ((0x0<<6)|(0x0<<3)|(0x0<<2)|(0x3));


  rUCON0 = (rUCON0 & ~0x3ff) | ((0x1<<9)|(0x1<<6)|(0x1<<2)|(0x1));


  rUBRDIV0 = ((int)(pclk/16./buad+0.5)-1);


  rULCON1 = (rULCON1 & ~0xff) | ((0x0<<6)|(0x0<<3)|(0x0<<2)|(0x3));


  rUCON1 = (rUCON1 & ~0x3ff) | ((0x1<<9)|(0x1<<6)|(0x1<<2)|(0x1));


  rUBRDIV1 = ((int)(pclk/16./buad+0.5)-1);


  rULCON2 = (rULCON2 & ~0xff) | ((0x0<<6)|(0x0<<3)|(0x0<<2)|(0x3));


  rUCON2 = (rUCON2 & ~0x3ff) | ((0x1<<9)|(0x1<<6)|(0x1<<2)|(0x1));


  rUBRDIV2 = ((int)(pclk/16./buad+0.5)-1);


  uart_port = ch; //设置串口端口号


  }


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


  // 串口发送函数


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


  //======================================================


  void uart_send_byte(int data)


  {


  if(0 == uart_port)


  {


  if(data == 'n')


  {


  while(!(rUTRSTAT0 & 0x2));


  rUTXH0 = 'n';


  }


  while(!(rUTRSTAT0 & 0x2));


  rUTXH0 = data;


  }


  else if(1 == uart_port)


  {


  if(data == 'n')


  {


  while(!(rUTRSTAT1 & 0x2));


  rUTXH1 = 'n';


  }


  while(!(rUTRSTAT1 & 0x2));


  rUTXH1 = data;


  }


  else if(2 == uart_port)


  {


  if(data == 'n')


  {


  while(!(rUTRSTAT2 & 0x2));


  rUTXH2 = 'n';


  }


  while(!(rUTRSTAT2 & 0x2));


  rUTXH2 = data;


  }


  }


  //======================================================


  void uart_send_string(char *string)


  {


  while(*string)


  {


  uart_send_byte(*string++);


  }


  }


  //======================================================


  void uart_printf(char *fmt,...)


  {


  va_list ap;


  char string[256];


  va_start(ap,fmt);


  vsprintf(string,fmt,ap);


  uart_send_string(string);


  va_end(ap);


  }


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


  // 串口接收函数


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


  //======================================================


  void uart_tx_empty(void)


  {


  if(0 == uart_port)


  {


  while(!(rUTRSTAT0 & 0x4));//等待Tx为空


  }


  if(1 == uart_port)


  {


  while(!(rUTRSTAT1 & 0x4));//等待Tx为空


  }


  if(2 == uart_port)


  {


  while(!(rUTRSTAT2 & 0x4));//等待Tx为空


  }


  }


  //======================================================


  char uart_get_ch(void)


  {


  if(0 == uart_port)


  {


  while(!(rUTRSTAT0 & 0x1));//等待Rx被读


  return rURXH0; //读缓存寄存器


  }


  else if(1 == uart_port)


  {


  while(!(rUTRSTAT1 & 0x1));//等待Rx被读


  return rURXH1; //读缓存寄存器


  }


  else if(2 == uart_port)


  {


  while(!(rUTRSTAT2 & 0x1));//等待Rx被读


  return rURXH2; //读缓存寄存器


  }


  return 0;


  }


  //======================================================


  char uart_get_key(void)


  {


  if(0 == uart_port)


  {


  if(rUTRSTAT0 & 0x1) //Rx被读


  {


  return rURXH0; //读缓存寄存器


  }


  else


  {


  return 0;


  }


  }


  if(1 == uart_port)


  {


  if(rUTRSTAT1 & 0x1) //Rx被读


  {


  return rURXH1; //读缓存寄存器


  }


  else


  {


  return 0;


  }


  }


  if(2 == uart_port)


  {


  if(rUTRSTAT2 & 0x1) //Rx被读


  {


  return rURXH2; //读缓存寄存器


  }


  else


  {


  return 0;


  }


  }


  return 0;


  }


  //======================================================


  void uart_get_string(char *string)


  {


  char *string1 = string;


  char c = 0;


  while((c = uart_get_ch())!='r')


  {


  if(c == 'b')


  {


  if((int)string1 < (int)string)


  {


  uart_printf("bb");


  string--;


  }


  }


  else


  {


  *string++ = c;


  uart_send_byte(c);


  }


  }


  *string = '�';


  uart_send_byte('n');


  }


  //======================================================


  int uart_get_intnum(void)


  {


  char str[30];


  char *string = str;


  int base = 10;


  int minus = 0;


  int result = 0;


  int last_index;


  int i;


  uart_get_string(string);


  if(string[0] == '-')


  {


  minus = 1;


  string++;


  }


  if(string[0] == '0' && (string[1] == 'x' || string[1] == 'X'))


  {


  base = 16;


  string = string + 2;


  }


  last_index = strlen(string)-1;


  if(last_index < 0)


  {


  return -1;


  }


  if(string[last_index] == 'h' || string[last_index] == 'H')


  {


  base = 16;


  string[last_index] = 0;


  last_index--;


  }


  if(base == 10)


  {


  //atoi将字符串转换为整型值


  result = atoi(string);


  result = minus ? (-1*result) : result;


  }


  else


  {


  for(i=0;i<=last_index;i++)


  {


  //判断字符是否为英文字母,当为英文字母a-z或A-Z时,返回非零值,否则返回零。


  if(isalpha(string[i]))


  {


  //isupper 判断字符是否为大写英文字母,当c为大写英文字母,返回非零值,否则返回零。


  if(isupper(string[i]))


  {


  result = (result<<4) + string[i]-'A'+10;


  }


  else


  {


  result = (result<<4) + string[i]-'a'+10;


  }


  }


  else


  {


  result = (result<<4) + string[i]-'0'+10;


  }


  }


  result = minus ? (-1*result) : result;


  }


  return result;


  }


  //======================================================


  int uart_get_intnum_gj(void)


  {


  char string[16];


  char *p_string = string;


  char c;


  int i = 0;


  int data = 0;


  while((c = uart_get_ch()) != 'r')


  {


  if(c == 'b')


  {


  p_string--;


  }


  else


  {


  *p_string++ = c;


  }


  //uart_send_byte(c);


  }


  *p_string = '�';


  i=0;


  while(string[i] != '�')


  {


]  data = data*10;


  if(string[i]


  {


  return -1;


  }


  data = data +(string[i]-'0');


  i++;


  }


  return data;


  }


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


  void Main(void)


  {


  uart_init(50000000,115200,0);


  while(1)


  {


  if('-' == uart_get_ch())


  {


  uart_printf("+n");


  }


  if('+' == uart_get_key())


  {


  uart_printf("-n");


  }


  }


  }


关键字:TQ2440  裸奔程序  串口UART  按键测试 引用地址:TQ2440裸奔程序:串口UART的PC机按键测试程序

上一篇:TQ2440裸奔程序:串口UART打印printf测试程序
下一篇:ARM9:如何将linux2.6.38内核移植到TQ2440

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

HDJF手持式局部放电测试仪使用前仪器按键功能说明
一、采用标准 本多功能局放测试仪(HDJF)的设计采用以下标准: GB/T 7354-2003局部放电测量; GB 4793.1-2007 测量、控制和实验室用电气设备的安全要求 第1部分:通用要求; GB/T 2423.8-1995 电工电子产品基本环境试验规程; GB 2900电工名词术语; GB/T 16927 高电压试验技术; DL/T 356-2010局部放电测量仪校准规范; DL/T 417-2006电力设备局部放电现场测量导则; IEC1000电磁兼容性。 二、操作注意 1、使用仪器之前,请仔细阅读本使用说明书。 2、在试验过程中,不同的传感器测量时,应在“参数设置”项中正确设置参数,以确保测量准确。 3、检测过
[测试测量]
HDJF手持式局部放电<font color='red'>测试</font>仪使用前仪器<font color='red'>按键</font>功能说明
STM32学习之路-按键中断测试(外部中断)
终于有时间再来学习STM32了~ 这几天都在忙着该死的考试.直接进入正题 开发板:奋斗V5 这个按键中断测试的要求是:按键2(K2)按下,LED2(V7)亮, 再一次按下就灭,循环.. 好,先看看按键和LED的原理图 好吧~ 虽然图截得不是很好看,但是能看到K2接的是PC2, LED2接的是PD6 ok,剩下的就是配置工作了.. 先来理一理思路: (1)初始化系统时钟 (2)初始化外部时钟(你所用到的东西) (3)配置LED (4)配置中断优先级 (5)配置外部中断线 (6)中断处理函数 恩,差不多就是这样了.. 然后再来一条一条的看:(1)和(2)都属于RCC配置,可以放在一个功能模块里面: pre name= co
[单片机]
M430_Launchpad串口UART使用硬件方面注意点
首先,不得不说Launchpad是一个很实用的开发工具. 就我个人是用来看, 板载SBW的JTAG相当实用.而且还可以仿真我的MSP430F5438的板子,实在相当给力,省去了上百元的仿真器的费用~~爽~~ 但是,(一碰到这个词果断没什么好事..) 这个板子有个地方搞得非常非主流,不仔细阅读文档的话,妥妥的要被坑! 问题就出在板上的J3插座.(图中,左侧的黄框框) 前面四个是正常的, 最后一个TXD.靠近EMULATION一侧的排针其实是和右侧芯片的3脚相连的.从下面PCB图可以看出来. 至于RXD么,就自己看UserGuide咯.不多废话.(其实这张图里基本也就看出来了..) 这么设计,我估
[单片机]
M430_Launchpad<font color='red'>串口</font><font color='red'>UART</font>使用硬件方面注意点
uart接口_基于51单片机的UART串口通信
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信
[单片机]
<font color='red'>uart</font>接口_基于51单片机的<font color='red'>UART</font><font color='red'>串口</font>通信
STM32F103标准库开发---Uart串口通信实验---安装串口驱动和串口调试
串口调试器 USB转TTL实物图: 接口介绍: 串口驱动安装 双击串口驱动CH341SER.EXE安装软件 点击安装 安装成功 将串口调试器插入电脑,然后选择设备管理器,成功后的端口驱动如下: 串口调试助手 串口调试助手:sscom5.13.1 界面如下: 串口通信调试 1. 打开串口调试助手 双击sscom5.13.1.exe文件 2. 选择端口 设备管理器中是COM5 串口调试助手中选择COM5 3. 设置参数 数据具体如下: 4. 打开串口 点击打开串口 5. 调试现象 我单片机中程序的功能是:每100ms发送一次 工欲善其事,必先利其器。 具体现象如下:
[单片机]
STM32F103标准库开发---<font color='red'>Uart</font><font color='red'>串口</font>通信实验---安装<font color='red'>串口</font>驱动和<font color='red'>串口</font>调试
TQ2440 学习笔记—— 23、通用异步收发器 UART
通用异步收发器 UART UART(Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置)用于异步通信,可以实现全双工发送和接收。最精简的连线方法只有三根电线:TxD 用于发送数据,RxD 用于接收数据,Gnd 用于给双方提供参考电平。 UART 使用的标准的TTL/CMOS 逻辑电平(0 - 5V、0 - 3.3V 等)来表示数据,高电平表示1,低电平表示0.为了增强数据的抗干扰能力、提高传输长度,通常是将TTL/CMOS 逻辑电平 转换为 RS-232 逻辑电平, 3 ~ 12V 表示0,-3 ~ -12V 表示1。 PC 使用串口: 1、确
[单片机]
TQ2440中断系统
1.1 S3C2440系统中断 CPU和外设构成了计算机系统,CPU和外设之间通过总线进行连接,用于数据通信和控制,CPU管理监视计算机系统中所有硬件,通常以两种方式来对硬件进行管理监视: 查询方式:CPU不停的去查询每一个硬件的当前状态,根据硬件的状态决定处理与否。好比是工厂里的检查员,不停的检查各个岗位工作状态,发现情况及时处 理。这种方式实现起来简单,通常用在只有少量外设硬件的系统中,如果一个计算机系统中有很多硬件,这种方式无疑是耗时,低效的,同时还大量占用CPU资 源,并且对多任务系统反应迟钝。 中断方式:当某个硬件产生需要CPU处理的事件时,主动通过一根信号线“告知”CPU,同时设置某个寄存器里对应的位,CPU
[单片机]
<font color='red'>TQ2440</font>中断系统
8051/2单片机常用的本地通讯方式 UART,RS485,I2C,SPI 之 UART串口通讯 1
一 ,说明 1. 串口UART, 波特率:9600 接设备的时候,一般只接GND RX TX,不会接Vcc,避免与目标设备上的供电冲突。 1.1 RS485标准( +2V ~ +6V:1 / -6V ~ -2V:0) 1.2 RS232标准( -15V ~ -3V:1 / +3V ~ +15V:0),需要MAX232进行电平反转后,才能与MCU进行通讯 1.3 TTL标准( 2.4V--5V:1 / 0V--0.5V:0 ) 二、演示 三、代码: /** * 8051/2 DEMO 3 * 常用的本地通讯方式 * 1. 串口UART, 波特率:9600 * 接设备的时候,一般只接GND RX TX,
[单片机]
8051/2单片机常用的本地通讯方式 <font color='red'>UART</font>,RS485,I2C,SPI 之 <font color='red'>UART</font><font color='red'>串口</font>通讯 1
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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