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

📄 ad_led.lst

📁 AVR系列单片机源代码例子,可在ICCAVR中直接使用
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0019 E5CF      LDI	R28,0x5F
    001A E0D2      LDI	R29,2
    001B BFCD      OUT	P3D,R28
    001C BFDE      OUT	P3E,R29
    001D 51C0      SUBI	R28,0x10
    001E 40D0      SBCI	R29,0
    001F EA0A      LDI	R16,0xAA
    0020 8308      STD	R16,0+Y
    0021 2400      CLR	R0
    0022 E6E0      LDI	R30,0x60
    0023 E0F0      LDI	R31,0
    0024 E010      LDI	R17,0
    0025 36E8      CPI	R30,0x68
    0026 07F1      CPC	R31,R17
    0027 F011      BEQ	0x002A
    0028 9201      ST	R0,Z+
    0029 CFFB      RJMP	0x0025
    002A 8300      STD	R16,0+Z
    002B E3E2      LDI	R30,0x32
    002C E0F0      LDI	R31,0
    002D E6A0      LDI	R26,0x60
    002E E0B0      LDI	R27,0
    002F E010      LDI	R17,0
    0030 33E2      CPI	R30,0x32
    0031 07F1      CPC	R31,R17
    0032 F021      BEQ	0x0037
    0033 95C8      LPM
    0034 9631      ADIW	R30,1
    0035 920D      ST	R0,X+
    0036 CFF9      RJMP	0x0030
    0037 D098      RCALL	_main
_exit:
    0038 CFFF      RJMP	_exit
FILE: D:\ICC-AVR\examples.sl\AD_8535_LED\ad_led.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<io8535.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:
    0039 E38F      LDI	R24,0x3F
    003A BB81      OUT	P11,R24
(0025)   DDRB=0xff;
    003B EF8F      LDI	R24,0xFF
    003C BB87      OUT	P17,R24
(0026)   PORTD=0xff;
    003D BB82      OUT	P12,R24
(0027)   PORTB=0xff;
    003E BB88      OUT	P18,R24
(0028)  }
    003F 9508      RET
_display:
  i                    --> R20
    0040 D0F4      RCALL	push_gset1
(0029) void display(void)//六路动态扫描显示电路
(0030) {
(0031)  unsigned char i;
(0032)  for (i=0;i<6;i++)
    0041 2744      CLR	R20
    0042 C016      RJMP	0x0059
(0033)   {
(0034)    PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
    0043 E682      LDI	R24,0x62
    0044 E090      LDI	R25,0
    0045 2FE4      MOV	R30,R20
    0046 27FF      CLR	R31
    0047 0FE8      ADD	R30,R24
    0048 1FF9      ADC	R31,R25
    0049 8020      LDD	R2,0+Z
    004A BA28      OUT	P18,R2
(0035)    PORTD=~(1<<i);   //开始显示
    004B E001      LDI	R16,1
    004C 2F14      MOV	R17,R20
    004D D115      RCALL	lsl8
    004E 2E20      MOV	R2,R16
    004F 9420      COM	R2
    0050 BA22      OUT	P12,R2
(0036)    delay_1ms();     //每一位显示保持一定时间
    0051 D0BD      RCALL	_delay_1ms
(0037)    PORTD|=(1<<i);   //关闭显示
    0052 E001      LDI	R16,1
    0053 2F14      MOV	R17,R20
    0054 D10E      RCALL	lsl8
    0055 B222      IN	R2,P12
    0056 2A20      OR	R2,R16
    0057 BA22      OUT	P12,R2
(0038)   }
    0058 9543      INC	R20
    0059 3046      CPI	R20,6
    005A F340      BCS	0x0043
(0039) } 
    005B D0DC      RCALL	pop_gset1
    005C 9508      RET
_adctovol:
  char_p               --> Y+1
  i                    --> R10
  temp                 --> R12
  adc                  --> R10
    005D D0F4      RCALL	push_gset4
    005E 2EA0      MOV	R10,R16
    005F 2EB1      MOV	R11,R17
(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);
    0060 2C2A      MOV	R2,R10
    0061 2C3B      MOV	R3,R11
    0062 2444      CLR	R4
    0063 2455      CLR	R5
    0064 EF41      LDI	R20,0xF1
    0065 E051      LDI	R21,1
    0066 E060      LDI	R22,0
    0067 E070      LDI	R23,0
    0068 925A      ST	R5,-Y
    0069 924A      ST	R4,-Y
    006A 923A      ST	R3,-Y
    006B 922A      ST	R2,-Y
    006C 2F04      MOV	R16,R20
    006D 2F15      MOV	R17,R21
    006E 2F26      MOV	R18,R22
    006F 2F37      MOV	R19,R23
    0070 D11D      RCALL	mpy32u
    0071 E08A      LDI	R24,0xA
    0072 E090      LDI	R25,0
    0073 938A      ST	R24,-Y
    0074 D0E2      RCALL	lsr32
    0075 2EC0      MOV	R12,R16
    0076 2ED1      MOV	R13,R17
