Chinaunix首页 | 论坛 | 博客
  • 博客访问: 729493
  • 博文数量: 134
  • 博客积分: 3207
  • 博客等级: 中校
  • 技术积分: 1995
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 20:47
文章分类

全部博文(134)

文章存档

2022年(1)

2020年(7)

2018年(2)

2016年(5)

2015年(14)

2014年(21)

2013年(3)

2012年(1)

2011年(15)

2010年(30)

2009年(35)

分类: 嵌入式

2010-04-23 16:47:49

串口的换行和退格键处理的测试:
vim uart.c:

#include "mini2440.h"
#define UART_CLK    (PCLK)
#define UART_BAUD_RATE    115200
#define UART_BRD    ((UART_CLK / (UART_BAUD_RATE *16)) - 1)
#define TXD0READY    (1<<2)
#define RXD0READY    (1<<0)
void uart0_init()
{
    rGPHCON |= 0xa0;
    rGPHUP |= 0x0c;

    rULCON0 = 0x03;
  
    rUCON0 = 0x05;
    
    rUFCON0 = 0x00;
    rUMCON0 = 0x00;

    rUBRDIV0 = (long)UART_BRD;
}

void putc(unsigned char data)
{
    while(!(rUTRSTAT0 & TXD0READY));
    rUTXH0 = data;
    if (data == '\n') { //换行处理
        putc('\r');
    }
}


void puts(unsigned char *Dats)
{
    unsigned char i = 0;
    for(; Dats[i] != '\0'; i++){
        putc(Dats[i]);
    }
}    

unsigned char getc(void)
{
    unsigned char data;
    while(!(rUTRSTAT0 & RXD0READY));
    data = rURXH0;
    if(data == '\b'){ //退格处理
        putc('\b');
        putc(' ');
    }
    return data;
}



void Get_Send(void)
{
    unsigned char data;
    unsigned char Dats[100];
    unsigned char i = 0;
    unsigned char *p = "\nHello, world!\n";
    uart0_init();
    
    while(1){
        puts(p);
        
        puts("Input:\n");
        while((data = getc()) != '\r'){
            putc(data);
            if((data == '\b')&&(i > 0)){
                i--;
            }
            else{
                Dats[i] = data;
                i++;
            }
        }
        Dats[i] = '\0';
        puts("\nYour order is: \n");
        puts(Dats);
        putc('\n');
        i = 0;
    }
}

完整代码如下附件:
文件:hand.tar.gz
大小:4KB
下载:下载

阅读(1644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~