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

📄 adc.lst

📁 ATMEGA128的ADC驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0078)  Seg7_Bit2_En();
    017A 9ABE      SBI	0x17,6
    017B 9AC6      SBI	0x18,6
(0079)  delay_nus(60);
    017C E30C      LDI	R16,0x3C
    017D E010      LDI	R17,0
    017E 940E00E6  CALL	_delay_nus
(0080)  Seg7_Bit2_Dis();
    0180 9ABE      SBI	0x17,6
    0181 98C6      CBI	0x18,6
(0081)  
(0082)  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
    0182 E984      LDI	R24,0x94
    0183 E090      LDI	R25,0
    0184 91E00109  LDS	R30,Seg7_Led_Buf+3
    0186 27FF      CLR	R31
    0187 0FE8      ADD	R30,R24
    0188 1FF9      ADC	R31,R25
    0189 9104      LPM	R16,0(Z)
    018A DF95      RCALL	_HC_595_OUT
(0083)  if((point==1)&&(point_pos==3))
    018B 91800100  LDS	R24,point
    018D 3081      CPI	R24,1
    018E F471      BNE	0x019D
    018F 91800101  LDS	R24,point_pos
    0191 3083      CPI	R24,3
    0192 F451      BNE	0x019D
(0084)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
    0193 E984      LDI	R24,0x94
    0194 E090      LDI	R25,0
    0195 91E00109  LDS	R30,Seg7_Led_Buf+3
    0197 27FF      CLR	R31
    0198 0FE8      ADD	R30,R24
    0199 1FF9      ADC	R31,R25
    019A 9104      LPM	R16,0(Z)
    019B 6800      ORI	R16,0x80
    019C DF83      RCALL	_HC_595_OUT
(0085)  Seg7_Bit3_En();
    019D 9ABF      SBI	0x17,7
    019E 9AC7      SBI	0x18,7
(0086)  delay_nus(60);
    019F E30C      LDI	R16,0x3C
    01A0 E010      LDI	R17,0
    01A1 940E00E6  CALL	_delay_nus
(0087)  Seg7_Bit3_Dis();
    01A3 9ABF      SBI	0x17,7
    01A4 98C7      CBI	0x18,7
    01A5 9508      RET
_Seg7_Led_display:
  data                 --> R20
    01A6 940E0432  CALL	push_gset1
    01A8 01A8      MOVW	R20,R16