(0049)      for(i=0;i<3;i++)
    0077 24AA      CLR	R10
    0078 C01D      RJMP	0x0096
(0050) 	    {
(0051) 		 ledbuff[i]=tabel[temp%10];
    0079 E02A      LDI	R18,0xA
    007A E030      LDI	R19,0
    007B 2D0C      MOV	R16,R12
    007C 2D1D      MOV	R17,R13
    007D D09B      RCALL	mod16u
    007E 2E20      MOV	R2,R16
    007F 2E31      MOV	R3,R17
    0080 E282      LDI	R24,0x22
    0081 E090      LDI	R25,0
    0082 0E28      ADD	R2,R24
    0083 1E39      ADC	R3,R25
    0084 2DE2      MOV	R30,R2
    0085 2DF3      MOV	R31,R3
    0086 95C8      LPM
    0087 E682      LDI	R24,0x62
    0088 E090      LDI	R25,0
    0089 2DEA      MOV	R30,R10
    008A 27FF      CLR	R31
    008B 0FE8      ADD	R30,R24
    008C 1FF9      ADC	R31,R25
    008D 8200      STD	R0,0+Z
(0052) 		 temp=temp/10;
    008E E02A      LDI	R18,0xA
    008F E030      LDI	R19,0
    0090 2D0C      MOV	R16,R12
    0091 2D1D      MOV	R17,R13
    0092 D088      RCALL	div16u
    0093 2EC0      MOV	R12,R16
    0094 2ED1      MOV	R13,R17
(0053) 		}
    0095 94A3      INC	R10
    0096 2D8A      MOV	R24,R10
    0097 3083      CPI	R24,3
    0098 F300      BCS	0x0079
(0054)      ledbuff[5]=tabel[0x0a];
    0099 E28C      LDI	R24,0x2C
    009A E090      LDI	R25,0
    009B 2FE8      MOV	R30,R24
    009C 2FF9      MOV	R31,R25
    009D 95C8      LPM
    009E 92000067  STS	R0,0x67
(0055) 	 ledbuff[4]=tabel[0x0d];
    00A0 E28F      LDI	R24,0x2F
    00A1 E090      LDI	R25,0
    00A2 2FE8      MOV	R30,R24
    00A3 2FF9      MOV	R31,R25
    00A4 95C8      LPM
    00A5 92000066  STS	R0,0x66
(0056) 	 ledbuff[3]=0x40;
    00A7 E480      LDI	R24,0x40
    00A8 93800065  STS	R24,_ledbuff+3
(0057) 	 ledbuff[2]|=0x80;		
    00AA 91800064  LDS	R24,_ledbuff+2
    00AC 6880      ORI	R24,0x80
    00AD 93800064  STS	R24,_ledbuff+2
(0058) 	}
    00AF D0A5      RCALL	pop_gset4
    00B0 9508      RET
_adc_isr:
  temp                 --> R16
    00B1 922A      ST	R2,-Y
    00B2 923A      ST	R3,-Y
    00B3 930A      ST	R16,-Y
    00B4 931A      ST	R17,-Y
    00B5 93EA      ST	R30,-Y
    00B6 B62F      IN	R2,P3F
    00B7 922A      ST	R2,-Y
(0059) /*      AD转换程序     */
(0060) #pragma interrupt_handler adc_isr:IT_ADC
(0061) void adc_isr(void)
(0062)    {
(0063)     unsigned int temp=0;
    00B8 2700      CLR	R16
    00B9 2711      CLR	R17
    00BA C002      RJMP	0x00BD
(0064) 	while(temp<6)
(0065) 	    temp++;
    00BB 5F0F      SUBI	R16,0xFF
    00BC 4F1F      SBCI	R17,0xFF
    00BD 3006      CPI	R16,6
    00BE E0E0      LDI	R30,0
    00BF 071E      CPC	R17,R30
    00C0 F3D0      BCS	0x00BB
(0066) 	ad_con=ADC;    
    00C1 B024      IN	R2,P04
    00C2 B035      IN	R3,P05
    00C3 92300061  STS	R3,_ad_con+1
    00C5 92200060  STS	R2,_ad_con
(0067)    	ADCSR|=(1<<ADSC);//启动转换 			 	 		 
    00C7 9A36      SBI	P06,6
(0068)    } 
    00C8 9029      LD	R2,Y+
    00C9 BE2F      OUT	P3F,R2
    00CA 91E9      LD	R30,Y+
    00CB 9119      LD	R17,Y+
    00CC 9109      LD	R16,Y+
    00CD 9039      LD	R3,Y+
    00CE 9029      LD	R2,Y+
    00CF 9518      RETI
(0069) //将AD转换结果转换成电压数值,然后在LCD上显示   

⌨️ 快捷键说明

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