📄 外部中断.lis
字号:
0068 .dbline 77
0068 ; PORTB=~num[(unsigned char )(digi%10)];//显示个位
0068 2AE0 ldi R18,10
006A 30E0 ldi R19,0
006C 0A2D mov R16,R10
006E 1127 clr R17
0070 00D0 rcall mod16s
0072 E02F mov R30,R16
0074 FF27 clr R31
0076 80E0 ldi R24,<_num
0078 90E0 ldi R25,>_num
007A E80F add R30,R24
007C F91F adc R31,R25
007E 2490 lpm R2,Z
0080 2094 com R2
0082 28BA out 0x18,R2
0084 .dbline 78
0084 ; PORTC=(0x1<<0);//开个位的显示
0084 81E0 ldi R24,1
0086 85BB out 0x15,R24
0088 .dbline 79
0088 ; delay_us(200);
0088 08EC ldi R16,200
008A 10E0 ldi R17,0
008C C9DF rcall _delay_us
008E .dbline 80
008E ; PORTC=0x0;//关显示
008E 2224 clr R2
0090 25BA out 0x15,R2
0092 .dbline -2
0092 L7:
0092 .dbline 0 ; func end
0092 A990 ld R10,y+
0094 0895 ret
0096 .dbsym l i 1 c
0096 .dbsym r digi 10 c
0096 .dbend
0096 .dbfunc e int_init _int_init fV
.even
0096 _int_init::
0096 .dbline -1
0096 .dbline 90
0096 ; }
0096 ;
0096 ; /************************************
0096 ; 用 途:打开外部中断
0096 ; 介 绍:
0096 ; 入口参数:
0096 ; 出口参数:
0096 ; *************************************/
0096 ; void int_init()
0096 ; {
0096 .dbline 91
0096 ; CLI();
0096 F894 cli
0098 .dbline 92
0098 ; PORTD|=(1<<PD2)|(1<<PD3);
0098 82B3 in R24,0x12
009A 8C60 ori R24,12
009C 82BB out 0x12,R24
009E .dbline 93
009E ; MCUCR|=(1<<ISC11)|(1<<ISC01);//3-0,外部中断定1,0的控制方式
009E 85B7 in R24,0x35
00A0 8A60 ori R24,10
00A2 85BF out 0x35,R24
00A4 .dbline 95
00A4 ; //MCUCR=3-2,0是低电平中断,1是下(降沿)和上(升沿)中断,2是下中断,3是上中断
00A4 ; GICR|=(1<<INT0)|(1<<INT1);//7,6外部中断1,0使能
00A4 8BB7 in R24,0x3b
00A6 806C ori R24,192
00A8 8BBF out 0x3b,R24
00AA .dbline 96
00AA ; SEI();
00AA 7894 sei
00AC .dbline -2
00AC L8:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbend
.area vector(rom, abs)
.org 2
0002 57C0 rjmp _init_0
.area text(rom, con, rel)
00AE .dbfile E:\xiaozhiyong2009\设计资料\项目设计\mega8_C语言常用程序\ICCAVR_mega8_外部中断\外部中断.c
00AE .dbfunc e init_0 _init_0 fV
.even
00AE _init_0::
00AE 8A93 st -y,R24
00B0 8FB7 in R24,0x3f
00B2 8A93 st -y,R24
00B4 .dbline -1
00B4 .dbline 107
00B4 ; }
00B4 ;
00B4 ; /************************************
00B4 ; 用 途:中断0服务子程序
00B4 ; 介 绍:
00B4 ; 入口参数:
00B4 ; 出口参数:
00B4 ; *************************************/
00B4 ; #pragma interrupt_handler init_0:2
00B4 ; void init_0()
00B4 ; {
00B4 .dbline 108
00B4 ; i--;
00B4 80910000 lds R24,_i
00B8 8150 subi R24,1
00BA 80930000 sts _i,R24
00BE .dbline 109
00BE ; if (i==0)i=99;
00BE 8823 tst R24
00C0 19F4 brne L10
00C2 X1:
00C2 .dbline 109
00C2 83E6 ldi R24,99
00C4 80930000 sts _i,R24
00C8 L10:
00C8 .dbline -2
00C8 L9:
00C8 .dbline 0 ; func end
00C8 8991 ld R24,y+
00CA 8FBF out 0x3f,R24
00CC 8991 ld R24,y+
00CE 1895 reti
00D0 .dbend
.area vector(rom, abs)
.org 4
0004 68C0 rjmp _init_1
.area text(rom, con, rel)
00D0 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\mega8_C语言常用程序\ICCAVR_mega8_外部中断\外部中断.c
00D0 .dbfunc e init_1 _init_1 fV
.even
00D0 _init_1::
00D0 2A92 st -y,R2
00D2 8A93 st -y,R24
00D4 9A93 st -y,R25
00D6 2FB6 in R2,0x3f
00D8 2A92 st -y,R2
00DA .dbline -1
00DA .dbline 120
00DA ; }
00DA ;
00DA ; /************************************
00DA ; 用 途:中断1服务子程序
00DA ; 介 绍:
00DA ; 入口参数:
00DA ; 出口参数:
00DA ; *************************************/
00DA ; #pragma interrupt_handler init_1:3
00DA ; void init_1()
00DA ; {
00DA .dbline 121
00DA ; i++;
00DA 80910000 lds R24,_i
00DE 8F5F subi R24,255 ; addi 1
00E0 80930000 sts _i,R24
00E4 .dbline 122
00E4 ; if (i==100)i=0;
00E4 8436 cpi R24,100
00E6 19F4 brne L13
00E8 X2:
00E8 .dbline 122
00E8 2224 clr R2
00EA 20920000 sts _i,R2
00EE L13:
00EE .dbline -2
00EE L12:
00EE .dbline 0 ; func end
00EE 2990 ld R2,y+
00F0 2FBE out 0x3f,R2
00F2 9991 ld R25,y+
00F4 8991 ld R24,y+
00F6 2990 ld R2,y+
00F8 1895 reti
00FA .dbend
00FA .dbfunc e main _main fV
.even
00FA _main::
00FA .dbline -1
00FA .dbline 126
00FA ; }
00FA ;
00FA ; void main()
00FA ; {
00FA .dbline 127
00FA ; port_init();
00FA 82DF rcall _port_init
00FC .dbline 128
00FC ; init_devices();
00FC 89DF rcall _init_devices
00FE .dbline 130
00FE ;
00FE ; int_init();//中断初始化
00FE CBDF rcall _int_init
0100 03C0 rjmp L17
0102 L16:
0102 .dbline 132
0102 ; while(1)
0102 ; {
0102 .dbline 133
0102 ; show_2_digit(i);
0102 00910000 lds R16,_i
0106 94DF rcall _show_2_digit
0108 .dbline 134
0108 ; }
0108 L17:
0108 .dbline 131
0108 FCCF rjmp L16
010A X3:
010A .dbline -2
010A L15:
010A .dbline 0 ; func end
010A 0895 ret
010C .dbend
010C ; }
010C ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -