汇编作业

蜂鸣器汇编:

.global _start
_start:
	LDR	R0,=0XE02000A0
	LDR	R1,[R0]
	BIC	R1,R1,#(0XF)
	ORR	R1,R1,#(0X1)
	STR	R1,[R0]
loop:
	LDR	R0,=0XE02000A4
	LDR	R1,[R0]
	MOV	R1,#0
	STR	R1,[R0]

	BL	delay

	LDR	R0,=0XE02000A4
	LDR	R1,[R0]
	MOV	R1,#1
	STR	R1,[R0]
	
	BL	delay

	b loop

delay:
	MOV R2,#0x3000000
temp:
	SUB R2,R2,#1
	CMP R2,#0
	BNE temp;

	mov PC,LR
	

流水灯

@# define rGPJ2CON  0xe0200280
@# define rGPJ2DAT  0xe0200284

.global _start
_start:
	@将GPJ2_0~3---->output
	LDR R0, =0xe0200280
	LDR R1, [R0]
	BIC R1, R1, #(0xff<<8)
	ORR R1, R1, #(0x11<<8)
	BIC R1, R1, #0xff
	ORR R1, R1, #0x11
	STR R1, [R0]

	@int i = 0
	MOV R4, #0  
	MOV R3, #1
	@全灭
	LDR R0, =0xe0200284
	LDR R1, [R0]
	ORR R1, R1, #0xf
	STR R1, [R0]

	@while(1)
loop:
	@亮
	LDR R0, =0xe0200284
	LDR R1, [R0]
	BIC R1, R1, R3, LSL R4
	STR R1, [R0]
	BL delay

	@灭
	LDR R0, =0xe0200284
	LDR R1, [R0]
	ORR R1, R1, R3, LSL R4	
	STR R1, [R0]
	BL delay

	ADD R4,R4,#1
	CMP	R4,#4
	MOVEQ	R4,#0
	BNE loop
	b loop
delay:
	MOV R2, #0x3000000
temp:
	SUB R2, R2, #1
	CMP R2, #0
	BNE temp
	MOV PC, LR

.end

一个按键控制灯(HOME键)

.global	_start
_start:
	@LED CONFIG
	LDR	R0,=0XE0200280
	LDR	R1,[R0]
	BIC	R1,#(0XFF<<8)
	ORR	R1,#(0X11<<8)
	BIC	R1,#(0XFF)
	ORR	R1,#(0X11)
	STR	R1,[R0]
	
	@KEY CONFIG
	LDR	R0,=0XE0200C40
	LDR	R1,[R0]
	BIC	R1,#(0XFF<<8)
	BIC	R1,#(0XFF)
	STR	R1,[R0]
	
	@LED DAT CONFIG
	LDR	R0,=0XE0200284
	LDR	R1,[R0]
	MOV	R1,#0XF
	STR	R1,[R0]

	MOV	R4,#2
	MOV	R3,#1
loop:
	LDR	R0,=0XE0200C44
	LDR	R1,[R0]
	LDR	R5,=0XE0200284
	LDR	R6,[R5]
	CMP	R1,#0XD
	BLEQ	delay
	CMP	R1,#0XD
	EOREQ	R6,R6,R3,LSL R4
	STR	R6,[R5]	
	STR	R1,[R0]	
	b loop

delay:
	MOV	R2,#0X6000000
temp:
	SUB	R2,R2,#1
	CMP	R2,#0
	MOVEQ	PC,LR
	BNE	temp

.end	
	

利用IRQ控制四个按键来控制四个LED,低电平外部触发

#include "int.h"

void int_init( void);
void intc_setvectaddr(unsigned long intnum, void (*handler)(void));
void intc_clearvectaddr(void);
void intc_enable(unsigned long intnum);

void isr_key(void)
{
	if((EXT_INT_3_PEND&0x1)==1)
	    GPJ2DAT ^= (1<<0);	//toggle
	if(((EXT_INT_3_PEND>>1)&0x1)==1)
	    GPJ2DAT ^= (1<<1);	//toggle
	if(((EXT_INT_3_PEND>>2)&0x1)==1)
	    GPJ2DAT ^= (1<<2);	//toggle
	if(((EXT_INT_3_PEND>>3)&0x1)==1)
	    GPJ2DAT ^= (1<<3);	//toggle
    intc_clearvectaddr();					
    EXT_INT_3_PEND |= 0XF<<0;			
}

int main(void)
{
	GPJ2CON &=~(0xffff);
	GPJ2CON |= (0x1111);
	int_init();
	GPH3CON = (0XFFFF);
	EXT_INT_3_CON	&=~(0XFFF);//低电平触发
	
	intc_setvectaddr(NUM_EINT16_31, isr_key);

	EXT_INT_3_MASK &= ~(0xF<<0);//不屏蔽中断

	intc_enable(NUM_EINT16_31);
	while (1);
}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值