嵌入式系统作业(已更新第三周)

嵌入式系统作业-32106200022

文章目录

  • 嵌入式系统作业-32106200022
  • 第一周
    • 1. 嵌入式系统常用术语
      • 1.1 与硬件相关的术语
      • 1.2 与功能模块相关的术语
      • 1.3 与通信相关的术语
    • 2. 运行示例程序,并记录结果
      • 2.1 编译、下载与运行第一个嵌入式程序
  • 第二周
    • 作业要求
    • 1. 在第一行显示"广州大学"字样。
    • 2. 写出main.s中94~101行语句的C语言描述。
      • 2.1 原汇编代码
      • 2.2 改写后C语言代码
    • 3. 将求和结果、`sumresult`的地址用`printf`显示出来。
    • 运行截图
  • 第三周
      • 编写示例程序:datax、datay、dataz三个数中,找出最大值并显示。
      • 运行截图

2024.3.23:已更新第三周作业


第一周

1. 嵌入式系统常用术语

1.1 与硬件相关的术语

中文名英文缩写英文全称
封装PKGPackaging
印刷电路板PCBPrinted Circuit Board
模拟量AQAnalog Quantity
开关量SQ / DQSwitch Quantity or Digital Quantity

1.2 与功能模块相关的术语

中文名英文缩写英文全称
通用输入/输出GPIOGeneral Purpose Input/Output
模数转换ADCAnalog-to-Digital Converter
数模转换DACDigital-to-Analog Converter
脉冲宽度调制器PWMPulse Width Modulation
看门狗WDTWatchdog Timer
液晶显示LCDLiquid Crystal Display
发光二极管LEDLight Emitted Diode
键盘KBDKeyboard

1.3 与通信相关的术语

中文名英文缩写英文全称
并行通信Parallel Comm.Parallel Communication
串行通信UARTUniversal Asynchronous Receiver
串行外设接口SPISerial Peripheral Interface
集成电路互联总线I2CInter-Integrated Circuit
通用串行总线USBUniversal Serial Bus
控制器局域网CANController Area Network
边界扫描测试协议BSTPBoundary Scan Test Protocol
串行线调试技术SWDSerial Wire Debug

2. 运行示例程序,并记录结果

2.1 编译、下载与运行第一个嵌入式程序

  • 步骤一:硬件连线
    在这里插入图片描述

  • 步骤二:打开环境,导入工程

在这里插入图片描述

  • 步骤三:编译工程
    在这里插入图片描述

  • 步骤四:连接GEC

在这里插入图片描述

  • 步骤五:下载机器码

在这里插入图片描述

  • 步骤六:观察运行结果

在这里插入图片描述

触摸温度传感器,可以看到黄灯会闪烁3次;

触摸"金葫芦"字样的触摸区,可以看到白灯闪烁3次.

  • 步骤七: 通过串口观察运行情况

在这里插入图片描述

数据传输成功.

第二周

作业要求

打开04-Software/ch02/CH02-1-20220118工程目录,
编译下载运行,理解并学习main.s汇编源文件。

修改main.s源文件,增加以下内容:
· 1、在第一行显示"广州大学"字样。
· 2、编写一个1+2+…+10的程序,将求和结果存入名为
"sumresult"的内存单元中,并将求和结果、sumresult
的地址用printf显示出来。
注:建议在源程序中"main_loop:"语句之前的地方增加,结束时用"bl."停住。
printf的格式详见05 UserBoard/printf.h文件。

1. 在第一行显示"广州大学"字样。

school_name:
 	.ascii "-------------------------广州大学-------------------------\n\0"

//打印文本
ldr r0,=school_name	
	bl printf

2. 写出main.s中94~101行语句的C语言描述。

2.1 原汇编代码

main_loop:                      //主循环标签(开头)
//(2.1)主循环次数变量mMainLoopCount+1
		ldr r2,=mMainLoopCount     //r2←mMainLoopCount的地址
		ldr r1, [r2]
		add r1,#1
		str r1,[r2]	
//(2.2)未达到主循环次数设定值,继续循环
        ldr r2,=MainLoopNUM
		cmp r1,r2
		blO  main_loop     //未达到,继续循环
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理

2.2 改写后C语言代码

for(;;){
    r2 = &mMainLoopCount;
    *r1 = *r2;
    (*r1)++; 
    *r2 = *r1;
    r2 = &MainLoopNUM;
    if(*r1 == *r2)	break;
}

3. 将求和结果、sumresult的地址用printf显示出来。

sumResult:
	.word 0				//定义结果保存变量    

sum_loop:  
    add r2, r2, r1   //r2 += r1  
    add r1,r1, #1   //r1++  
    cmp r1, #11      //比较r1是否等于11  
    bne sum_loop     //如果不是,继续循环  
  	
  	mov r1, #sumResult
    str r2,[r1]	//将结果存入sumresult变量   
  
    //显示求和结果
    ldr r0,=data_format1
    ldr r1,=#sumResult 	//加载求和结果到r1  
    bl printf   //调用打印整数的函数,参数是r0,r1  
  
    //显示sumresult的地址  
    mov r0, #sumResult //将sumResult的地址加载到r0  
    bl printf   //调用打印地址的函数,参数是r0  
    
	bl .   //在此打桩(.表示当前地址)

运行截图

在这里插入图片描述

可以看到地址及结果为37(16进制),十进制为55。

第三周

编写示例程序:datax、datay、dataz三个数中,找出最大值并显示。

//给三个寄存器赋初值
	ldr r0,=datax
	ldr r1, [r0]
	ldr r0,=datay
	ldr r2, [r0]
	ldr r0,=dataz
	ldr r3, [r0]
	
	cmp r1,r2	//比较r1, r2
	bgt	one_three	//如果r1>r2,比较r1、r3
	mov r1,r2		//否则令r1=r2

one_three:
	cmp r1,r3	//比较r1, r3
	bgt show_result	//如果r1>r3,r1即为最大值,打印最大值
	mov r1,r3	否则令r1=r3
	ldr r0,=data_format
	bl printf
	
show_result:
	ldr r0,=data_format
	bl printf

运行截图

在这里插入图片描述

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值