📄 ad7705.lst
字号:
039E E070 LDI R23,0
039F 01FE MOVW R30,R28
03A0 8C20 LDD R2,Z+24
03A1 8C31 LDD R3,Z+25
03A2 8C42 LDD R4,Z+26
03A3 8C53 LDD R5,Z+27
03A4 937A ST R23,-Y
03A5 936A ST R22,-Y
03A6 935A ST R21,-Y
03A7 934A ST R20,-Y
03A8 0181 MOVW R16,R2
03A9 0192 MOVW R18,R4
03AA 940E04C4 CALL div32u
03AC E04A LDI R20,0xA
03AD E050 LDI R21,0
03AE E060 LDI R22,0
03AF E070 LDI R23,0
03B0 937A ST R23,-Y
03B1 936A ST R22,-Y
03B2 935A ST R21,-Y
03B3 934A ST R20,-Y
03B4 940E04C6 CALL mod32u
03B6 8708 STD Y+8,R16
(0190) a[7]=(t/1)%10;
03B7 E04A LDI R20,0xA
03B8 E050 LDI R21,0
03B9 E060 LDI R22,0
03BA E070 LDI R23,0
03BB 01FE MOVW R30,R28
03BC 8C20 LDD R2,Z+24
03BD 8C31 LDD R3,Z+25
03BE 8C42 LDD R4,Z+26
03BF 8C53 LDD R5,Z+27
03C0 937A ST R23,-Y
03C1 936A ST R22,-Y
03C2 935A ST R21,-Y
03C3 934A ST R20,-Y
03C4 0181 MOVW R16,R2
03C5 0192 MOVW R18,R4
03C6 940E04C6 CALL mod32u
03C8 8709 STD Y+9,R16
(0191)
(0192) for(i=0; i<8; i++) //转成ASCII码
03C9 24EE CLR R14
03CA C00B RJMP 0x03D6
(0193) a[i]=a[i]+'0';
03CB 01CE MOVW R24,R28
03CC 9602 ADIW R24,2
03CD 2C2E MOV R2,R14
03CE 2433 CLR R3
03CF 0E28 ADD R2,R24
03D0 1E39 ADC R3,R25
03D1 01F1 MOVW R30,R2
03D2 8180 LDD R24,Z+0
03D3 5D80 SUBI R24,0xD0
03D4 8380 STD Z+0,R24
03D5 94E3 INC R14
03D6 2D8E MOV R24,R14
03D7 3088 CPI R24,0x8
03D8 F390 BCS 0x03CB
(0194) for(i=0; a[i]=='0' && i<=7; i++);
03D9 24EE CLR R14
03DA C001 RJMP 0x03DC
03DB 94E3 INC R14
03DC 01CE MOVW R24,R28
03DD 9602 ADIW R24,2
03DE 2DEE MOV R30,R14
03DF 27FF CLR R31
03E0 0FE8 ADD R30,R24
03E1 1FF9 ADC R31,R25
03E2 8180 LDD R24,Z+0
03E3 3380 CPI R24,0x30
03E4 F419 BNE 0x03E8
03E5 E087 LDI R24,7
03E6 158E CP R24,R14
03E7 F798 BCC 0x03DB
(0195) n=8-i;
03E8 E088 LDI R24,0x8
03E9 2EA8 MOV R10,R24
03EA 18AE SUB R10,R14
(0196) for(j=8-n; j<i; j++) //填充空格
03EB 198A SUB R24,R10
03EC 2EA8 MOV R10,R24
03ED C007 RJMP 0x03F5
(0197) { *str=' '; str++; }
03EE E280 LDI R24,0x20
03EF 01F6 MOVW R30,R12
03F0 8380 STD Z+0,R24
03F1 01CF MOVW R24,R30
03F2 9601 ADIW R24,1
03F3 016C MOVW R12,R24
03F4 94A3 INC R10
03F5 14AE CP R10,R14
03F6 F3B8 BCS 0x03EE
(0198) for(; i<8; i++)
03F7 C00D RJMP 0x0405
(0199) { *str=(char)a[i]; str++; } //加入有效的数字
03F8 01CE MOVW R24,R28
03F9 9602 ADIW R24,2
03FA 2DEE MOV R30,R14
03FB 27FF CLR R31
03FC 0FE8 ADD R30,R24
03FD 1FF9 ADC R31,R25
03FE 8020 LDD R2,Z+0
03FF 01F6 MOVW R30,R12
0400 8220 STD Z+0,R2
0401 01CF MOVW R24,R30
0402 9601 ADIW R24,1
0403 016C MOVW R12,R24
0404 94E3 INC R14
0405 2D8E MOV R24,R14
0406 3088 CPI R24,0x8
0407 F380 BCS 0x03F8
(0200) *str='\0';
0408 2422 CLR R2
0409 01F6 MOVW R30,R12
040A 8220 STD Z+0,R2
(0201) LCD_DisplayString(x,y,ch2);
040B E186 LDI R24,0x16
040C E091 LDI R25,1
040D 8399 STD Y+1,R25
040E 8388 STD Y+0,R24
040F 892E LDD R18,Y+22
0410 890C LDD R16,Y+20
0411 DE2B RCALL _LCD_DisplayString
0412 962A ADIW R28,0xA
0413 940E053B CALL pop_gset5
0415 9624 ADIW R28,4
0416 9508 RET
_main:
tongdao --> R20
key_vale --> R22
0417 9722 SBIW R28,2
FILE: D:\各种模块设计\模块程序集\ad7705\main.c
(0001) #include <iom128v.h>
(0002) #include<macros.h>
(0003) #include "delay.h"
(0004) #include "7705.h"
(0005) #include "KeyScay.h"
(0006) #include "lcd.h"
(0007)
(0008) /****************************************************************************/
(0009) //功能: AD7705使用
(0010) //输入: 无
(0011) //输出: 无
(0012) //备注:
(0013) /****************************************************************************/
(0014) /***************************全局变量声明*************************************/
(0015) uint vol16bit=0;
(0016) uchar test1[]=" AD7705TEST ";
(0017) uint vint=0;
(0018) float voltemp=0;
(0019) uchar flag=0;
(0020)
(0021) //void int0_isr(void);
(0022) /****************************************************************************/
(0023) //函数名: ad7705()
(0024) //功能: 实现模数转换
(0025) //输入: chan(通道)
(0026) //输出: adc16(经ADC转换后的16位2进制数)
(0027) //备注:
(0028) /****************************************************************************/
(0029) //unsigned int ad7705(unsigned char chan)
(0030) //{ unsigned int adc16=0;
(0031) //init_adc7705();
(0032) //adc16=read_adc7705(0);
(0033) //return(adc16);
(0034) //}
(0035) /****************************************************************************/
(0036) //函数名: main(void)
(0037) //功能: 主函数
(0038) //输入: 无
(0039) //输出: 无
(0040) //备注:
(0041) /****************************************************************************/
(0042) void main(void)
(0043) {
(0044) uchar tongdao=0x00;
0418 2744 CLR R20
(0045) uchar key_vale;
(0046)
(0047) DDRF=0xF3;
0419 EF83 LDI R24,0xF3
041A 93800061 STS 0x61,R24
(0048) PORTF=0xFF;
041C EF8F LDI R24,0xFF
041D 93800062 STS 0x62,R24
(0049) DDRD=0xf7; //PD0为输入,与键盘的所有行线连接,采用键盘中断查询法
041F EF87 LDI R24,0xF7
0420 BB81 OUT 0x11,R24
(0050) MCUCR=0x30; //打开SE和SM1,允许sleep和power_down模式
0421 E380 LDI R24,0x30
0422 BF85 OUT 0x35,R24
(0051) EIMSK=0x01; //允许外部中断INT0,低电平触发中断
0423 E081 LDI R24,1
0424 BF89 OUT 0x39,R24
(0052) LCD_init();
0425 DDB3 RCALL _LCD_init
(0053) LCD_DisplayString(1,1,test1);
0426 E082 LDI R24,2
0427 E091 LDI R25,1
0428 8399 STD Y+1,R25
0429 8388 STD Y+0,R24
042A E021 LDI R18,1
042B E001 LDI R16,1
042C DE10 RCALL _LCD_DisplayString
042D C063 RJMP 0x0491
(0054)
(0055) while(1)
(0056) {
(0057) CLI();
042E 94F8 BCLR 7
(0058) SEI();
042F 9478 BSET 7
(0059) asm("sleep"); //进入sleep模式
0430 9588 SLEEP
(0060)
(0061) if(flag=1)
0431 E081 LDI R24,1
0432 93800115 STS flag,R24
0434 2388 TST R24
0435 F409 BNE 0x0437
0436 C05A RJMP 0x0491
(0062) {
(0063) key_vale=key_scay();
0437 DD6F RCALL _key_scay
0438 2F60 MOV R22,R16
(0064)
(0065) if(key_vale==10)
0439 300A CPI R16,0xA
043A F009 BEQ 0x043C
043B C055 RJMP 0x0491
(0066) {
(0067) vol16bit=ad7705(tongdao);
043C 2F04 MOV R16,R20
043D DD0B RCALL _ad7705
043E 93100101 STS vol16bit+1,R17
0440 93000100 STS vol16bit,R16
(0068) voltemp=(vol16bit/65535.0)*2500;
0442 E904 LDI R16,0x94
0443 E010 LDI R17,0
0444 940E0566 CALL lpm32
0446 933A ST R19,-Y
0447 932A ST R18,-Y
0448 931A ST R17,-Y
0449 930A ST R16,-Y
044A E900 LDI R16,0x90
044B E010 LDI R17,0
044C 940E0566 CALL lpm32
044E 933A ST R19,-Y
044F 932A ST R18,-Y
0450 931A ST R17,-Y
0451 930A ST R16,-Y
0452 91000100 LDS R16,vol16bit
0454 91100101 LDS R17,vol16bit+1
0456 9516 LSR R17
0457 9507 ROR R16
0458 940E05C2 CALL int2fp
045A 933A ST R19,-Y
045B 932A ST R18,-Y
045C 931A ST R17,-Y
045D 930A ST R16,-Y
045E 940E06E6 CALL empy32fs
0460 91000100 LDS R16,vol16bit
0462 91100101 LDS R17,vol16bit+1
0464 7001 ANDI R16,1
0465 7010 ANDI R17,0
0466 940E05C2 CALL int2fp
0468 933A ST R19,-Y
0469 932A ST R18,-Y
046A 931A ST R17,-Y
046B 930A ST R16,-Y
046C 940E061C CALL add32fs
046E E80C LDI R16,0x8C
046F E010 LDI R17,0
0470 940E0566 CALL lpm32
0472 933A ST R19,-Y
0473 932A ST R18,-Y
0474 931A ST R17,-Y
0475 930A ST R16,-Y
0476 940E067D CALL div32fs
0478 940E06E9 CALL empy32f
047A 93100112 STS voltemp+1,R17
047C 93000111 STS voltemp,R16
047E 93300114 STS voltemp+3,R19
0480 93200113 STS voltemp+2,R18
(0069) vint=(int)voltemp;
0482 940E057A CALL fp2int
0484 93100110 STS vint+1,R17
0486 9300010F STS vint,R16
(0070) LCD_DisplayInt(2,5,vint);
0488 0118 MOVW R2,R16
0489 8239 STD Y+1,R3
048A 8228 STD Y+0,R2
048B E025 LDI R18,5
048C E002 LDI R16,2
048D DDC4 RCALL _LCD_DisplayInt
(0071) delay_nms(1);
048E E001 LDI R16,1
048F E010 LDI R17,0
0490 DC07 RCALL _delay_nms
0491 CF9C RJMP 0x042E
0492 9622 ADIW R28,2
0493 9508 RET
_int0_isr:
0494 922A ST R2,-Y
0495 938A ST R24,-Y
0496 B62F IN R2,0x3F
0497 922A ST R2,-Y
(0072) }
(0073) }
(0074) }
(0075)
(0076) }
(0077)
(0078)
(0079) //功能:键盘中断扫描程序,外部0中断
(0080) #pragma interrupt_handler int0_isr:2
(0081) void int0_isr(void)
(0082) {
(0083) EIMSK=0x00; //禁止外部中断
0498 2422 CLR R2
0499 BE29 OUT 0x39,R2
(0084) flag=1;
049A E081 LDI R24,1
049B 93800115 STS flag,R24
(0085) EIMSK=0x01; //允许外部中断
FILE: <library>
049D BF89 OUT 0x39,R24
049E 9029 LD R2,Y+
049F BE2F OUT 0x3F,R2
04A0 9189 LD R24,Y+
04A1 9029 LD R2,Y+
04A2 9518 RETI
push_arg4:
04A3 933A ST R19,-Y
04A4 932A ST R18,-Y
push_arg2:
04A5 931A ST R17,-Y
04A6 930A ST R16,-Y
04A7 9508 RET
mod16u:
04A8 9468 BSET 6
04A9 C001 RJMP xdiv16u
div16u:
04AA 94E8 BCLR 6
xdiv16u:
04AB 92EA ST R14,-Y
04AC 92FA ST R15,-Y
04AD 938A ST R24,-Y
04AE 24EE CLR R14
04AF 24FF CLR R15
04B0 E180 LDI R24,0x10
04B1 0F00 LSL R16
04B2 1F11 ROL R17
04B3 1CEE ROL R14
04B4 1CFF ROL R15
04B5 16E2 CP R14,R18
04B6 06F3 CPC R15,R19
04B7 F018 BCS 0x04BB
04B8 1AE2 SUB R14,R18
04B9 0AF3 SBC R15,R19
04BA 9503 INC R16
04BB 958A DEC R24
04BC F7A1 BNE 0x04B1
04BD F416 BRTC 0x04C0
04BE 2D0E MOV R16,R14
04BF 2D1F MOV R17,R15
04C0 9189 LD R24,Y+
04C1 90F9 LD R15,Y+
04C2 90E9 LD R14,Y+
04C3 9508 RET
div32u:
04C4 94E8 BCLR 6
04C5 C001 RJMP 0x04C7
mod32u:
04C6 9468 BSET 6
04C7 D02F RCALL long_div_prolog
04C8 24CC CLR R12
04C9 C008 RJMP 0x04D2
div32s:
04CA 94E8 BCLR 6
04CB C001 RJMP 0x04CD
mod32s:
04CC 9468 BSET 6
04CD D029 RCALL long_div_prolog
04CE FD37 SBRC R19,7
04CF D053 RCALL neg_R16_R19
04D0 FDB7 SBRC R27,7
04D1 D05A RCALL neg_R24_R27
04D2 2477 CLR R7
04D3 2488 CLR R8
04D4 2499 CLR R9
04D5 24AA CLR R10
04D6 24BB CLR R11
04D7 D041 RCALL tst_R16_R19
04D8 F0C1 BEQ 0x04F1
04D9 D044 RCALL tst_R24_R27
04DA F0B1 BEQ 0x04F1
04DB E2E8 LDI R30,0x28
04DC 0F00 LSL R16
04DD 1F11 ROL R17
04DE 1F22 ROL R18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -