嵌入式系统原理程序题汇总

0、汇编实例

P67:
例1:该例要求完成18+8,并保存结果到R7寄存器中,指令代码如下:
AREA example1,CODE, READONLY;指明一个代码段名称为examplel
   ENTRY;指明程序的人口
start
   MOV R7, #18;R7中赋值18,这是第1条运行指令
   MOV R6, #8;R6中赋值8
   ADD R7, R7, R6;R7=R7 + R6
;下面指令用于返回调试器
stop
   MOV R0, # 0x18
   LDR R1, = 0x20026
   SWI 0xAB;软中断指令,将产生软中断异常,进入相应异常处理程序,执行编号为0xAB的例程
END;源程序结束标志

1、系统引导程序

P77:
;下而跳转到C语言的主函数
         IMPORT __main
         BL __main;转移到用户C语言的主函数,引导应用程序
         B
;下面是初始化堆栈的子函数
         TMPORT UserStack
         IMPORT SVCStack
         IMPORT UndefStack
         IMPORT IRQStack
         IMPORT AbortStack
         IMPORT FIQStack
InitStacks
         MRS R0,CPSR
         BIC R0, R0, # MODEMASK
         ORR,R1, R0, # UNDEFMODE|NOINT
         MSR CPSR_cxsf, R1;设置工作模式为未定义模式
         LDR SP, UndefStack
         
         ORR R1, R0, # ABORTMODE| NOINT
         MSR CPSR_cxsf, R1;设置工作模式为中止模式
         LDR SP, = AbortStack

         ORR R1, R0, # IRQMODE| NOINT
         MSR CPSR_cxsf, R1;设置工作模式为IRQ模式
         LDR SP, = IRQStack
         
         ORR J R1, R0, # FIQMODE| NOINT
         MSR CPSR_cxsf, R1;设置工作模式为FIQ模式
         LDR SP, =FIQStack
         
         ORR R1, RO, # SVCMODE| NOINT
         MSR CPSR_ cxsf, R1;设置工作模式为管理模式
         LDR SP, =SVCStack
         MOV PC,LR;子程序返回
         END;Stratup.s程序结束

2、GPIO端口(LED灯/蜂鸣器)

P175
//LED指示灯闪烁.蜂鸣器鸣叫进行报警,选择不需要做专用功能用的GPIO引脚。本例中选用了端口E、端口F(建:这果侧设了系统中不需要连AC_97接口、以及外部中断请求EINT0~EINT7),其中端口E的GPE3引脚输出控制LED指示灯,GPE4引脚输出控制蜂鸣器,如图62所示,端口F用作8位的状态数据输入。
//** 包含两个头文件,头文件中定义了相关的寄存器变量,如rGPECON等
#include”reg2440. h"
#include "isr. h"
——————————————————————————————————————————————————————————————————
    
//**也端口E的GPE4用作蜂鸣器输出控制端,宏定义蜂鸣器的开、关,高电平为鸣叫
#define beepon()  {rGPEDAT=rGPEDAT|Ox0010;}//高电平
    ;0000 0000 0001 0000 改倒数第5#define beepoff() {rGPEDAT=rGPEDAT&0xffef;} //低电平
    ;1111 1111 1110 1111 改倒数第5//**端口E的GPE3用作LED输出控制端,宏定义LED的亮、灭,低电平为亮
#define ledlight() {rGPEDAT= rGPEDAT&0xfff7}//低电平
    ;1111 1111 1111 0111 改倒数第4#define ledclear() {rGPEDAT- rGPEDAT|0x0008;}//高电平
    ;0000 0000 0000 1000 改倒数第4位
        
——————————————————————————————————————————————————————————————————
        
//**函数名: Main()
//**参数:无
//**返回值:无
void Main(Void)
{
   
      INT16U termp;
      INT8U oldportf= oxIf, newportf;
——————————————————————————————————————————————————————————————————   
    
//初始化端口E,使GPE4.CPE3为输出01    
rGPECON=((rGPECON|0x00000140)&0xfffffd7f);
        ;00 01 01 00 0000
        ;11 01 01 11 1111
        ;除寄存器位01外其他位保留00|11
            
——————————————————————————————————————————————————————————————————              
beepoff();//关蜂鸣器
//初始化端口F,使所有位均为输入00
rGPFCON= rGPFCON&0x0000
while(1)
{
   
//**读端口F,用于判断输入的状态数据是否变化
newportf=rGPFDAT
//读入状态数据化具低电平时,则蜂鸣器发声,LED 指示灯闪烁
if(newportf!= oldportf)
{
   
    ledlight
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值