1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình vi điều khiển STM32L152 bài tập chương 6 sách "Embedded Systems with ARM CortexM Microcontrollers in Assembly Language and C (Third Edition – Dr Yifeng Zhu)"

26 943 12

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 696,34 KB
File đính kèm CODE CHƯƠNG 6 STM32L152.rar (329 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài tập có lời giải và code đính kèm chương 6 sách vi điều khiển Embedded Systems with ARM CortexM Microcontrollers in Assembly Language and C (Third Edition – Dr Yifeng Zhu ) , nội dung các bài tập bao gồm: Chuyển đổi từ code C sang code asm, tính trung bình cộng của một dãy số nguyên cho trước, tính tổng lập phương, chuyển đổi ký tự thường sang ký tự hoa, tính năng lượng theo công thức e= mc2, tính giá trị biểu thức, xác định nghiệm phương trình bậc hai, so sánh với 0, tìm giá trị của hàm số, tìm số nhỏ nhất, so sánh hai ngày, tính tổng bình phương, tính giai thừa, ma trận và các phép toán liên quan.

Trang 1

LẬP TRÌNH VI ĐIỀU KHIỂN STM32L152

(Sách Embedded Systems with ARM Cortex-M Microcontrollers

in Assembly Language and C (Third Edition) – Dr Yifeng Zhu )

BGT done MUL r2, r1, r2 ADD r1, r1, #1

B loop done MOV r0, r2

Trang 2

n = result;

while(1);

}

6.3 Mean –Trung bình cộng

Đề : Define an array with 10 unsigned integers in asemply code and write an

assemply program that calculated the mean of these 10 integers (truncating the result to an integer)

Xác định một mảng gồm 10 số nguyên không dấu trong code asemply va viết một chương trình asm để tính trung bình cộng của 10 số đó (kết quả là một số nguyên)

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

loop CMP r0, r3 ; so sanh i voi kich thuoc mang

Trang 3

LDR r5, [r2] ; nap array[i] vao r5

stop B stop ; dead loop & program hangs here;

Đề : Xác định một mảng 10 số nguyên không dấu ai ( 0 <= i <= 9 ) bàng code

assemply, viết một chương trình asm tính tổng lập phương của 10 số không dấu đó Mảng này được xác định trong bộ nhớ dữ liệu sau:

AREA myData, DATA

array DCD 2, 4, 7, 3, 1, 2, 10, 11, 5, 13

Trang 4

array DCD 10

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

LDR r5, [r4, r2, LSL #2] ; array[i]; dich trai r2 2 bit = 4*i +&array[0]

MLA r1, r0, r5, r1 ; result = sum + array[i] ^3 - phep cong don

Trang 5

STR r1, [r6] ; luu ket qua vao bo nho

array DCD 2, 4, 7, 3, 1, 2, 10, 11, 5, 13 ; khai bao mang 10 so

END

6.5 UpperCase- Chuyển thành chữ hoa

Đề: Viết chương trình asm chuyển từ ký tự thường sang ký tự hoa

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

ENTRY

Trang 6

; r0 = giatri, r1 = =str

; signed number

next ADD r1, #1 ; &str += 1

Trang 7

6.6 TheKineticEnergy- E =mC^2

Đề: Viết một chương trình asm tính năng lượng (E) , E = MC 2 , khi mà khối lượng (M) là 15 kg và được lưu trong r0, C là tốc độ ánh sáng (299,792,458 m/s), và được chứa trong r1 Kết quả E lưu trong thanh ghi 32 bit r2

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

stop B stop ; dead loop & program hangs here

ENDP

ALIGN

Trang 8

AREA myData, DATA, READWRITE

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

Trang 9

MLA r0, r5, r8, r0 ; result = 3x/y + 9xy + 7x^2 + 5

MLA r0, r6, r1, r0 ; result = 11x + 3x/y + 9xy + 7x^2 + 5

MLA r0, r7, r2, r0 ; result = 13y + 11x + 3x/y + 9xy + 7x^2 + 5

6.8 QuadraticEquation –Phương trình bậc hai

Đề : Kiểm tra nghiệm số phức trong lời giải của phương trình bậc hai sau :

Trang 10

ax 2 + bx + c = 0 Lời giải có nghiệm phức nếu b 2 - 4ac nhỏ hơn 0 và là nghiệm thực với những

trường hợp còn lại Giả sử a, b, c là những số nguyên có dấu và được lưu lần lượt rong các thanh ghi r0, r1, r2 Viết một chương trình asm thiết lập thanh ghi r3 lên 1 nếu kết quả là nghiemj phức và 0 với trường hợp còn lại

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA quadraticEquation, CODE, READONLY

Trang 11

CMP r5, #0 ; so sanh delta voi 0

MOVGE r3, #2 ; delta >= 0 flag set 0 - hay real roots - nghiem thuc

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

ENTRY

Trang 13

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

Trang 14

stop B stop ; dead loop & program hangs here

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

Trang 15

elseif CMP r1,r0 ; kiem tra b < a

program hangs here

ENDP

ALIGN

AREA myData, DATA, READWRITE

Trang 16

AREA, myData, DATA date1 DCD 12, 31, 2014 ; month, day, year

date2 DCD 01, 20, 2013 ; month, day, year

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA dateCompare, CODE, READONLY

Trang 17

MOVLO r0, #1 ; LO = unsigned on Lower - nam 1 truoc nam 2 thi set r0 len 1

2 thi set r0 len 1

2 thi set r0 len 1

len -1

Trang 18

stop B stop ; dead loop & program hangs here

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

ENTRY

Trang 19

MOV r0, #4 ; n = 4

Đề : Viết chương trình asm tính tổng giai thừa của một số nguyên không âm Giả sử

n được cho bởi thanh ghi r0 và kết quả được lưu trong thanh ghi r1

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

Trang 20

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA factorial, CODE, READONLY

Trang 21

6.15 2Dmatrix

Đề : Khi một ma trận 2 chiều (2D) được khai báo trong chương trình C Ma trận trong thực tế được lưu trong một mảng một chiều trong bộ nhớ Chương trình C sử dụng một cách tiếp cận theo hàng để chuyển đổi ma trận hai chiều thành mảng một chiều Ví dụ sau đây là cách lưu trữ một ma trận 3*3 trong bộ nhớ

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

Trang 22

AREA main, CODE, READONLY

ADD r7,r0,r7,LSL #2 ; r7 = &matrix[0] + 4 * r7 = &a[i][0] - phan tu dau tien cua hang thu i

Trang 23

LDR r4,[r7,r6,LSL #2] ; r4 = a[i][j]

STR r4,[r7,r6,LSL #2] ; luu vao bo nho a[i][j]

stop B stop ; dead loop & program hangs here;

Trang 24

6.16 MatrixTranspose

Đề : Viết chương trình asm chuyển chuyển vị ma trận xác định ở bài trước Chương trình asm phải có hai vòng lặp Ma trận [aij] m*n chuyển đổi thành [aij] n*m

Code:

INCLUDE stm32l1xx_constants.s ; Load Constant Definitions

INCLUDE stm32l1xx_tim_constants.s ; TIM Constants

AREA main, CODE, READONLY

Trang 25

ADD r4, r2, LSL #2 ; 4*3*i + p + 4*j = (3i +j)*4 + p

; r5 = p + (3*j + i)*4 - r5 chua dia chi cua phan tu a[j][i]

Trang 26

ENDP

AREA myData, DATA, READWRITE

ALIGN

matrix DCD 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43 END

Ngày đăng: 17/01/2018, 21:45

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w