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

📄 led+ad.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0032 E5CF      LDI	R28,0x5F
    0033 E0D4      LDI	R29,4
    0034 BFCD      OUT	0x3D,R28
    0035 BFDE      OUT	0x3E,R29
    0036 51C0      SUBI	R28,0x10
    0037 40D0      SBCI	R29,0
    0038 EA0A      LDI	R16,0xAA
    0039 8308      STD	Y+0,R16
    003A 2400      CLR	R0
    003B E6E0      LDI	R30,0x60
    003C E0F0      LDI	R31,0
    003D E010      LDI	R17,0
    003E 36E8      CPI	R30,0x68
    003F 07F1      CPC	R31,R17
    0040 F011      BEQ	0x0043
    0041 9201      ST	R0,Z+
    0042 CFFB      RJMP	0x003E
    0043 8300      STD	Z+0,R16
    0044 E6E4      LDI	R30,0x64
    0045 E0F0      LDI	R31,0
    0046 E6A0      LDI	R26,0x60
    0047 E0B0      LDI	R27,0
    0048 E010      LDI	R17,0
    0049 36E4      CPI	R30,0x64
    004A 07F1      CPC	R31,R17
    004B F021      BEQ	0x0050
    004C 95C8      LPM
    004D 9631      ADIW	R30,1
    004E 920D      ST	R0,X+
    004F CFF9      RJMP	0x0049
    0050 940E00E7  CALL	_main
_exit:
    0052 CFFF      RJMP	_exit
FILE: F:\李鹏飞\sl-avrad-m16\LED+AD\LED+AD.C
(0001) /******************************************************
(0002)               双龙电子公司http://www.sl.com.cn
(0003)               AT90S8535--AD转换演示程序(ICCAVR)
(0004) 	                  作者:詹卫前		
(0005) 	使用注意:1、应包含头文件slavr.h
(0006)               2、在工程选项中的Additional Lib中填入slavr
(0007) 		         使用编译器使用附加库文件libslavr.a
(0008) 			  3、使用SL-AVRAD实验设备
(0009)     接线说明:1、PA.0(PIN40)处接电平指示LED的短路块断开
(0010) 			  2、A/D和VX之间的短路块闭合
(0011) 			  3、AREF(PIN32)和AVCC(PIN30)接VCC
(0012) 			  4、AGND(PIN31)接GND												   			  
(0013) *******************************************************/
(0014) #include<iom16v.h>
(0015) #include<slavr.h>
(0016) #include<macros.h>
(0017)           /*   七段译码字形表     */        
(0018) const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
(0019) 	  	0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0020)           /*     显示缓冲区       */
(0021) unsigned char ledbuff[6];
(0022) void port_init(void)//端口初始化
(0023)  {
(0024)   DDRD=0x3f;
_port_init:
    0053 E38F      LDI	R24,0x3F
    0054 BB81      OUT	0x11,R24
(0025)   DDRB=0xff;
    0055 EF8F      LDI	R24,0xFF
    0056 BB87      OUT	0x17,R24
(0026)   PORTD=0xff;
    0057 BB82      OUT	0x12,R24
(0027)   PORTB=0xff;
    0058 BB88      OUT	0x18,R24
(0028)  }
    0059 9508      RET
_display:
  i                    --> R10
    005A 940E018B  CALL	push_gset3x
(0029) void display(void)//六路动态扫描显示电路
(0030) {
(0031)  unsigned char i;
(0032)  for (i=0;i<6;i++)
    005C 24AA      CLR	R10
    005D C019      RJMP	0x0077
(0033)   {
(0034)    PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
    005E E682      LDI	R24,0x62
    005F E090      LDI	R25,0
    0060 2DEA      MOV	R30,R10
    0061 27FF      CLR	R31
    0062 0FE8      ADD	R30,R24
    0063 1FF9      ADC	R31,R25
    0064 8020      LDD	R2,Z+0
    0065 BA28      OUT	0x18,R2
(0035)    PORTD=~(1<<i);   //开始显示
    0066 E001      LDI	R16,1
    0067 2D1A      MOV	R17,R10
    0068 940E01B7  CALL	lsl8
    006A 2E20      MOV	R2,R16
    006B 9420      COM	R2
    006C BA22      OUT	0x12,R2
(0036)    delay_1ms();     //每一位显示保持一定时间
    006D 940E0126  CALL	_delay_1ms
(0037)    PORTD|=(1<<i);   //关闭显示
    006F E001      LDI	R16,1
    0070 2D1A      MOV	R17,R10
    0071 940E01B7  CALL	lsl8
    0073 B222      IN	R2,0x12
    0074 2A20      OR	R2,R16
    0075 BA22      OUT	0x12,R2
    0076 94A3      INC	R10
    0077 2D8A      MOV	R24,R10
    0078 3086      CPI	R24,6
    0079 F320      BCS	0x005E
(0038)   }
(0039) } 
    007A 940E017C  CALL	pop_gset3x
    007C 9508      RET
_adctovol:
  char_p               --> Y+1
  i                    --> R10
  temp                 --> R12
  adc                  --> R10
    007D 940E018E  CALL	push_gset4x
    007F 0158      MOVW	R10,R16