(0088) }
(0089) /*************************************************************************
(0090) ** 函数名称:Hc595显示整形数据
(0091) ** 功能描述:
(0092) ** 输 入:0~9999
(0093) ** 输出	 :
(0094) ** 全局变量:
(0095) ** 调用模块: 
(0096) ** 说明:
(0097) ** 注意:
(0098) **************************************************************************/
(0099) void Seg7_Led_display(unsigned int data)
(0100) {
(0101)  if(data>9999) //错误处理,超出显示范围则全亮
    01A9 E08F      LDI	R24,0xF
    01AA E297      LDI	R25,0x27
    01AB 1784      CP	R24,R20
    01AC 0795      CPC	R25,R21
    01AD F430      BCC	0x01B4
(0102)  	{
(0103) 	 HC_595_OUT(0xFF);
    01AE EF0F      LDI	R16,0xFF
    01AF DF70      RCALL	_HC_595_OUT
(0104) 	 Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
    01B0 B388      IN	R24,0x18
    01B1 6F80      ORI	R24,0xF0
    01B2 BB88      OUT	0x18,R24
(0105) 	}
    01B3 C07F      RJMP	0x0233
(0106)  else if(data>999)
    01B4 EE87      LDI	R24,0xE7
    01B5 E093      LDI	R25,3
    01B6 1784      CP	R24,R20
    01B7 0795      CPC	R25,R21
    01B8 F530      BCC	0x01DF
(0107)  	{
(0108) 	 Seg7_Led_Buf[3]=data/1000;
    01B9 EE28      LDI	R18,0xE8
    01BA E033      LDI	R19,3
    01BB 018A      MOVW	R16,R20
    01BC 940E040D  CALL	div16u
    01BE 93000109  STS	Seg7_Led_Buf+3,R16
(0109)  	 Seg7_Led_Buf[2]=(data%1000)/100;
    01C0 EE28      LDI	R18,0xE8
    01C1 E033      LDI	R19,3
    01C2 018A      MOVW	R16,R20
    01C3 940E040B  CALL	mod16u
    01C5 E624      LDI	R18,0x64
    01C6 E030      LDI	R19,0
    01C7 940E040D  CALL	div16u
    01C9 93000108  STS	Seg7_Led_Buf+2,R16
(0110)  	 Seg7_Led_Buf[1]=(data%100)/10;
    01CB E624      LDI	R18,0x64
    01CC E030      LDI	R19,0
    01CD 018A      MOVW	R16,R20
    01CE 940E040B  CALL	mod16u
    01D0 E02A      LDI	R18,0xA
    01D1 E030      LDI	R19,0
    01D2 940E040D  CALL	div16u
    01D4 93000107  STS	Seg7_Led_Buf+1,R16
(0111)  	 Seg7_Led_Buf[0]=data%10;
    01D6 E02A      LDI	R18,0xA
    01D7 E030      LDI	R19,0
    01D8 018A      MOVW	R16,R20
    01D9 940E040B  CALL	mod16u
    01DB 93000106  STS	Seg7_Led_Buf,R16
(0112) 	 Seg7_Led_Update();
    01DD DF4D      RCALL	_Seg7_Led_Update
(0113) 	}
    01DE C054      RJMP	0x0233
(0114)  else if(data>99)
    01DF E683      LDI	R24,0x63
    01E0 E090      LDI	R25,0
    01E1 1784      CP	R24,R20
    01E2 0795      CPC	R25,R21
    01E3 F510      BCC	0x0206
(0115)  	{
(0116) 	 Seg7_Led_Buf[3]=16;
    01E4 E180      LDI	R24,0x10
    01E5 93800109  STS	Seg7_Led_Buf+3,R24
(0117)  	 Seg7_Led_Buf[2]=(data%1000)/100;
    01E7 EE28      LDI	R18,0xE8
    01E8 E033      LDI	R19,3
    01E9 018A      MOVW	R16,R20
    01EA 940E040B  CALL	mod16u
    01EC E624      LDI	R18,0x64
    01ED E030      LDI	R19,0
    01EE 940E040D  CALL	div16u
    01F0 93000108  STS	Seg7_Led_Buf+2,R16
(0118)  	 Seg7_Led_Buf[1]=(data%100)/10;
    01F2 E624      LDI	R18,0x64
    01F3 E030      LDI	R19,0
    01F4 018A      MOVW	R16,R20
    01F5 940E040B  CALL	mod16u
    01F7 E02A      LDI	R18,0xA
    01F8 E030      LDI	R19,0
    01F9 940E040D  CALL	div16u
    01FB 93000107  STS	Seg7_Led_Buf+1,R16
(0119)  	 Seg7_Led_Buf[0]=data%10;
    01FD E02A      LDI	R18,0xA
    01FE E030      LDI	R19,0
    01FF 018A      MOVW	R16,R20
    0200 940E040B  CALL	mod16u
    0202 93000106  STS	Seg7_Led_Buf,R16
(0120) 	 Seg7_Led_Update();
    0204 DF26      RCALL	_Seg7_Led_Update
(0121) 	}
    0205 C02D      RJMP	0x0233
(0122)  else if(data>9)
    0206 E089      LDI	R24,0x9
    0207 E090      LDI	R25,0
    0208 1784      CP	R24,R20
    0209 0795      CPC	R25,R21
    020A F4C8      BCC	0x0224
(0123)  	{
(0124) 	 Seg7_Led_Buf[3]=16;
    020B E180      LDI	R24,0x10
    020C 93800109  STS	Seg7_Led_Buf+3,R24
(0125)  	 Seg7_Led_Buf[2]=16;
    020E 93800108  STS	Seg7_Led_Buf+2,R24
(0126)  	 Seg7_Led_Buf[1]=(data%100)/10;
    0210 E624      LDI	R18,0x64
    0211 E030      LDI	R19,0
    0212 018A      MOVW	R16,R20
    0213 940E040B  CALL	mod16u
    0215 E02A      LDI	R18,0xA
    0216 E030      LDI	R19,0
    0217 940E040D  CALL	div16u
    0219 93000107  STS	Seg7_Led_Buf+1,R16
(0127)  	 Seg7_Led_Buf[0]=data%10;
    021B E02A      LDI	R18,0xA
    021C E030      LDI	R19,0
    021D 018A      MOVW	R16,R20
    021E 940E040B  CALL	mod16u
    0220 93000106  STS	Seg7_Led_Buf,R16
(0128) 	 Seg7_Led_Update();
    0222 DF08      RCALL	_Seg7_Led_Update
(0129) 	}
    0223 C00F      RJMP	0x0233
(0130)  else
(0131)  	{
(0132) 	 Seg7_Led_Buf[3]=16;
    0224 E180      LDI	R24,0x10
    0225 93800109  STS	Seg7_Led_Buf+3,R24
(0133)  	 Seg7_Led_Buf[2]=16;
    0227 93800108  STS	Seg7_Led_Buf+2,R24
(0134)  	 Seg7_Led_Buf[1]=16;
    0229 93800107  STS	Seg7_Led_Buf+1,R24
(0135)  	 Seg7_Led_Buf[0]=data%10;
    022B E02A      LDI	R18,0xA
    022C E030      LDI	R19,0
    022D 018A      MOVW	R16,R20
    022E 940E040B  CALL	mod16u
    0230 93000106  STS	Seg7_Led_Buf,R16
(0136) 	 Seg7_Led_Update();
    0232 DEF8      RCALL	_Seg7_Led_Update
(0137) 	}
    0233 940E0435  CALL	pop_gset1
    0235 9508      RET
_Seg7_Led_float:
  temp                 --> R20
  data                 --> Y+8
    0236 940E0406  CALL	push_arg4
    0238 940E0430  CALL	push_gset2
    023A 9724      SBIW	R28,4
(0138) }
(0139) /*************************************************************************
(0140) ** 函数名称:HC595显示浮点数据
(0141) ** 功能描述:
(0142) ** 输 入:
(0143) ** 输出	 :
(0144) ** 全局变量:
(0145) ** 调用模块: 
(0146) ** 说明:
(0147) ** 注意:
(0148) **************************************************************************/
(0149) void Seg7_Led_float(float data)
(0150) {
(0151)  unsigned int temp;
(0152)  /*
(0153)  重要说明:data+=0.00001;其中0.00001为容错值
(0154)  解决float数据类型在计算机内部存储的误差问题,可以解决显示问题
(0155)  但是会引入新的计算误差,如果精度要求大于0.00001建议更改容错值或者将此处注释掉 
(0156)  */
(0157)  data+=0.00001;
    023B 01FE      MOVW	R30,R28
    023C 8420      LDD	R2,Z+8
    023D 8431      LDD	R3,Z+9
    023E 8442      LDD	R4,Z+10
    023F 8453      LDD	R5,Z+11
    0240 925A      ST	R5,-Y
    0241 924A      ST	R4,-Y
    0242 923A      ST	R3,-Y
    0243 922A      ST	R2,-Y
    0244 EC01      LDI	R16,0xC1
    0245 E010      LDI	R17,0
    0246 940E0452  CALL	lpm32
    0248 933A      ST	R19,-Y
    0249 932A      ST	R18,-Y
    024A 931A      ST	R17,-Y
    024B 930A      ST	R16,-Y
    024C 940E050B  CALL	add32f
    024E 01FE      MOVW	R30,R28
    024F 8700      STD	Z+8,R16
    0250 8711      STD	Z+9,R17
    0251 8722      STD	Z+10,R18
    0252 8733      STD	Z+11,R19
(0158)  point=1;
    0253 E081      LDI	R24,1
    0254 93800100  STS	point,R24
(0159)  if(data>999) //错误处理,超出显示范围则全亮
    0256 EB0D      LDI	R16,0xBD
    0257 E010      LDI	R17,0
    0258 940E0452  CALL	lpm32
    025A 933A      ST	R19,-Y
    025B 932A      ST	R18,-Y
    025C 931A      ST	R17,-Y
    025D 930A      ST	R16,-Y
    025E 01FE      MOVW	R30,R28
    025F 8424      LDD	R2,Z+12
    0260 8435      LDD	R3,Z+13
    0261 8446      LDD	R4,Z+14
    0262 8457      LDD	R5,Z+15
    0263 925A      ST	R5,-Y
    0264 924A      ST	R4,-Y
    0265 923A      ST	R3,-Y
    0266 922A      ST	R2,-Y
    0267 940E05C6  CALL	cmp32f
    0269 F434      BGE	0x0270
(0160)  	{
(0161) 	 HC_595_OUT(0xFF);
    026A EF0F      LDI	R16,0xFF
    026B DEB4      RCALL	_HC_595_OUT
(0162) 	 Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
    026C B388      IN	R24,0x18
    026D 6F80      ORI	R24,0xF0
    026E BB88      OUT	0x18,R24
(0163) 	}
    026F C18E      RJMP	0x03FE
(0164)  else if(data>99)
    0270 EB09      LDI	R16,0xB9
    0271 E010      LDI	R17,0
    0272 940E0452  CALL	lpm32
    0274 933A      ST	R19,-Y
    0275 932A      ST	R18,-Y
    0276 931A      ST	R17,-Y
    0277 930A      ST	R16,-Y
    0278 01FE      MOVW	R30,R28
    0279 8424      LDD	R2,Z+12
    027A 8435      LDD	R3,Z+13
    027B 8446      LDD	R4,Z+14
    027C 8457      LDD	R5,Z+15
    027D 925A      ST	R5,-Y
    027E 924A      ST	R4,-Y
    027F 923A      ST	R3,-Y
    0280 922A      ST	R2,-Y
    0281 940E05C6  CALL	cmp32f
    0283 F00C      BLT	0x0285
    0284 C077      RJMP	0x02FC
(0165)  	{
(0166) 	 temp=data*10;
    0285 EB05      LDI	R16,0xB5
    0286 E010      LDI	R17,0
    0287 940E0452  CALL	lpm32
    0289 933A      ST	R19,-Y
    028A 932A      ST	R18,-Y
    028B 931A      ST	R17,-Y
    028C 930A      ST	R16,-Y
    028D 01FE      MOVW	R30,R28
    028E 8424      LDD	R2,Z+12
    028F 8435      LDD	R3,Z+13
    0290 8446      LDD	R4,Z+14
    0291 8457      LDD	R5,Z+15
    0292 925A      ST	R5,-Y
    0293 924A      ST	R4,-Y
    0294 923A      ST	R3,-Y
    0295 922A      ST	R2,-Y
    0296 940E05FA  CALL	empy32f
    0298 01FE      MOVW	R30,R28
    0299 8300      STD	Z+0,R16
    029A 8311      STD	Z+1,R17
    029B 8322      STD	Z+2,R18
    029C 8333      STD	Z+3,R19
    029D 01FE      MOVW	R30,R28
    029E 8020      LDD	R2,Z+0
    029F 8031      LDD	R3,Z+1
    02A0 8042      LDD	R4,Z+2
    02A1 8053      LDD	R5,Z+3
    02A2 925A      ST	R5,-Y
    02A3 924A      ST	R4,-Y
    02A4 923A      ST	R3,-Y
    02A5 922A      ST	R2,-Y
    02A6 EB01      LDI	R16,0xB1
    02A7 E010      LDI	R17,0
    02A8 940E0452  CALL	lpm32
    02AA 933A      ST	R19,-Y
    02AB 932A      ST	R18,-Y
    02AC 931A      ST	R17,-Y
    02AD 930A      ST	R16,-Y
    02AE 940E05C6  CALL	cmp32f
    02B0 F0CC      BLT	0x02CA
    02B1 01FE      MOVW	R30,R28
    02B2 8020      LDD	R2,Z+0
    02B3 8031      LDD	R3,Z+1
    02B4 8042      LDD	R4,Z+2
    02B5 8053      LDD	R5,Z+3
    02B6 925A      ST	R5,-Y
    02B7 924A      ST	R4,-Y
    02B8 923A      ST	R3,-Y
    02B9 922A      ST	R2,-Y
    02BA EB01      LDI	R16,0xB1
    02BB E010      LDI	R17,0
    02BC 940E0452  CALL	lpm32
    02BE 933A      ST	R19,-Y
    02BF 932A      ST	R18,-Y
    02C0 931A      ST	R17,-Y
    02C1 930A      ST	R16,-Y
    02C2 940E0513  CALL	sub32f
    02C4 940E0466  CALL	fp2int
    02C6 01B8      MOVW	R22,R16
    02C7 5060      SUBI	R22,0
    02C8 4870      SBCI	R23,0x80
    02C9 C008      RJMP	0x02D2
    02CA 01FE      MOVW	R30,R28
    02CB 8100      LDD	R16,Z+0
    02CC 8111      LDD	R17,Z+1
    02CD 8122      LDD	R18,Z+2
    02CE 8133      LDD	R19,Z+3
    02CF 940E0466  CALL	fp2int
    02D1 01B8      MOVW	R22,R16
    02D2 01AB      MOVW	R20,R22
(0167) 	 point_pos=1;
    02D3 E081      LDI	R24,1
    02D4 93800101  STS	point_pos,R24
(0168) 	 Seg7_Led_Buf[3]=temp/1000;
    02D6 EE28      LDI	R18,0xE8
    02D7 E033      LDI	R19,3
    02D8 018A      MOVW	R16,R20
    02D9 940E040D  CALL	div16u
    02DB 93000109  STS	Seg7_Led_Buf+3,R16
(0169)  	 Seg7_Led_Buf[2]=(temp%1000)/100;
    02DD EE28      LDI	R18,0xE8
    02DE E033      LDI	R19,3
    02DF 018A      MOVW	R16,R20
    02E0 940E040B  CALL	mod16u
    02E2 E624      LDI	R18,0x64
    02E3 E030      LDI	R19,0
    02E4 940E040D  CALL	div16u
    02E6 93000108  STS	Seg7_Led_Buf+2,R16
(0170)  	 Seg7_Led_Buf[1]=(temp%100)/10;
    02E8 E624      LDI	R18,0x64
    02E9 E030      LDI	R19,0
    02EA 018A      MOVW	R16,R20
    02EB 940E040B  CALL	mod16u
    02ED E02A      LDI	R18,0xA
    02EE E030      LDI	R19,0
    02EF 940E040D  CALL	div16u
    02F1 93000107  STS	Seg7_Led_Buf+1,R16
(0171)  	 Seg7_Led_Buf[0]=temp%10;
    02F3 E02A      LDI	R18,0xA
    02F4 E030      LDI	R19,0
    02F5 018A      MOVW	R16,R20
    02F6 940E040B  CALL	mod16u
    02F8 93000106  STS	Seg7_Led_Buf,R16
(0172) 	 Seg7_Led_Update();
    02FA DE30      RCALL	_Seg7_Led_Update
(0173) 	}
    02FB C102      RJMP	0x03FE
(0174)  else if(data>9)
    02FC EA0D      LDI	R16,0xAD
    02FD E010      LDI	R17,0
    02FE 940E0452  CALL	lpm32
    0300 933A      ST	R19,-Y
    0301 932A      ST	R18,-Y
    0302 931A      ST	R17,-Y
    0303 930A      ST	R16,-Y
    0304 01FE      MOVW	R30,R28
    0305 8424      LDD	R2,Z+12
    0306 8435      LDD	R3,Z+13
    0307 8446      LDD	R4,Z+14
    0308 8457      LDD	R5,Z+15
    0309 925A      ST	R5,-Y
    030A 924A      ST	R4,-Y
    030B 923A      ST	R3,-Y
    030C 922A      ST	R2,-Y
    030D 940E05C6  CALL	cmp32f
    030F F00C      BLT	0x0311
    0310 C077      RJMP	0x0388
(0175)  	{
(0176) 	 temp=data*100;
    0311 EA09      LDI	R16,0xA9
    0312 E010      LDI	R17,0
    0313 940E0452  CALL	lpm32
    0315 933A      ST	R19,-Y
    0316 932A      ST	R18,-Y

⌨️ 快捷键说明

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