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

📄 int0+1.lis

📁 详细介绍M8两版间通讯
💻 LIS
字号:
                        .module INT0+1.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\Mega8程序\TCXO评估板\Main\INT0+1.c
 0000                   .dbfunc e delay_ms _delay_ms fV
 0000           ;      loopcount -> R20
 0000           ;              i -> R10
 0000           ;             ms -> R22,R23
                        .even
 0000           _delay_ms::
 0000 00D0              rcall push_gset3
 0002 B801              movw R22,R16
 0004                   .dbline -1
 0004                   .dbline 6
 0004           ; /*INT0、INT1使用中断方式,一个中断处理函数 实现对INT0/INT1按键的处理*/
 0004           ; #include <iom8v.h>
 0004           ; #include <macros.h>
 0004           ; extern void uart_init(void);
 0004           ; void delay_ms(unsigned int ms)
 0004           ;  {
 0004                   .dbline 8
 0004           ;       unsigned char i,loopcount;
 0004           ;       ms=4*ms+1;
 0004 04E0              ldi R16,4
 0006 10E0              ldi R17,0
 0008 9B01              movw R18,R22
 000A 00D0              rcall empy16s
 000C B801              movw R22,R16
 000E 6F5F              subi R22,255  ; offset = 1
 0010 7F4F              sbci R23,255
 0012                   .dbline 9
 0012           ;       for(loopcount=0;loopcount<ms;loopcount++)//外循环
 0012 4427              clr R20
 0014 07C0              rjmp L5
 0016           L2:
 0016                   .dbline 10
 0016           ;        {
 0016                   .dbline 11
 0016 AA24              clr R10
 0018 01C0              rjmp L9
 001A           L6:
 001A                   .dbline 11
 001A           L7:
 001A                   .dbline 11
 001A A394              inc R10
 001C           L9:
 001C                   .dbline 11
 001C 8BEF              ldi R24,251
 001E 8A15              cp R24,R10
 0020 E0F7              brsh L6
 0022                   .dbline 13
 0022           L3:
 0022                   .dbline 9
 0022 4395              inc R20
 0024           L5:
 0024                   .dbline 9
 0024 242E              mov R2,R20
 0026 3324              clr R3
 0028 2616              cp R2,R22
 002A 3706              cpc R3,R23
 002C A0F3              brlo L2
 002E                   .dbline -2
 002E           L1:
 002E 00D0              rcall pop_gset3
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r loopcount 20 c
 0032                   .dbsym r i 10 c
 0032                   .dbsym r ms 22 i
 0032                   .dbend
 0032                   .dbfunc e int_init _int_init fV
                        .even
 0032           _int_init::
 0032                   .dbline -1
 0032                   .dbline 16
 0032           ;               for(i=0;i<=251;i++);
 0032           ;               //内循环
 0032           ;        }
 0032           ;  }
 0032           ; void int_init(void)
 0032           ; {GICR  = 0xC0;}
 0032                   .dbline 16
 0032 80EC              ldi R24,192
 0034 8BBF              out 0x3b,R24
 0036                   .dbline -2
 0036           L10:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbend
                        .area vector(rom, abs)
                        .org 2
 0002 1CC0              rjmp _int_isr
                        .area text(rom, con, rel)
 0038                   .dbfile G:\Mega8程序\TCXO评估板\Main\INT0+1.c
                        .area vector(rom, abs)
                        .org 4
 0004 1CC0              rjmp _int_isr
                        .area text(rom, con, rel)
 0038                   .dbfile G:\Mega8程序\TCXO评估板\Main\INT0+1.c
 0038                   .dbfunc e int_isr _int_isr fV
 0038           ;      loopcount -> <dead>
 0038           ;              i -> R20
                        .even
 0038           _int_isr::
 0038 00D0              rcall push_lset
 003A 00D0              rcall push_gset1
 003C                   .dbline -1
 003C                   .dbline 20
 003C           ; //初始化int0,int1中断使能
 003C           ; #pragma interrupt_handler int_isr:iv_INT0 int_isr:iv_INT1
 003C           ; void int_isr(void)
 003C           ;  {
 003C                   .dbline 23
 003C           ;       unsigned char i;
 003C           ;       unsigned char loopcount;
 003C           ;       delay_ms(50);//延时10ms后检测按键是否有效,进行软防抖
 003C 02E3              ldi R16,50
 003E 10E0              ldi R17,0
 0040 DFDF              rcall _delay_ms
 0042                   .dbline 27
 0042           ;       /*for (loopcount=0;loopcount<41;loopcount++)
 0042           ;               {for(i=0;i<251;i++);}
 0042           ;       //不使用延时函数而直接使用循环进行延时*/
 0042           ;       i=PIND&0x0c;//检测键盘是否仍按下
 0042 40B3              in R20,0x10
 0044 4C70              andi R20,12
 0046                   .dbline 28
 0046           ;       if(i==0x0c) return;//按键误触发
 0046 4C30              cpi R20,12
 0048 09F4              brne L12
 004A                   .dbline 28
 004A 36C0              rjmp L11
 004C           L12:
 004C                   .dbline 30
 004C           ;       else
 004C           ;        {
 004C                   .dbline 31
 004C           ;               if(i==0x08)//INT0键按下
 004C 4830              cpi R20,8
 004E 91F4              brne L14
 0050                   .dbline 32
 0050           ;                {
 0050                   .dbline 33
 0050           ;                       if (OCR1A<3890) OCR1A+=205;//递增
 0050 8AB5              in R24,0x2a
 0052 9BB5              in R25,0x2b
 0054 8233              cpi R24,50
 0056 EFE0              ldi R30,15
 0058 9E07              cpc R25,R30
 005A 38F4              brsh L16
 005C                   .dbline 33
 005C 8AB5              in R24,0x2a
 005E 9BB5              in R25,0x2b
 0060 8353              subi R24,51  ; offset = 205
 0062 9F4F              sbci R25,255
 0064 9BBD              out 0x2b,R25
 0066 8ABD              out 0x2a,R24
 0068 1EC0              rjmp L15
 006A           L16:
 006A                   .dbline 34
 006A           ;                       else OCR1A=0x0fff;
 006A 8FEF              ldi R24,4095
 006C 9FE0              ldi R25,15
 006E 9BBD              out 0x2b,R25
 0070 8ABD              out 0x2a,R24
 0072                   .dbline 36
 0072           ;                       //12位满幅值,防止出现数据变为负向数值
 0072           ;                }
 0072 19C0              rjmp L15
 0074           L14:
 0074                   .dbline 37
 0074           ;               else if(i==0x04)//INT1键按下
 0074 4430              cpi R20,4
 0076 99F4              brne L18
 0078                   .dbline 38
 0078           ;                {
 0078                   .dbline 39
 0078           ;                       if (OCR1A>205) OCR1A-=205;//递减
 0078 8DEC              ldi R24,205
 007A 90E0              ldi R25,0
 007C 2AB4              in R2,0x2a
 007E 3BB4              in R3,0x2b
 0080 8215              cp R24,R2
 0082 9305              cpc R25,R3
 0084 38F4              brsh L20
 0086                   .dbline 39
 0086 8AB5              in R24,0x2a
 0088 9BB5              in R25,0x2b
 008A 8D5C              subi R24,205
 008C 9040              sbci R25,0
 008E 9BBD              out 0x2b,R25
 0090 8ABD              out 0x2a,R24
 0092 09C0              rjmp L19
 0094           L20:
 0094                   .dbline 40
 0094           ;                       else OCR1A=0;
 0094 2224              clr R2
 0096 3324              clr R3
 0098 3BBC              out 0x2b,R3
 009A 2ABC              out 0x2a,R2
 009C                   .dbline 41
 009C           ;                }
 009C 04C0              rjmp L19
 009E           L18:
 009E                   .dbline 42
 009E           ;               else if(i==0x00) UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
 009E 4423              tst R20
 00A0 11F4              brne L22
 00A2                   .dbline 42
 00A2 88E9              ldi R24,152
 00A4 8AB9              out 0xa,R24
 00A6           L22:
 00A6           L19:
 00A6           L15:
 00A6                   .dbline 44
 00A6           ;               //两键同时按下,重新切换到USART中,允许接收中断、发送和接收
 00A6           ;        }
 00A6                   .dbline 45
 00A6           ;       GICR  = 0x00;
 00A6 2224              clr R2
 00A8 2BBE              out 0x3b,R2
 00AA                   .dbline 47
 00AA           ;       //int0,int1禁止使能
 00AA           ;       SEI();
 00AA 7894              sei
 00AC           L24:
 00AC                   .dbline 48
 00AC           L25:
 00AC                   .dbline 48
 00AC           ;       while ((PIND&0x0c)!=0x0c);
 00AC 80B3              in R24,0x10
 00AE 8C70              andi R24,12
 00B0 8C30              cpi R24,12
 00B2 E1F7              brne L24
 00B4                   .dbline 50
 00B4           ;       //检查按键释放
 00B4           ;       GICR  = 0xC0;
 00B4 80EC              ldi R24,192
 00B6 8BBF              out 0x3b,R24
 00B8                   .dbline -2
 00B8           L11:
 00B8 00D0              rcall pop_gset1
 00BA 00D0              rcall pop_lset
 00BC                   .dbline 0 ; func end
 00BC 1895              reti
 00BE                   .dbsym l loopcount 1 c
 00BE                   .dbsym r i 20 c
 00BE                   .dbend

⌨️ 快捷键说明

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