嵌入式系统编程题汇编Word文件下载.docx

上传人:b****2 文档编号:5899904 上传时间:2023-05-05 格式:DOCX 页数:17 大小:67.84KB
下载 相关 举报
嵌入式系统编程题汇编Word文件下载.docx_第1页
第1页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第2页
第2页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第3页
第3页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第4页
第4页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第5页
第5页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第6页
第6页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第7页
第7页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第8页
第8页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第9页
第9页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第10页
第10页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第11页
第11页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第12页
第12页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第13页
第13页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第14页
第14页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第15页
第15页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第16页
第16页 / 共17页
嵌入式系统编程题汇编Word文件下载.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统编程题汇编Word文件下载.docx

《嵌入式系统编程题汇编Word文件下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统编程题汇编Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。

嵌入式系统编程题汇编Word文件下载.docx

等待跳转

POWSTMFDSP!

{R1-R12,LR};

将R1-R12入栈,满递减堆栈

MOVSR2,R1;

将R1赋给R2,并影响标志位

MOVEQR0,#1;

若Z=1,则R0=1

BEQPOW_END;

若Z=1,跳转到POW_END

MOVR1,R0;

将R0中值赋给R1

SUBR2,R2,#1;

将R2-1的只赋给R2

POW_L1BLDO_MUL;

跳转到DO-MUL,并把下一条指令地址存入R14中

SUBSR2,R2,#1;

将R2-1的值赋给R2,并影响标志位

BNEPOW_L1;

若Z=0,跳转到POW_L1

POW_ENDLDMFDSP!

{R1-R12,PC};

数据出栈,存入到R1-R12,PC中

DO_MULMULR0,R1,R0;

把R1*R0的值赋给R0

MOVPC,LR;

LR中的值赋给PC

汇编结束

三:

从一一直加到一百

程序清单

(一)C语言实验参考程序

#defineuint8unsignedchar;

定义一个无符号字符常量uint8

#defineuint32unsignedint;

定义一个无符号整形常量unint32

#defineN100;

定义一个常量N=100(宏定义,100用N代替)

uint32sum;

;

定义sum为无符号整型常量(声明一个unsignedint型的变量sum)

voidMain(void);

主函数

{uint32i;

定义无符号整型常量i(声明一个unsignedint型的变量i)

sum=0;

sum初始值为0

for(i=0;

i<

=N;

i++);

i在N内自增加1(i从0开始,i<

=N时循环成立)

{sum+=i;

};

把sum+i赋给sum

while

(1);

为真循环

}

程序清单

(二)简单的启动代码

IMPORT|Image$$RO$$Limit|;

R0输出段存储区域界限

IMPORT|Image$$RW$$Base|;

RW输出段运行时起始地址

IMPORT|Image$$ZI$$Base|;

ZI输出段运行时起始地址

IMPORT|Image$$ZI$$Limit|;

ZI输出段存储区域界限

IMPORTMain;

AREAStart,CODE,READONLY;

声明代码段start,为只读

ENTRY;

程序入口

CODE32;

ResetLDRSP,=0x40003f00;

将0x40003f00赋给SP

LDRR0,=|Image$$RO$$Limit|;

将R0输出段存储区域界限赋给R0

LDRR1,=|Image$$RW$$Base|;

将RW输出段运行时起始地址赋给R1

LDRR3,=|Image$$ZI$$Base|;

将ZI输出段运行时起始地址赋给R3

CMPR0,R1;

比较R0和R1,相等Z=1,反之Z=0

BEQLOOP1;

若Z=1,则跳到LOOP1

LOOP0CMPR1,R3;

比较R1和R3,若R1<

R3,C=0

LDRCCR2,[R0],#4;

若C=0,读取R0地址单元内容并且存入R2,且R0=R0+4

STRCCR2,[R1],#4;

若C=0,读取R2中的数据存入R1,且R1=R1+4

BCCLOOP0;

若C=0,跳转到LOOP0

LOOP1LDRR1,=|Image$$ZI$$Limit|;

将ZI输出段存储区域赋给R1

MOVR2,#0;

把0赋给R2

LOOP2CMPR3,R1;

STRCCR2,[R3],#4;

若C=0,将R2中数据保存到内存单元R3中,且R3=R3+4

BCCLOOP2;

若C=0,跳转到LOOP2

BMain;

跳转到主程序

汇编结束

实验四

程序清单

(一)C语言调用汇编的参考程序

定义一个无符号整型常量.uint32

externuint32Add(uint32x,uint32y);

