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

📄 模拟比较器.lst

📁 AVR之ATMega16
💻 LST
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E0093  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\模拟比较器\delay.h
(0001) #define xtal  1                      //1MS
(0002) /************************************************************
(0003) *   函数名称:void DelayUS(unsigned int time)
(0004) *   功    能:软件延时1.1Us 
(0005) *   入口参数:time 延时时间
(0006) *   出口参数:无
(0007) ************************************************************/
(0008) void DelayUS(unsigned int time)
(0009) {   
_DelayUS:
  time                 --> R16
    004B C002      RJMP	0x004E
(0010)      while(time>1)
(0011) 	    time--; 
    004C 5001      SUBI	R16,1
    004D 4010      SBCI	R17,0
    004E E081      LDI	R24,1
    004F E090      LDI	R25,0
    0050 1780      CP	R24,R16
    0051 0791      CPC	R25,R17
    0052 F3C8      BCS	0x004C
    0053 9508      RET
_DelayMS:
  i                    --> R20
  time                 --> R16
    0054 940E00A0  CALL	push_gset1
(0012) }
(0013) /************************************************************
(0014) *   函数名称:void DelayMS(unsigned int time)
(0015) *   功    能:软件延时  1/1000s
(0016) *   入口参数:time 延时时间 MS  
(0017) *   出口参数:无
(0018) ************************************************************/
(0019) void DelayMS (unsigned int time)
(0020) {
    0056 C009      RJMP	0x0060
(0021)     unsigned int i;
(0022)     while(time--)	
(0023) 	{
(0024) 	  for(i=1;i<(unsigned int)(xtal*143-2);i++)
    0057 E041      LDI	R20,1
    0058 E050      LDI	R21,0
    0059 C002      RJMP	0x005C
    005A 5F4F      SUBI	R20,0xFF
    005B 4F5F      SBCI	R21,0xFF
    005C 384D      CPI	R20,0x8D
    005D E0E0      LDI	R30,0
    005E 075E      CPC	R21,R30
    005F F3D0      BCS	0x005A
    0060 0118      MOVW	R2,R16
    0061 5001      SUBI	R16,1
    0062 4010      SBCI	R17,0
    0063 2022      TST	R2
    0064 F791      BNE	0x0057
    0065 2033      TST	R3
    0066 F781      BNE	0x0057
    0067 940E00A3  CALL	pop_gset1
    0069 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\模拟比较器\模拟比较器.c
(0001) //内部晶振 8M
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include"delay.h"
(0005) 
(0006) 
(0007) 
(0008) /*------宏定义------*/
(0009) #define uchar	 unsigned char
(0010) #define uint	 unsigned int
(0011) #define LED_on   PORTA&=~BIT(PA0)
(0012) #define LED_off  PORTA|=BIT(PA0)
(0013) 
(0014) //端口初始化
(0015) void port_init(void)
(0016) {
(0017)  PORTA = 0xFF;//端口初始化
_port_init:
    006A EF8F      LDI	R24,0xFF
    006B BB8B      OUT	0x1B,R24
(0018)  DDRA  = 0xFF;
    006C BB8A      OUT	0x1A,R24
(0019)  PORTB = 0x00;
    006D 2422      CLR	R2
    006E BA28      OUT	0x18,R2
(0020)  DDRB  = 0x00;
    006F BA27      OUT	0x17,R2
(0021)  PORTC = 0x00;
    0070 BA25      OUT	0x15,R2
(0022)  DDRC  = 0x00;
    0071 BA24      OUT	0x14,R2
(0023)  PORTD = 0x00;
    0072 BA22      OUT	0x12,R2
(0024)  DDRD  = 0x00;
    0073 BA21      OUT	0x11,R2
    0074 9508      RET
(0025) }
(0026) 
(0027) 
(0028) //模拟比较器初始化
(0029) void comparator_init(void)
(0030) {
(0031)  ACSR &= ~BIT(ACIE);//确保修改时不产生中断
_comparator_init:
    0075 9843      CBI	0x08,3
(0032)  ACSR  = 0x48;//比较输出器变化触发中断
    0076 E488      LDI	R24,0x48
    0077 B988      OUT	0x08,R24
    0078 9508      RET
_ana_comp_isr:
    0079 940E00B7  CALL	push_lset
(0033) }
(0034) 
(0035) 
(0036) //模拟比较中断函数
(0037) #pragma interrupt_handler ana_comp_isr:17
(0038) void ana_comp_isr(void)
(0039) {
(0040)  DelayUS(10);
    007B E00A      LDI	R16,0xA
    007C E010      LDI	R17,0
    007D DFCD      RCALL	_DelayUS
(0041) 
(0042)     if (ACSR&(1<<ACO))  //检测ACO
    007E 9B45      SBIS	0x08,5
    007F C002      RJMP	0x0082
(0043) 
(0044)            LED_on;                 //如果LED亮
    0080 98D8      CBI	0x1B,0
    0081 C001      RJMP	0x0083
(0045) 
(0046)     else
(0047) 
(0048)            LED_off;               //否则 LED灭
    0082 9AD8      SBI	0x1B,0
(0049) 
(0050)    DelayMS(200);           //当电压差接近0V时,模拟比较器会产生临界抖动,故延时200mS令肉眼能看到    
    0083 EC08      LDI	R16,0xC8
    0084 E010      LDI	R17,0
    0085 DFCE      RCALL	_DelayMS
    0086 940E00CE  CALL	pop_lset
    0088 9518      RETI
(0051) 
(0052) //通过判断ACO位来知道比较结果
(0053) }
(0054) 
(0055) 
(0056) void init_devices(void)
(0057) {
(0058)  CLI(); //禁止所有中断
_init_devices:
    0089 94F8      BCLR	7
(0059)  MCUCR  = 0x00;//INT0、INT1中断触发方式
    008A 2422      CLR	R2
    008B BE25      OUT	0x35,R2
(0060)  MCUCSR = 0x80;//禁止JTAG
    008C E880      LDI	R24,0x80
    008D BF84      OUT	0x34,R24
(0061)  GICR   = 0x00;//外部中断使能
    008E BE2B      OUT	0x3B,R2
(0062)  port_init();
    008F DFDA      RCALL	_port_init
(0063)  comparator_init();
    0090 DFE4      RCALL	_comparator_init
(0064)  SEI();//开全局中断
    0091 9478      BSET	7
    0092 9508      RET
(0065) }
(0066) //主函数
(0067) void main(void)
(0068) {
(0069)  init_devices();
_main:
    0093 DFF5      RCALL	_init_devices
    0094 C001      RJMP	0x0096
(0070)  //在这继续添加你的代码
(0071)  while(1)
(0072)  {
(0073)   NOP();
FILE: <library>
    0095 0000      NOP
    0096 CFFE      RJMP	0x0095
    0097 9508      RET
push_gset5:
    0098 92FA      ST	R15,-Y
    0099 92EA      ST	R14,-Y
push_gset4:
    009A 92DA      ST	R13,-Y
    009B 92CA      ST	R12,-Y
push_gset3:
    009C 92BA      ST	R11,-Y
    009D 92AA      ST	R10,-Y
push_gset2:
    009E 937A      ST	R23,-Y
    009F 936A      ST	R22,-Y
push_gset1:
    00A0 935A      ST	R21,-Y
    00A1 934A      ST	R20,-Y
    00A2 9508      RET
pop_gset1:
    00A3 E0E1      LDI	R30,1
pop:
    00A4 9149      LD	R20,Y+
    00A5 9159      LD	R21,Y+
    00A6 FDE0      SBRC	R30,0
    00A7 9508      RET
    00A8 9169      LD	R22,Y+
    00A9 9179      LD	R23,Y+
    00AA FDE1      SBRC	R30,1
    00AB 9508      RET
    00AC 90A9      LD	R10,Y+
    00AD 90B9      LD	R11,Y+
    00AE FDE2      SBRC	R30,2
    00AF 9508      RET
    00B0 90C9      LD	R12,Y+
    00B1 90D9      LD	R13,Y+
    00B2 FDE3      SBRC	R30,3
    00B3 9508      RET
    00B4 90E9      LD	R14,Y+
    00B5 90F9      LD	R15,Y+
    00B6 9508      RET
push_lset:
    00B7 93FA      ST	R31,-Y
    00B8 93EA      ST	R30,-Y
    00B9 93BA      ST	R27,-Y
    00BA 93AA      ST	R26,-Y
    00BB 939A      ST	R25,-Y
    00BC 938A      ST	R24,-Y
    00BD 933A      ST	R19,-Y
    00BE 932A      ST	R18,-Y
    00BF 931A      ST	R17,-Y
    00C0 930A      ST	R16,-Y
    00C1 929A      ST	R9,-Y
    00C2 928A      ST	R8,-Y
    00C3 927A      ST	R7,-Y
    00C4 926A      ST	R6,-Y
    00C5 925A      ST	R5,-Y
    00C6 924A      ST	R4,-Y
    00C7 923A      ST	R3,-Y
    00C8 922A      ST	R2,-Y
    00C9 921A      ST	R1,-Y
    00CA 920A      ST	R0,-Y
    00CB B60F      IN	R0,0x3F
    00CC 920A      ST	R0,-Y
    00CD 9508      RET
pop_lset:
    00CE 9009      LD	R0,Y+
    00CF BE0F      OUT	0x3F,R0
    00D0 9009      LD	R0,Y+
    00D1 9019      LD	R1,Y+
    00D2 9029      LD	R2,Y+
    00D3 9039      LD	R3,Y+
    00D4 9049      LD	R4,Y+
    00D5 9059      LD	R5,Y+
    00D6 9069      LD	R6,Y+
    00D7 9079      LD	R7,Y+
    00D8 9089      LD	R8,Y+
    00D9 9099      LD	R9,Y+
    00DA 9109      LD	R16,Y+
    00DB 9119      LD	R17,Y+
    00DC 9129      LD	R18,Y+
    00DD 9139      LD	R19,Y+
    00DE 9189      LD	R24,Y+
    00DF 9199      LD	R25,Y+
    00E0 91A9      LD	R26,Y+
    00E1 91B9      LD	R27,Y+
    00E2 91E9      LD	R30,Y+
    00E3 91F9      LD	R31,Y+
    00E4 9508      RET

⌨️ 快捷键说明

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