S3C2440 蜂鸣器 汇编语言,S3C2440 点亮led灯详解(基于MDK) | 勤奋的小青蛙

这个程序也比较简单,相对上一篇博文,具有一样的编码过程,不过还是把贴出来分享下.

首先看原理图(LED):

4984a9d5d41efa60cf5de65d2c9711d7.png

e429220e595b57da9007ae10c87af920.png通过看这个原理图,我们晓得如下:

1:nLED_1/2/3/4如果是低电平,那么LED将会点亮;

2:nLED_1/2/3/4对应的IO口是:GPB5/6/7/8

好的,那么我们看芯片手册,往往我们要看的是GPBCON, GPBDAT,GPBUP.

b4cd56a6d77a0bf2973c892f9a692184.png

393721a9951d044e1f7fa367d9a1d840.png通过上面的手册,我们可以编码如下:

;效果:led亮,beeper蜂鸣;led灭,beeper停止蜂鸣

AREA ledwithbeeper, CODE, READWRITE ;定义代码段,可读可写

ENTRY ;定义程序入口

pGPBCON EQU 0x56000010 ;定义宏GPBCON

pGPBDAT EQU 0x56000014 ;定义宏GPBDAT

pGPBUPEQU 0x56000018 ;定义宏GPBUP

start

LDRR0, =pGPBCON;加载pGPBCON

LDR R1, [R0];R0的值赋给R1,进而对R1进行操作

BIC R1, R1, #0x3 ;最低两位清0

BIC R1, R1, #(0xff << 10) ;GPB5/6/7/8对应的10,11,12,13...17清零

ORR R1, #0x01 ;R1最低位置1

ORR R1, R1, #(0x55 << 10) ;给GPB5/6/7/8设置为01输出模式,参考芯片对应寄存器设置

STR R1, [R0] ;将配置好的R1赋值给R0

LDR R0, =pGPBUP ;加载GPBUP

MOV R1, #0xff ;将上拉电阻禁用

STR R1, [R0] ;配置好的R1写入R0

led_on

LDR R0, =pGPBDAT ;GPBDAT加载到R0

MOV R1, #0x01 ;给led端口写低电平,而且蜂鸣器的第一位置为高电平

STR R1, [R0] ;将配置好的R1写进去

MOV R2, #0x100000 ;延迟函数初始化R2

BLdelay ;跳转到delay处,并且保存PC值到LR寄存器

Bled_off ;执行完delay代码跳转到led_off处

led_off

LDR R0, =pGPBDAT ;GPBDAT加载到R0

MOV R1, #0x1e0 ;给led端口写高电平,而且蜂鸣器的第一位置为低电平

STR R1, [R0] ;将配置好的重新写入GPBDAT寄存器

MOV R2, #0x100000 ;延迟函数初始化R2

BLdelay ;跳转到delay处,并且保存PC值到LR寄存器

Bled_on ;执行完delay代码跳转到led_off处

delay

SUB R2, R2, #0x01 ;给R2赋值

CMP R2, #0x0 ;比较R2跟0的大小

BNEdelay ;如果不相等,就接着执行延迟

MOV PC, LR ;如果相等了,就直接从LR读取上次保存的,也就是跳出程序

NOP ;空指令

END;代码结束标志

具体源代码可以在这里下载到:

S3C2440 点亮led灯详解(基于MDK)源码下载

文章的脚注信息由WordPress的wp-posturl插件自动生成

|2|left

打赏

1b6439c6a040252321edad911c85491b.png微信扫一扫,打赏作者吧~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值