// 初始化串口
void uart_init()
{
// 1 配置引脚用于RX/TX功能
GPA0CON = 0x22222222;
GPA1CON = 0x2222;
// 2 设置数据格式等
// 使能fifo
UFCON0 = 0x1;
// 无流控
UMCON0 = 0x0;
// 数据位:8, 无校验, 停止位: 1
ULCON0 = 0x3;
// 时钟:PCLK,禁止中断,使能UART发送、接收
UCON0 = 0x5;
// 3 设置波特率
UBRDIV0 = UART_UBRDIV_VAL;
UDIVSLOT0 = UART_UDIVSLOT_VAL;
}
// 接收一个字符
char getc(void)
{
// 如果RX FIFO空,等待
while (!(UTRSTAT0 & (1<<0)));
// 取数据
return URXH0;
}
// 发送一个字符
void putc(char c)
{
// 如果TX FIFO满,等待
while (!(UTRSTAT0 & (1<<2)));
// 写数据
UTXH0 = c;
}
/*
* 打印16进制数
* 例如:int a = 0x68; puthex(a);输出"68";
*/
int puthex(volatile char a)
{
volatile char cTmp;
//putchar(a);
//方法一printf
//printf("\n%x\n", a);
//方法二,计算
cTmp=a>>4;//右移4位,把高位放到低位
if(cTmp<10)//如果是小于10的数
{
cTmp+='0';//以0-9输出
}
else
{
cTmp+='A'-10; //大于等于10的就是ABCDEF了。
}
putc(cTmp);
cTmp=a&0x0f;
if(cTmp<10)
{
cTmp+='0';
}
else
{
cTmp+='A'-10;
}
putc(cTmp);
return 0;
}
void main() //LED 闪烁
{
char c = 0;
int a = 0x68;
GPJ2CON = 0x00001111; // 配置引脚
GPJ2DAT = 0; // LED on
delay(0x100000);
// 初始化串口
uart_init();
// 开发板发送字符'A'
putc('A');
// 开发板发送"68"
puthex(a);
while (1)
{
// 开发板接收字符
c = getc();
// 开发板发送字符c+1
putc(c+1);
}
}
2596




被折叠的 条评论
为什么被折叠?