//声明子程序Add为一个无符号整型常量,它为2个无符号整型常量x,y的和

定义sum为无符号整型常量

voidMain(void);

无返回主程序

{sum=Add(555,168);

sum等于555+168

程序清单

(二)汇编加法函数程序

EXPORTAdd;

声明子程序Add方便调用

AREAStart,CODE,READONLY;

声明代码段start,为只读

ENTRY;

CODE32;

AddADDR0,R0,R1;

将R0+R1值赋给R0

MOVPC,LR;

将LR值赋给PC

END;

14、设计编程:

LPC2131的P0.7引脚连接了一个蜂鸣器,编程发出等周期的滴滴声。

答:

#define

VoidDelayNS(intm)

{inti;

for(;

m>

0;

m--)

for(i=0;

50000;

i++)

}

main()

{

PINSEL0=0x00000000;

IO0DIR=1<

<

7;

while

(1)

{

IO0SET=1<

DelayNS(50);

IO0CLR=1<

}

15、设计编程:

LPC2131的P0[1:

0]两引脚分别连接了2个按键K1和K4;

P0[7:

6]两引脚分别连接了2个指示灯LED1和LED2;

请编制驱动程序,使Kx按键时,LEDx灯亮。

#definek11<

#definek21<

1

#defineLED11<

7

#defineLED21<

8

main()

PINSEL0=0x00000000;

IO0DIR=IO0DIR&

(~k1);

(~k2);

IO0DIR=IO0DIR|LED1;

IO0DIR=IO0DIR|LED2;

IO0CLR=IO0CLR|LED1|LED2;

While

(1)

If((IO0PIN&

k1)==0)

IO0SET=LED1;

elseIO0SET=LED1;

k2)==0)

IO0SET=LED2;

elseIO0SET=LED2;

16、ARM芯片中定时器结构原理如下图,试设计一个周期为2秒的方波发生器。

(假设该系统的外围设备时钟频率Fpclk=10MHz)

intmian{

PINSEL0=PINSEL0&

(1(3<

10))|(2<

10);

T0CTCR=0x00;

T0TC=0;

T0PR=99;

T0MCR=0x02<

3;

T0MR1=Fpclk/100;

T0EMR|=0xc2;

T0TCR=0x01;

While

(1);

17、使用学过的知识设计设计一个汽车用“车速表”,写出你的设计方案并编程实现。

提示:

可用霍尔元件将车轮的转动转换为脉冲。

车轮每转动一圈会产生一个方波脉冲。

转动脉冲:

void__irqIRQ_Timer0(void)

if((IO0SET&

BEEP)==0)

IO0SET=BEEP;

/*关闭BEEP*/

else

IO0CLR=BEEP;

T0IR=0x01;

/*清除中断标志*/

VICVectAddr=0x00;

/*通知VIC中断处理结束*/

intmain(void)

intspped=1;

PINSEL1=0x00000000;

/*设置管脚连接GPIO*/

IO0DIR=BEEP;

/*设置BEEP控制口输出*/

IRQEnable();

/*IRQ中断使能*/

/*定时器0初始化*/

T0TC=0;

/*定时器设置为0*/

T0PR=0;

/*时钟不分频*/

T0MCR=0x03;

/*设置T0MR0匹配后复位T0TC,并产生中断标志*/

T0MR0=Fpclk/spped;

/*0.5秒钟定时*/

T0TCR=0x01;

/*启动定时器*/

/*设置定时器0中断IRQ*/

VICIntSelect=0x00;

/*所有中断通道设置为IRQ中断*/

VICVectCntl0=0x20|0x04;

/*设置定时器0中断通道分配最高优先级*/

VICVectAddr0=(uint32)IRQ_Timer0;

/*设置中断服务程序地址*/

VICIntEnable=1<

0x04;

/*使能定时器0中断*/

while

(1){

if((IO0PIN&

KEY1)==0){

spped=10;

elseif((IO0PIN&

KEY2)==0){

spped=20;

KEY3)==0){

spped=30;

KEY4)==0){

spped=40;

};

return0;

汽车车速:

intVx;

PINSEL0=(PINSEL0&

(~(3<

20)))|(2<

20);

PINSEL0=PINSEL0&

(0<

24);

T0CTCR&

=0xf0;

T0PR=99;

T0MR0=Fpclk/300;

T1CTCR=(T1CTCR&

(~0x0f)|0xf1);

T1TC=0;

T1MCR=0x00;

T1CCR&

=~0x07;

T1TCR=0x01;

while

(1)

if((T0IR&

0x01)==1)

Vx=T1TC;

T1TC=0;

VtotalLen+=Vx;

VthisLen+=Vx;

Vspeed=(Vx*L*3.6)/HrN;

KClr)==0)

