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

📄 模拟比较器.lis

📁 AVR之ATMega16
💻 LIS
字号:
                        .module _模拟比较器.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\模拟比较器/delay.h
 0000                   .dbfunc e DelayUS _DelayUS fV
 0000           ;           time -> R16,R17
                        .even
 0000           _DelayUS::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; //内部晶振 8M
 0000           ; #include <ioM16v.h>
 0000           ; #include <macros.h>
 0000           ; #include"delay.h"
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; /*------宏定义------*/
 0000           ; #define uchar  unsigned char
 0000 02C0              xjmp L3
 0002           L2:
 0002                   .dbline 11
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006           L3:
 0006                   .dbline 10
 0006           ; #define uint   unsigned int
 0006 81E0              ldi R24,1
 0008 90E0              ldi R25,0
 000A 8017              cp R24,R16
 000C 9107              cpc R25,R17
 000E C8F3              brlo L2
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbsym r time 16 i
 0012                   .dbend
 0012                   .dbfunc e DelayMS _DelayMS fV
 0012           ;              i -> R20,R21
 0012           ;           time -> R16,R17
                        .even
 0012           _DelayMS::
 0012 0E940000          xcall push_gset1
 0016                   .dbline -1
 0016                   .dbline 20
 0016           ; #define LED_on   PORTA&=~BIT(PA0)
 0016           ; #define LED_off  PORTA|=BIT(PA0)
 0016           ; 
 0016           ; //端口初始化
 0016           ; void port_init(void)
 0016           ; {
 0016           ;  PORTA = 0xFF;//端口初始化
 0016           ;  DDRA  = 0xFF;
 0016           ;  PORTB = 0x00;
 0016           ;  DDRB  = 0x00;
 0016 09C0              xjmp L7
 0018           L6:
 0018                   .dbline 23
 0018           ;  PORTC = 0x00;
 0018           ;  DDRC  = 0x00;
 0018           ;  PORTD = 0x00;
 0018                   .dbline 24
 0018           ;  DDRD  = 0x00;
 0018 41E0              ldi R20,1
 001A 50E0              ldi R21,0
 001C 02C0              xjmp L12
 001E           L9:
 001E                   .dbline 25
 001E           L10:
 001E                   .dbline 24
 001E 4F5F              subi R20,255  ; offset = 1
 0020 5F4F              sbci R21,255
 0022           L12:
 0022                   .dbline 24
 0022 4D38              cpi R20,141
 0024 E0E0              ldi R30,0
 0026 5E07              cpc R21,R30
 0028 D0F3              brlo L9
 002A                   .dbline 26
 002A           L7:
 002A                   .dbline 22
 002A 1801              movw R2,R16
 002C 0150              subi R16,1
 002E 1040              sbci R17,0
 0030 2220              tst R2
 0032 91F7              brne L6
 0034 3320              tst R3
 0036 81F7              brne L6
 0038           X0:
 0038                   .dbline -2
 0038           L5:
 0038 0E940000          xcall pop_gset1
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbsym r i 20 i
 003E                   .dbsym r time 16 i
 003E                   .dbend
 003E                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\模拟比较器\模拟比较器.c
 003E                   .dbfunc e port_init _port_init fV
                        .even
 003E           _port_init::
 003E                   .dbline -1
 003E                   .dbline 16
 003E                   .dbline 17
 003E 8FEF              ldi R24,255
 0040 8BBB              out 0x1b,R24
 0042                   .dbline 18
 0042 8ABB              out 0x1a,R24
 0044                   .dbline 19
 0044 2224              clr R2
 0046 28BA              out 0x18,R2
 0048                   .dbline 20
 0048 27BA              out 0x17,R2
 004A                   .dbline 21
 004A 25BA              out 0x15,R2
 004C                   .dbline 22
 004C 24BA              out 0x14,R2
 004E                   .dbline 23
 004E 22BA              out 0x12,R2
 0050                   .dbline 24
 0050 21BA              out 0x11,R2
 0052                   .dbline -2
 0052           L13:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbend
 0054                   .dbfunc e comparator_init _comparator_init fV
                        .even
 0054           _comparator_init::
 0054                   .dbline -1
 0054                   .dbline 30
 0054           ; }
 0054           ; 
 0054           ; 
 0054           ; //模拟比较器初始化
 0054           ; void comparator_init(void)
 0054           ; {
 0054                   .dbline 31
 0054           ;  ACSR &= ~BIT(ACIE);//确保修改时不产生中断
 0054 4398              cbi 0x8,3
 0056                   .dbline 32
 0056           ;  ACSR  = 0x48;//比较输出器变化触发中断
 0056 88E4              ldi R24,72
 0058 88B9              out 0x8,R24
 005A                   .dbline -2
 005A           L14:
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbend
                        .area vector(rom, abs)
                        .org 64
 0040 0C942E00          jmp _ana_comp_isr
                        .area text(rom, con, rel)
 005C                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\模拟比较器\模拟比较器.c
 005C                   .dbfunc e ana_comp_isr _ana_comp_isr fV
                        .even
 005C           _ana_comp_isr::
 005C 0E940000          xcall push_lset
 0060                   .dbline -1
 0060                   .dbline 39
 0060           ; }
 0060           ; 
 0060           ; 
 0060           ; //模拟比较中断函数
 0060           ; #pragma interrupt_handler ana_comp_isr:17
 0060           ; void ana_comp_isr(void)
 0060           ; {
 0060                   .dbline 40
 0060           ;  DelayUS(10);
 0060 0AE0              ldi R16,10
 0062 10E0              ldi R17,0
 0064 CDDF              xcall _DelayUS
 0066                   .dbline 42
 0066           ; 
 0066           ;     if (ACSR&(1<<ACO))  //检测ACO
 0066 459B              sbis 0x8,5
 0068 02C0              rjmp L16
 006A                   .dbline 44
 006A           ; 
 006A           ;            LED_on;                 //如果LED亮
 006A D898              cbi 0x1b,0
 006C 01C0              xjmp L17
 006E           L16:
 006E                   .dbline 48
 006E           ; 
 006E           ;     else
 006E           ; 
 006E           ;            LED_off;               //否则 LED灭
 006E D89A              sbi 0x1b,0
 0070           L17:
 0070                   .dbline 50
 0070           ; 
 0070           ;    DelayMS(200);           //当电压差接近0V时,模拟比较器会产生临界抖动,故延时200mS令肉眼能看到    
 0070 08EC              ldi R16,200
 0072 10E0              ldi R17,0
 0074 CEDF              xcall _DelayMS
 0076                   .dbline -2
 0076           L15:
 0076 0E940000          xcall pop_lset
 007A                   .dbline 0 ; func end
 007A 1895              reti
 007C                   .dbend
 007C                   .dbfunc e init_devices _init_devices fV
                        .even
 007C           _init_devices::
 007C                   .dbline -1
 007C                   .dbline 57
 007C           ; 
 007C           ; //通过判断ACO位来知道比较结果
 007C           ; }
 007C           ; 
 007C           ; 
 007C           ; void init_devices(void)
 007C           ; {
 007C                   .dbline 58
 007C           ;  CLI(); //禁止所有中断
 007C F894              cli
 007E                   .dbline 59
 007E           ;  MCUCR  = 0x00;//INT0、INT1中断触发方式
 007E 2224              clr R2
 0080 25BE              out 0x35,R2
 0082                   .dbline 60
 0082           ;  MCUCSR = 0x80;//禁止JTAG
 0082 80E8              ldi R24,128
 0084 84BF              out 0x34,R24
 0086                   .dbline 61
 0086           ;  GICR   = 0x00;//外部中断使能
 0086 2BBE              out 0x3b,R2
 0088                   .dbline 62
 0088           ;  port_init();
 0088 DADF              xcall _port_init
 008A                   .dbline 63
 008A           ;  comparator_init();
 008A E4DF              xcall _comparator_init
 008C                   .dbline 64
 008C           ;  SEI();//开全局中断
 008C 7894              sei
 008E                   .dbline -2
 008E           L18:
 008E                   .dbline 0 ; func end
 008E 0895              ret
 0090                   .dbend
 0090                   .dbfunc e main _main fV
                        .even
 0090           _main::
 0090                   .dbline -1
 0090                   .dbline 68
 0090           ; }
 0090           ; //主函数
 0090           ; void main(void)
 0090           ; {
 0090                   .dbline 69
 0090           ;  init_devices();
 0090 F5DF              xcall _init_devices
 0092 01C0              xjmp L21
 0094           L20:
 0094                   .dbline 72
 0094                   .dbline 73
 0094 0000              nop
 0096                   .dbline 74
 0096           L21:
 0096                   .dbline 71
 0096 FECF              xjmp L20
 0098           X1:
 0098                   .dbline -2
 0098           L19:
 0098                   .dbline 0 ; func end
 0098 0895              ret
 009A                   .dbend

⌨️ 快捷键说明

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