(0040) unsigned int ad_con;//存放PA0的AD转换结果
(0041) /*      将AD结果转换成电压     */
(0042) #define vref   497
(0043) void adctovol(unsigned int adc)
(0044)     {
(0045) 	 unsigned int temp;
(0046) 	 unsigned char i;
(0047) 	 unsigned char *char_p;
(0048)      temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
    0080 0115      MOVW	R2,R10
    0081 2444      CLR	R4
    0082 2455      CLR	R5
    0083 EF81      LDI	R24,0xF1
    0084 E091      LDI	R25,1
    0085 E0A0      LDI	R26,0
    0086 E0B0      LDI	R27,0
    0087 925A      ST	R5,-Y
    0088 924A      ST	R4,-Y
    0089 923A      ST	R3,-Y
    008A 922A      ST	R2,-Y
    008B 018C      MOVW	R16,R24
    008C 019D      MOVW	R18,R26
    008D 940E014C  CALL	empy32u
    008F E08A      LDI	R24,0xA
    0090 E090      LDI	R25,0
    0091 938A      ST	R24,-Y
    0092 940E01BD  CALL	lsr32
    0094 0168      MOVW	R12,R16
(0049)      for(i=0;i<3;i++)
    0095 24AA      CLR	R10
    0096 C019      RJMP	0x00B0
(0050) 	    {
(0051) 		 ledbuff[i]=tabel[temp%10];
    0097 E02A      LDI	R18,0xA
    0098 E030      LDI	R19,0
    0099 0186      MOVW	R16,R12
    009A 940E0130  CALL	mod16u
    009C 01F8      MOVW	R30,R16
    009D E584      LDI	R24,0x54
    009E E090      LDI	R25,0
    009F 0FE8      ADD	R30,R24
    00A0 1FF9      ADC	R31,R25
    00A1 91E4      LPM	R30,0(Z)
    00A2 E682      LDI	R24,0x62
    00A3 E090      LDI	R25,0
    00A4 2DAA      MOV	R26,R10
    00A5 27BB      CLR	R27
    00A6 0FA8      ADD	R26,R24
    00A7 1FB9      ADC	R27,R25
    00A8 93EC      ST	R30,0(X)
(0052) 		 temp=temp/10;
    00A9 E02A      LDI	R18,0xA
    00AA E030      LDI	R19,0
    00AB 0186      MOVW	R16,R12
    00AC 940E0132  CALL	div16u
    00AE 0168      MOVW	R12,R16
    00AF 94A3      INC	R10
    00B0 2D8A      MOV	R24,R10
    00B1 3083      CPI	R24,3
    00B2 F320      BCS	0x0097
(0053) 		}
(0054)      ledbuff[5]=tabel[0x0a];
    00B3 E5EE      LDI	R30,0x5E
    00B4 E0F0      LDI	R31,0
    00B5 91E4      LPM	R30,0(Z)
    00B6 93E00067  STS	0x67,R30
(0055) 	 ledbuff[4]=tabel[0x0d];
    00B8 E6E1      LDI	R30,0x61
    00B9 E0F0      LDI	R31,0
    00BA 91E4      LPM	R30,0(Z)
    00BB 93E00066  STS	0x66,R30
(0056) 	 ledbuff[3]=0x40;
    00BD E480      LDI	R24,0x40
    00BE 93800065  STS	_ledbuff+3,R24
(0057) 	 ledbuff[2]|=0x80;		
    00C0 91800064  LDS	R24,_ledbuff+2
    00C2 6880      ORI	R24,0x80
    00C3 93800064  STS	_ledbuff+2,R24
(0058) 	}
    00C5 940E0188  CALL	pop_gset4x
    00C7 9508      RET
_adc_isr:
  temp                 --> R16
    00C8 922A      ST	R2,-Y
    00C9 923A      ST	R3,-Y
    00CA 930A      ST	R16,-Y
    00CB 931A      ST	R17,-Y
    00CC 93EA      ST	R30,-Y
    00CD B62F      IN	R2,0x3F
    00CE 922A      ST	R2,-Y
(0059) /*      AD转换程序     */
(0060) #pragma interrupt_handler adc_isr:15
(0061) void adc_isr(void)
(0062)    {
(0063)     unsigned int temp=0;
    00CF 2700      CLR	R16
    00D0 2711      CLR	R17
    00D1 C002      RJMP	0x00D4
(0064) 	while(temp<6)
(0065) 	    temp++;
    00D2 5F0F      SUBI	R16,0xFF
    00D3 4F1F      SBCI	R17,0xFF
    00D4 3006      CPI	R16,6
    00D5 E0E0      LDI	R30,0
    00D6 071E      CPC	R17,R30
    00D7 F3D0      BCS	0x00D2
(0066) 	ad_con=ADC;    
    00D8 B024      IN	R2,0x04
    00D9 B035      IN	R3,0x05
    00DA 92300061  STS	_ad_con+1,R3
    00DC 92200060  STS	_ad_con,R2
(0067)    	ADCSR|=(1<<ADSC);//启动转换 			 	 		 
    00DE 9A36      SBI	0x06,6
(0068)    } 
    00DF 9029      LD	R2,Y+
    00E0 BE2F      OUT	0x3F,R2
    00E1 91E9      LD	R30,Y+
    00E2 9119      LD	R17,Y+
    00E3 9109      LD	R16,Y+
    00E4 9039      LD	R3,Y+
    00E5 9029      LD	R2,Y+
    00E6 9518      RETI
(0069) //将AD转换结果转换成电压数值,然后在LCD上显示   
(0070) void main(void)
(0071) {
(0072)  unsigned char i;
(0073)  port_init();
_main:
  i                    --> R10
    00E7 DF6B      RCALL	_port_init

⌨️ 快捷键说明

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