VthisLen=0;

1、编写一程序,用查询的方式,对S3C2410的A/D转换器的第3通道连续进行100次A/D转换,然后将其结果求平均值。

设预分频为49。

注意:

A/D转换器有独立的模拟信号输入引脚AIN0---AIN9。

ADCCON格式如下:

151413……6543210

ECFLGPRSCENPRSCVLSEL_MUXSTDBMREAD_STARTENABLE_START

ADCDAT0格式如下:

1514131211109……0

UPDOWNAUTO_PSTXY_PST保留(0)转换结果

ADCCON、ADCDAT0的地址宏定义为:

#definerADCCON(*(volatileunsigned*)0x58000000)

#definerADCDAT0(*(volatileunsigned*)0x5800000c)

#definepref49

#definech3

intadc(void)

{rADCCON=(1<

14)|(pref<

6)|(ch<

3)|1;

//允许预分频,启动转换

while(rADCCON&

0x01==1);

//查询是否已经启动转换

0x8000==0);

//查询转换是否结束

returnrADCDAT0&

0x3ff;

//读取转换结果

voidmain()

{intadc_data=0,i;

100;

i++)

adc_data+=adc();

adc_data=adc_data/100;

printf("

adcaverageis:

%d\n"

,adc_data);

1、编写程序,将存储器从0x400000开始的200个字数据,传送到0x400600开始的区域。

解:

MOVR0,#0x400000

LDRR1,=0x400600

MOVR7,#200

LP:

LDRR2,[R0],#4

STRR2,[R1],#4

SUBSR7,R7,#1

BNELP

HERE:

BHERE

2、编写一程序,查找存储器从0x500000开始的200个字中为5的数目,将其结果存到0x600000中。

解:

MOVR0,#0x500000

MOVR1,#0

MOVR7,#200

LPLDRR2,[R0],#4

CMPR2,#5

BNENEXT

ADDR1,R1,#1

NEXTSUBSR7,R7,#1

BNELP

MOVR0,#0x600000

STRR1,[R0]

B$

3、实现1+2+……+N。

NEQU5;

常量的定义

AREAExample,CODE,READONLY;

定义段名属性等

ENTRY;

程序入口

CODE32;

ARM代码

START;

行标定义

LDRR0,=N;

R0赋值

MOVR2,R0;

R2充当计数器

MOVR0,#0;

R0←0

MOVR1,#0;

R1←0

LOOP;

行标

CMPR1,R2;

比较R1R2

BHIADD_END;

如果R1>

R2跳转到ADD_END

;

分支的实现

ADDR0,R0,R1;

R0←R0+R1

ADDR1,R1,#1;

R1←R1+1

BLOOP;

无条件跳转至LOOP

;

循环的实现

ADD_END;

BADD_END;

无条件跳转ADD_END

END;

代码结束

以实验平台PXA270为设计环境,试写出一段代码,能控制八段数码管以递减方式点亮显示(15分)

#include<

stdio.h>

#include"

register_variant.h"

#defineLED_CS2(*((volatileunsignedshortint*)(0x10300000)))//LED1andLED2

#defineLED_CS3(*((volatileunsignedshortint*)(0x10400000)))//LED3andLED4

voidDelay(unsignedintx){

unsignedinti,j,k;

for(i=0;

i<

=x;

i++)

for(j=0;

j<

0xff;

j++)

for(k=0;

k<

k++);

voiddummyOs(void){

LED_CS2=0x2479;

//12

LED_CS3=0x1930;

//34

while

(1){

Delay(300);

LED_CS2=0x3024;

//23

LED_CS3=0x1219;

//45

LED_CS2=0x1930;

LED_CS3=0x0212;

//56

LED_CS2=0x1219;

//45

LED_CS3=0x7802;

//67

LED_CS2=0x0212;

//56

LED_CS3=0x0078;

//78

LED_CS2=0x7802;

LED_CS3=0x1000;

//89

LED_CS2=0x0078;

LED_CS3=0x8f10;

//90

LED_CS2=0x1000;

LED_CS3=0x8f8f;

//00

LED_CS2=0x8f10;

LED_CS2=0x8f8f;

LED_CS2=0x2479;

LED_CS3=0x1930;

//34}}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2