嵌入式系统编程题汇编Word格式.docx
- 文档编号:17949147
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:14
- 大小:67.25KB
嵌入式系统编程题汇编Word格式.docx
《嵌入式系统编程题汇编Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统编程题汇编Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
HALTBHALT;
等待跳转
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
END;
汇编结束
三:
从一一直加到一百
程序清单
(一)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;
跳转到主程序
END;
汇编结束
实验四
程序清单
(一)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}}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 编程 汇编