《ARM微控制器与嵌入式系统》慕课---实验二 UART实验

任务一:发送完整ASCII表给PC,每16个字符换行

分析:1)首先配置UART1,使其可以发送字符给PC,注意: UART1使用bus clock(时钟频率为10.485M)

           2)  ASCII表从0开始到0x7F,定义一个变量从0到0x7F,每次发送该变量的值,然后再将变量加1

           3)  每逢16的整数倍,发送一个换行字符

实现代码片段:

void uart1_init(void)
{
	SIM_SCGC5 |= (1 << 13); //enable PortC module
	SIM_SCGC4 |= (1 << 11); //enable UART1
	
	PORTE_PCR0 |= (3 << 8); //config as UART
	PORTE_PCR1 |= (3 << 8); //config as UART
	
	UART1_C2 |= ((1 << 3)|(1 << 2));//enable tx and rx
	
	UART1_BDL |= 0x44; //9600
}

void send_char(char c)
{
	while(!(UART1_S1 & (1 << 7))); //wait for tx empty
	UART1_D = c;
}

int main(void)
 {
	int counter;
	
	uart1_init();

	for(counter=0;counter < 0x80;counter++) {
                send_char(counter);
	   	if(counter%16 == 0)
		    send_char('\n');
        }

	while(1);

	return 0;
}

任务二:接收PC发送的一个ASCII字符,发送其对应的十六进制值给PC

分析:1)  添加接收字符功能

           2)  十六进制格式一般为0x字符开始,后面接两位十六进制数,通过分离法分别获得这两位十六进制数

           3)  将每位数转换成对应字符数字,比如将0转换成字符‘0’,再发送给PC

实现代码片段:

void receive_char(unsigned char *c)
{
	while(!(UART1_S1 & (1 << 5)));
	*c = UART1_D;
}

unsigned char num2char(unsigned char n)
{
	if(n >= 0 && n <= 9)
		return n + '0';
	else if(n >= 10 && n <= 15)
		return n - 10 + 'A';
	else
		return 0;
}

int main(void)
 {
	unsigned char c = 0;
	
	uart1_init();

	for(;;) {
		receive_char(&c);
		if(c == '\n' || c == '\r')
			continue;
		send_char(c);
		send_char('-');
		send_char('-');
		send_char('-');
		send_char('0');
		send_char('x');
		
		send_char(num2char(c >> 4));
		send_char(num2char(c % 16));
		send_char('\n');
	}

	while(1);

	return 0;
}

任务三:猜数字游戏

分析:1) 通过rand()获取一个0-9之间的整数

           2) 将其转化为对应字符

           3) 将所得的字符与接收的字符进行比较,发送相应提示信息给PC

实现代码片段:

void send_str(char *c)
{
	while(*c != '\0')
	{
		send_char(*c);
		c++;
	}
}

int main(void)
{
	unsigned char c = 0;
	unsigned char num = 0;
	
	uart1_init();
	
	num = rand() % 10;

        num = num2char(num);
	
	send_str("please guess a number: ");
	
	send_char('\n');

	for(;;) {


		receive_char(&c);
		send_char(c);
		send_char('\n');
		if( c == '\r'|| c == '\n')
			continue;
		else if(c > num)
		{
			send_str("too big! please try again");
		}
		else if (c < num)
		{
			send_str("too small! please try again");
		}
		else
		{
			send_str("You are right!");
			break;
		}
	}

	while(1);

	return 0;
}

至此,UART实验玩结束了,望大家批评指正,谢谢^_^

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值