📄 adc.lst
字号:
__text_start:
__start:
003D E5CF LDI R28,0x5F
003E E0D4 LDI R29,4
003F BFCD OUT 0x3D,R28
0040 BFDE OUT 0x3E,R29
0041 51C0 SUBI R28,0x10
0042 40D0 SBCI R29,0
0043 EA0A LDI R16,0xAA
0044 8308 STD Y+0,R16
0045 2400 CLR R0
0046 E7E6 LDI R30,0x76
0047 E0F0 LDI R31,0
0048 E010 LDI R17,0
0049 37E8 CPI R30,0x78
004A 07F1 CPC R31,R17
004B F011 BEQ 0x004E
004C 9201 ST R0,Z+
004D CFFB RJMP 0x0049
004E 8300 STD Z+0,R16
004F E6E4 LDI R30,0x64
0050 E0F0 LDI R31,0
0051 E6A0 LDI R26,0x60
0052 E0B0 LDI R27,0
0053 E010 LDI R17,0
0054 37EA CPI R30,0x7A
0055 07F1 CPC R31,R17
0056 F021 BEQ 0x005B
0057 95C8 LPM
0058 9631 ADIW R30,1
0059 920D ST R0,X+
005A CFF9 RJMP 0x0054
005B 940E01B5 CALL _main
_exit:
005D CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\调试成功\adc\abs.h
(0001) #define Red_LedON PORTA&=(~(1<<PA5))
(0002) #define Red_LedOFF PORTA|=(1<<PA5)
(0003) #define Green_LedON PORTA&=(~(1<<PA4))
(0004) #define Green_LedOFF PORTA|=(1<<PA4)
(0005) #define Red_D1glint {if((PINA&(1<<PINA5))!=(1<<PINA5)){PORTA|=(1<<PA5);}else{PORTA&=(~(1<<PA5));}}
(0006) #define Green_D1glint {if((PINA&(1<<PINA4))!=(1<<PINA4)){PORTA|=(1<<PA4);}else{PORTA&=(~(1<<PA4));}}
(0007)
(0008) void WDT_ON(void)
(0009) {
(0010) WDR(); //this prevents a timout on enabling
_WDT_ON:
005E 95A8 WDR
(0011) WDTCR|=(1<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x1F; //特别注意这一条不是ICC生成的,是后来加上的。
005F B581 IN R24,0x21
0060 618F ORI R24,0x1F
0061 BD81 OUT 0x21,R24
(0012) WDTCR&=(~(1<<WDTOE))|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
0062 B581 IN R24,0x21
0063 7E8F ANDI R24,0xEF
0064 BD81 OUT 0x21,R24
0065 9508 RET
(0013) }
(0014)
(0015) void WDT_OFF(void) ///关看门狗
(0016) {
(0017) WDR();
_WDT_OFF:
0066 95A8 WDR
(0018) WDTCR|=(1<<WDTOE)|(1<<WDE);
0067 B581 IN R24,0x21
0068 6188 ORI R24,0x18
0069 BD81 OUT 0x21,R24
(0019) WDTCR=0x00;
006A 2422 CLR R2
006B BC21 OUT 0x21,R2
006C 9508 RET
(0020) }
(0021) void delay_1ms(void)//1ms延时函数
(0022) {
(0023) unsigned int i;
(0024) for (i=0;i<150;i++)
_delay_1ms:
i --> R16
006D 2700 CLR R16
006E 2711 CLR R17
006F C003 RJMP 0x0073
(0025) WDR();
0070 95A8 WDR
0071 5F0F SUBI R16,0xFF
0072 4F1F SBCI R17,0xFF
0073 3906 CPI R16,0x96
0074 E0E0 LDI R30,0
0075 071E CPC R17,R30
0076 F3C8 BCS 0x0070
0077 9508 RET
_delay_nms:
i --> R20
n --> R22
0078 940E02D0 CALL push_gset2
007A 01B8 MOVW R22,R16
(0026) }
(0027)
(0028) void delay_nms(unsigned int n)//延时n毫秒
(0029) {
(0030) unsigned int i;
(0031) for (i=0;i<n;i++)//执行n次1毫秒延时
007B 2744 CLR R20
007C 2755 CLR R21
007D C003 RJMP 0x0081
(0032) {
(0033) delay_1ms();
007E DFEE RCALL _delay_1ms
007F 5F4F SUBI R20,0xFF
0080 4F5F SBCI R21,0xFF
0081 1746 CP R20,R22
0082 0757 CPC R21,R23
0083 F3D0 BCS 0x007E
(0034) }
(0035) WDR();
0084 95A8 WDR
0085 940E02C1 CALL pop_gset2
0087 9508 RET
(0036) }
(0037)
(0038)
(0039) void LED_Wait_ISP(void)
(0040) {
(0041) Red_LedON; delay_nms(200); Red_LedOFF; delay_nms(200);
_LED_Wait_ISP:
0088 98DD CBI 0x1B,5
0089 EC08 LDI R16,0xC8
008A E010 LDI R17,0
008B DFEC RCALL _delay_nms
008C 9ADD SBI 0x1B,5
008D EC08 LDI R16,0xC8
008E E010 LDI R17,0
008F DFE8 RCALL _delay_nms
(0042) Green_LedON; delay_nms(200); Green_LedOFF; delay_nms(200);
0090 98DC CBI 0x1B,4
0091 EC08 LDI R16,0xC8
0092 E010 LDI R17,0
0093 DFE4 RCALL _delay_nms
0094 9ADC SBI 0x1B,4
0095 EC08 LDI R16,0xC8
0096 E010 LDI R17,0
0097 DFE0 RCALL _delay_nms
(0043) Red_LedON; delay_nms(200); Red_LedOFF; delay_nms(200);
0098 98DD CBI 0x1B,5
0099 EC08 LDI R16,0xC8
009A E010 LDI R17,0
009B DFDC RCALL _delay_nms
009C 9ADD SBI 0x1B,5
009D EC08 LDI R16,0xC8
009E E010 LDI R17,0
009F DFD8 RCALL _delay_nms
(0044) Green_LedON; delay_nms(200); Green_LedOFF; delay_nms(200);
00A0 98DC CBI 0x1B,4
00A1 EC08 LDI R16,0xC8
00A2 E010 LDI R17,0
00A3 DFD4 RCALL _delay_nms
00A4 9ADC SBI 0x1B,4
00A5 EC08 LDI R16,0xC8
00A6 E010 LDI R17,0
00A7 DFD0 RCALL _delay_nms
(0045) Red_LedON; delay_nms(200); Red_LedOFF; delay_nms(200);
00A8 98DD CBI 0x1B,5
00A9 EC08 LDI R16,0xC8
00AA E010 LDI R17,0
00AB DFCC RCALL _delay_nms
00AC 9ADD SBI 0x1B,5
00AD EC08 LDI R16,0xC8
00AE E010 LDI R17,0
00AF DFC8 RCALL _delay_nms
(0046) Green_LedON; delay_nms(200); Red_LedOFF; delay_nms(200);
00B0 98DC CBI 0x1B,4
00B1 EC08 LDI R16,0xC8
00B2 E010 LDI R17,0
00B3 DFC4 RCALL _delay_nms
00B4 9ADD SBI 0x1B,5
00B5 EC08 LDI R16,0xC8
00B6 E010 LDI R17,0
00B7 DFC0 RCALL _delay_nms
00B8 9508 RET
(0047) }
(0048) void LED_Texting_ISP(void)
(0049) {
(0050) Green_LedON;//delay_nms(100); Green_LedOFF;
_LED_Texting_ISP:
00B9 98DC CBI 0x1B,4
(0051) Red_LedON; delay_nms(200); Red_LedOFF; delay_nms(200);
00BA 98DD CBI 0x1B,5
00BB EC08 LDI R16,0xC8
00BC E010 LDI R17,0
00BD DFBA RCALL _delay_nms
00BE 9ADD SBI 0x1B,5
00BF EC08 LDI R16,0xC8
00C0 E010 LDI R17,0
00C1 DFB6 RCALL _delay_nms
(0052) Red_LedON; delay_nms(200); Red_LedOFF; delay_nms(200);
00C2 98DD CBI 0x1B,5
00C3 EC08 LDI R16,0xC8
00C4 E010 LDI R17,0
00C5 DFB2 RCALL _delay_nms
00C6 9ADD SBI 0x1B,5
00C7 EC08 LDI R16,0xC8
00C8 E010 LDI R17,0
00C9 DFAE RCALL _delay_nms
(0053) Red_LedON; delay_nms(200); Red_LedOFF; delay_nms(200);
00CA 98DD CBI 0x1B,5
00CB EC08 LDI R16,0xC8
00CC E010 LDI R17,0
00CD DFAA RCALL _delay_nms
00CE 9ADD SBI 0x1B,5
00CF EC08 LDI R16,0xC8
00D0 E010 LDI R17,0
00D1 DFA6 RCALL _delay_nms
00D2 9508 RET
_USART_InitM1681:
tmp --> R10
baud --> R10
00D3 940E02CE CALL push_gset3
00D5 0158 MOVW R10,R16
(0054) }
(0055) #define F_CPU 3686400
(0056) void USART_InitM1681( unsigned int baud )
(0057) {
(0058) unsigned int tmp;
(0059) //设置波特率
(0060) tmp= F_CPU/baud/16-1;
00D6 0115 MOVW R2,R10
00D7 2444 CLR R4
00D8 2455 CLR R5
00D9 E040 LDI R20,0
00DA E450 LDI R21,0x40
00DB E368 LDI R22,0x38
00DC E070 LDI R23,0
00DD 925A ST R5,-Y
00DE 924A ST R4,-Y
00DF 923A ST R3,-Y
00E0 922A ST R2,-Y
00E1 018A MOVW R16,R20
00E2 019B MOVW R18,R22
00E3 940E0226 CALL div32s
00E5 E140 LDI R20,0x10
00E6 E050 LDI R21,0
00E7 E060 LDI R22,0
00E8 E070 LDI R23,0
00E9 937A ST R23,-Y
00EA 936A ST R22,-Y
00EB 935A ST R21,-Y
00EC 934A ST R20,-Y
00ED 940E0226 CALL div32s
00EF 0118 MOVW R2,R16
00F0 0129 MOVW R4,R18
00F1 E041 LDI R20,1
00F2 E050 LDI R21,0
00F3 E060 LDI R22,0
00F4 E070 LDI R23,0
00F5 1A24 SUB R2,R20
00F6 0A35 SBC R3,R21
00F7 0A46 SBC R4,R22
00F8 0A57 SBC R5,R23
00F9 0151 MOVW R10,R2
(0061) UBRRH = (unsigned char)(tmp>>8);
00FA 2C23 MOV R2,R3
00FB 2433 CLR R3
00FC BC20 OUT 0x20,R2
(0062) UBRRL = (unsigned char)tmp;
00FD B8A9 OUT 0x09,R10
(0063) //接收器与发送器使能//
(0064) UCSRB = (1<<RXEN)|(1<<TXEN);
00FE E188 LDI R24,0x18
00FF B98A OUT 0x0A,R24
(0065) //接收器与发送器使能及接收中断使能
(0066) //UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
(0067) //接收器与发送器使能及收发中断使能
(0068) // UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
(0069) // 设置帧格式: 8 个数据位, 1 个停止位//
(0070) UCSRC = (1<<URSEL)|(3<<UCSZ0);
0100 E886 LDI R24,0x86
0101 BD80 OUT 0x20,R24
0102 940E02C4 CALL pop_gset3
0104 9508 RET
(0071) }
(0072) void USART_Transmit8( unsigned char data )
(0073) {
(0074) /*检空发送标志*/
(0075) while ( !( UCSRA & (1<<UDRE)) );
_USART_Transmit8:
data --> R16
0105 9B5D SBIS 0x0B,5
0106 CFFE RJMP _USART_Transmit8
(0076) /*发送数据*/
(0077) UDR = data;
0107 B90C OUT 0x0C,R16
(0078) while ( !( UCSRA & (1<<UDRE)) );
0108 9B5D SBIS 0x0B,5
0109 CFFE RJMP 0x0108
010A 9508 RET
(0079) }
(0080)
(0081) void USART_Transmit_2( void )
(0082) {
(0083) while ( !( UCSRA & (1<<UDRE)) );
_USART_Transmit_2:
010B 9B5D SBIS 0x0B,5
010C CFFE RJMP _USART_Transmit_2
(0084) UDR = 'H';
010D E488 LDI R24,0x48
010E B98C OUT 0x0C,R24
(0085) while ( !( UCSRA & (1<<UDRE)) );
010F 9B5D SBIS 0x0B,5
0110 CFFE RJMP 0x010F
(0086) UDR = 'e';
0111 E685 LDI R24,0x65
0112 B98C OUT 0x0C,R24
(0087) while ( !( UCSRA & (1<<UDRE)) );
0113 9B5D SBIS 0x0B,5
0114 CFFE RJMP 0x0113
(0088) UDR = 'l';
0115 E68C LDI R24,0x6C
0116 B98C OUT 0x0C,R24
(0089) while ( !( UCSRA & (1<<UDRE)) );
0117 9B5D SBIS 0x0B,5
0118 CFFE RJMP 0x0117
(0090) UDR = 'l';
0119 E68C LDI R24,0x6C
011A B98C OUT 0x0C,R24
(0091) while ( !( UCSRA & (1<<UDRE)) );
011B 9B5D SBIS 0x0B,5
011C CFFE RJMP 0x011B
(0092) UDR = 'o';
011D E68F LDI R24,0x6F
011E B98C OUT 0x0C,R24
011F 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003) #include "abs.h"
(0004)
(0005) /* 七段译码字形表 */
(0006) /*const unsigned char tabel[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
(0007) 0x88,0x83,0xc6,0xa1,0x86,0x8e};*/
(0008) //放一个串口通讯时自己能看懂的数据简单处理
(0009) const unsigned char tabel[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15};
(0010) /* 显示缓冲区 */
(0011) unsigned int d[]={0,0,0,0,0,0,0,0,0,0,0};
(0012) void port_init(void)//端口初始化
(0013) {
(0014) PORTA = 0x00;DDRA = 0xff; PORTB = 0x00;DDRB = 0x00;
_port_init:
0120 2422 CLR R2
0121 BA2B OUT 0x1B,R2
0122 EF8F LDI R24,0xFF
0123 BB8A OUT 0x1A,R24
0124 BA28 OUT 0x18,R2
0125 BA27 OUT 0x17,R2
(0015) PORTC = 0x00;DDRC = 0x00; PORTD = 0xff;DDRD = 0x00;
0126 BA25 OUT 0x15,R2
0127 BA24 OUT 0x14,R2
0128 BB82 OUT 0x12,R24
0129 BA21 OUT 0x11,R2
(0016) DDRA =0xff&((~(1<<PA3))|(~(1<<PA6)) );
012A BB8A OUT 0x1A,R24
012B 9508 RET
(0017) }
(0018) void display()
(0019) {
(0020) USART_Transmit8(tabel[d[3]]); //送数据
_display:
012C E584 LDI R24,0x54
012D E090 LDI R25,0
012E 91E00066 LDS R30,0x66
0130 91F00067 LDS R31,0x67
0132 0FE8 ADD R30,R24
0133 1FF9 ADC R31,R25
0134 9104 LPM R16,0(Z)
0135 DFCF RCALL _USART_Transmit8
(0021) delay_nms(10);
0136 E00A LDI R16,0xA
0137 E010 LDI R17,0
0138 DF3F RCALL _delay_nms
(0022) USART_Transmit8(tabel[d[2]]);
0139 E584 LDI R24,0x54
013A E090 LDI R25,0
013B 91E00064 LDS R30,0x64
013D 91F00065 LDS R31,0x65
013F 0FE8 ADD R30,R24
0140 1FF9 ADC R31,R25
0141 9104 LPM R16,0(Z)
0142 DFC2 RCALL _USART_Transmit8
(0023) delay_nms(10);
0143 E00A LDI R16,0xA
0144 E010 LDI R17,0
0145 DF32 RCALL _delay_nms
(0024) USART_Transmit8(tabel[d[1]]);
0146 E584 LDI R24,0x54
0147 E090 LDI R25,0
0148 91E00062 LDS R30,d+2
014A 91F00063 LDS R31,d+3
014C 0FE8 ADD R30,R24
014D 1FF9 ADC R31,R25
014E 9104 LPM R16,0(Z)
014F DFB5 RCALL _USART_Transmit8
(0025) delay_nms(10);
0150 E00A LDI R16,0xA
0151 E010 LDI R17,0
0152 DF25 RCALL _delay_nms
(0026) USART_Transmit8(tabel[d[0]]);
0153 E584 LDI R24,0x54
0154 E090 LDI R25,0
0155 91E00060 LDS R30,d
0157 91F00061 LDS R31,d+1
0159 0FE8 ADD R30,R24
015A 1FF9 ADC R31,R25
015B 9104 LPM R16,0(Z)
015C DFA8 RCALL _USART_Transmit8
(0027) delay_nms(10);
015D E00A LDI R16,0xA
015E E010 LDI R17,0
015F DF18 RCALL _delay_nms
0160 9508 RET
_adctovol:
char_p --> Y+1
i --> R10
temp --> R12
adc --> R10
0161 940E02CC CALL push_gset4
0163 0158 MOVW R10,R16
(0028) }
(0029)
(0030) unsigned int ad_con;//存放PA0的AD转换结果
(0031) /* 将AD结果转换成电压 */
(0032) #define vref 502
(0033) void adctovol(unsigned int adc)
(0034) {
(0035) unsigned int temp;
(0036) unsigned char i;
(0037) unsigned char *char_p;
(0038) temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
0164 0115 MOVW R2,R10
0165 2444 CLR R4
0166 2455 CLR R5
0167 EF46 LDI R20,0xF6
0168 E051 LDI R21,1
0169 E060 LDI R22,0
016A E070 LDI R23,0
016B 925A ST R5,-Y
016C 924A ST R4,-Y
016D 923A ST R3,-Y
016E 922A ST R2,-Y
016F 018A MOVW R16,R20
0170 019B MOVW R18,R22
0171 940E0291 CALL empy32s
0173 E08A LDI R24,0xA
0174 E090 LDI R25,0
0175 938A ST R24,-Y
0176 940E030E CALL lsr32
0178 0168 MOVW R12,R16
(0039) for(i=0;i<3;i++)
0179 24AA CLR R10
017A C015 RJMP 0x0190
(0040) {
(0041) d[i]=temp%10;
017B E082 LDI R24,2
017C 9D8A MUL R24,R10
017D 01F0 MOVW R30,R0
017E E680 LDI R24,0x60
017F E090 LDI R25,0
0180 0FE8 ADD R30,R24
0181 1FF9 ADC R31,R25
0182 E02A LDI R18,0xA
0183 E030 LDI R19,0
0184 0186 MOVW R16,R12
0185 940E0204 CALL mod16u
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -