📄 int4.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 + -