⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int4.s

📁 这个程序是用atmega128芯片实现外部中断的一个例子
💻 S
字号:
	.module int4.c
	.area data(ram, con, rel)
_key::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\AVR学习板\复件实~1\int_4\int4.c
	.dbsym e key _key c
	.area text(rom, con, rel)
	.dbfile F:\AVR学习板\复件实~1\int_4\int4.c
	.dbfunc e ext_int0_isr _ext_int0_isr fV
;             aa -> R16
	.even
_ext_int0_isr::
	.dbline -1
	.dbline 7
; #include<iom128v.h>
; #define uchar unsigned char 
; #define uint unsigned int 
; 
; uchar key=0;
; void ext_int0_isr(void)
; {
	.dbline 8
;   uchar aa=1;
	ldi R16,1
	xjmp L3
L2:
	.dbline 10
;   while(aa)       //判断端口是否恢复高电平,有延时抗干扰
;   {
	.dbline 11
;   aa=!(PINE&(1<<4));
	sbic 0x1,4
	rjmp L5
	ldi R18,1
	ldi R19,0
	xjmp L6
L5:
	clr R18
	clr R19
L6:
	mov R16,R18
	.dbline 12
;   if(aa==0)
	tst R18
	brne L7
	.dbline 13
;     {
	.dbline 14
; 	key+=1;
	lds R24,_key
	subi R24,255    ; addi 1
	sts _key,R24
	.dbline 15
; 	aa=!(PINE&(1<<4));
	sbic 0x1,4
	rjmp L9
	ldi R18,1
	ldi R19,0
	xjmp L10
L9:
	clr R18
	clr R19
L10:
	mov R16,R18
	.dbline 16
; 	}
L7:
	.dbline 17
L3:
	.dbline 9
	tst R16
	brne L2
	.dbline -2
	.dbline 18
;   }
; }
L1:
	.dbline 0 ; func end
	ret
	.dbsym r aa 16 c
	.dbend
	.dbfunc e encoder _encoder fc
;            num -> R20
;            key -> R16
	.even
_encoder::
	xcall push_gset1
	.dbline -1
	.dbline 22
; 
; //数码管译码函数
; uchar encoder(uchar key)
; {
	.dbline 24
; uchar num;
; switch(key)
	mov R20,R16
	clr R21
	cpi R20,32
	ldi R30,0
	cpc R21,R30
	breq L20
	ldi R24,32
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L24
L23:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L15
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L16
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	breq L17
	cpi R20,8
	ldi R30,0
	cpc R21,R30
	breq L18
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	brlt L12
L25:
	cpi R20,16
	ldi R30,0
	cpc R21,R30
	breq L19
	xjmp L12
L24:
	cpi R20,64
	ldi R30,0
	cpc R21,R30
	breq L21
	cpi R20,64
	ldi R30,0
	cpc R21,R30
	brlt L12
L26:
	cpi R20,128
	ldi R30,0
	cpc R21,R30
	breq L22
	xjmp L12
X0:
	.dbline 25
; {
L15:
	.dbline 27
;   case 1:
;   num=0x79;break;
	ldi R20,121
	.dbline 27
	xjmp L13
L16:
	.dbline 29
;   case 2:
;   num=0x24;break;
	ldi R20,36
	.dbline 29
	xjmp L13
L17:
	.dbline 31
;   case 4:
;   num=0x30;break;
	ldi R20,48
	.dbline 31
	xjmp L13
L18:
	.dbline 33
;   case 8:
;   num=0x19;break;
	ldi R20,25
	.dbline 33
	xjmp L13
L19:
	.dbline 35
;   case 16:
;   num=0x12;break;
	ldi R20,18
	.dbline 35
	xjmp L13
L20:
	.dbline 37
;   case 32:
;   num=0x02;break;
	ldi R20,2
	.dbline 37
	xjmp L13
L21:
	.dbline 39
;   case 64:
;   num=0x78;break;
	ldi R20,120
	.dbline 39
	xjmp L13
L22:
	.dbline 41
;   case 128:
;   num=0x00;break;
	clr R20
	.dbline 41
L12:
L13:
	.dbline 43
; }
;   return(num);
	mov R16,R20
	.dbline -2
L11:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r num 20 c
	.dbsym r key 16 c
	.dbend
	.dbfunc e main _main fI
;            key -> R16
	.even
_main::
	.dbline -1
	.dbline 48
; }
; 
; //主函数
; main()
; {uchar key=0;
	.dbline 48
	clr R16
	.dbline 49
; DDRA=0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 50
; DDRE=0x00;
	clr R2
	out 0x2,R2
	.dbline 51
; PORTE=0xff;
	out 0x3,R24
	.dbline 52
; SREG=0x80;    //开全局中断
	ldi R24,128
	out 0x3f,R24
	.dbline 53
; EIMSK=0x10;   //开外部中断int_4,对应按键K5
	ldi R24,16
	out 0x39,R24
	.dbline 54
; EICRB=0xf0;
	ldi R24,240
	out 0x3a,R24
	.dbline 57
; 
; 
; DDRA=0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 58
; PORTA=0xff;
	out 0x1b,R24
	.dbline 59
; DDRC=0xff;
	out 0x14,R24
	.dbline 60
; PORTC=0xff;
	out 0x15,R24
	.dbline 61
; DDRE=0x00;
	out 0x2,R2
	.dbline 62
; PORTE=0xff;
	out 0x3,R24
	.dbline 63
; DDRF=0xf8;
	ldi R24,248
	sts 97,R24
L28:
	.dbline 64
L29:
	.dbline 64
	xjmp L28
X1:
	.dbline -2
	.dbline 66
; while(1);
; 
; }
L27:
	.dbline 0 ; func end
	ret
	.dbsym r key 16 c
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -