打印

关于IAR改写putchar的实验报告

[复制链接]
2316|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
uestchm|  楼主 | 2011-12-14 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PUTCHAR 函数是通过它C通实现所有基于字符的I/O的基本函数 为了能使用
任何基于字符的I/O 用户必须利用硬件环境提供的工具 提供这两个函数的定义
创建新I/O子程序的起点是文件
C:\iar\icc430\putchar.c和C:\iar\icc430\getchar.c
1   定制putchar
创建定制putchar版本的步骤如下
对源文件putchar.c作所需的补充并把它保存回到相同名字下 或者把putchar.c用作
模板 创建用户自己的子程序
例如 下面的代码使用存储器映射I/O写到LCD显示
int putchar (int outchar)如上是MSP430系列C编译器编程指南_百度文库的内容。改写putchar的目的何在?
C:\Program Files\IAR Systems\Embedded Workbench Evaluation 4.0\430\src\lib\clib
#include <stdio.h>后,debug view->terminal IO直接看串口数据
然而,我想在串口调试助手里看数据,就是说想在电脑上看。
那么可以如下改造:
//重写putchar函数
//采用默认的,会在View/TerminalIO里有输出
//重写之后,会在真实的串口里显示。
//调用串口0实现。
int putchar(int ch)
{
  TXBUF0   = ch;
  while((UTCTL0&TXEPT)==0);//等待发送完毕     
  return ch;
}
保存为printf_redefine.c。
然后
#include <stdio.h>
#include "printf_redefine.c"
记得要初始化:
/* 为printf和getkey输入输出初始化串口 */
void      mInitSTDIO( void )
{
/*   
  UCTL1&=~SWRST;                    //initialize  USART state machine
  UCTL1&=~SYNC;                     //UART模式
  UCTL1|=CHAR;                      //8-Bit data,1-Bit stop,NO check
  UBR01=0x03;                       //32768/9600~=3.413
  UBR11=0x00;
  UMCTL1=0x4A;                      //Modulation coefficient=0.413*8
  UTCTL1|=SSEL0;                    //UCLK=ACLK=32768Hz
  ME2|=URXE1+UTXE1;                 //enable USART0  RXD/TXD
  P3SEL|=BIT6;                        //P3.4,P3.5为为功能模块
  P3SEL|=BIT7;
  P3DIR|=BIT6;                //P3.4 for output
  P3DIR&=~BIT7;               //P3.5 for input   
  IE2|=URXIE1;                      //Enable USART1 RX interrupt
*/
  P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
  ME1 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  UCTL0 |= CHAR;                            // 8-bit character
  UTCTL0 |= SSEL0;                          // UCLK = ACLK
  UBR00 = 0x0D;                             // 32k/2400 - 13.65
  UBR10 = 0x00;                             //
  UMCTL0 = 0x6B;                            // Modulation
  UCTL0 &= ~SWRST;                          // Initialize USART state machine
  IE1 |= URXIE0;                            // Enable USART0 RX interrupt   
}
我的波特率是2400!
结论:terminalIO可以看数据中的汉字,也有乱码,勉强可以识别(比如读写U盘)
串口调试助手不行(应该是调试助手里没有汉字支持)

相关帖子

沙发
xlhtracy| | 2011-12-15 10:56 | 只看该作者
这个是神马?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

141

帖子

0

粉丝