?? adc.lst
字號:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E0060 CALL _main
_exit:
004A CFFF RJMP _exit
FILE: F:\自編程序\M16\ADC\UART.C
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003) #pragma interrupt_handler USART_Recive_Complete_handler:12
(0004) #pragma interrupt_handler USART_Data_Register_Empty_handler:13
(0005) #pragma interrupt_handler USART_Transmit_Complete_handler:14
(0006) void USART_Init(void)
(0007) {
(0008) //{{WIZARD_MAP(UART)
(0009) // crystal: 16M
(0010) // Baud Rate: 9600
(0011) // Character Size: 8-bit
(0012) // Mode: Asynchronous
(0013) // Parity: Disabled
(0014) // Stop Bit: 1-bit
(0015) UBRRL = 0x33;
_USART_Init:
004B E383 LDI R24,0x33
004C B989 OUT 0x09,R24
(0016) UBRRH = 0x00;
004D 2422 CLR R2
004E BC20 OUT 0x20,R2
(0017) UCSRA = 0x00;
004F B82B OUT 0x0B,R2
(0018) UCSRC = 0x86;
0050 E886 LDI R24,0x86
0051 BD80 OUT 0x20,R24
(0019) UCSRB = 0x18;
0052 E188 LDI R24,0x18
0053 B98A OUT 0x0A,R24
(0020) //UCSRB|=0X80;//開接收結束中斷
(0021) //UCSRB|=0X40;//開發送結束中斷
(0022) //UCSRB|=0X20;//開數據寄存器空中斷
(0023) }
0054 9508 RET
(0024) void USART_Transmit(unsigned char data)
(0025) {
(0026) /* 等待發送緩沖器為空 */
(0027) while ( !( UCSRA & (1<<UDRE)) );
_USART_Transmit:
data --> R16
0055 9B5D SBIS 0x0B,5
0056 CFFE RJMP _USART_Transmit
(0028) /* 將數據放入緩沖器,發送數據 */
(0029) UDR = data;
0057 B90C OUT 0x0C,R16
(0030) }
0058 9508 RET
(0031) unsigned char USART_Recive(void)
(0032) {
(0033) /* 等待接收數據*/
(0034) while ( !(UCSRA & (1<<RXC)) );
_USART_Recive:
0059 9B5F SBIS 0x0B,7
005A CFFE RJMP _USART_Recive
(0035) /* 從緩沖器中獲取并返回數據*/
(0036) return UDR;
005B B10C IN R16,0x0C
005C 9508 RET
(0037) }
(0038) void USART_Recive_Complete_handler(void)
(0039) {
(0040)
(0041) }
_USART_Recive_Complete_handler:
005D 9518 RETI
(0042) void USART_Data_Register_Empty_handler(void)
(0043) {
(0044)
(0045) }void USART_Transmit_Complete_handler(void)
_USART_Data_Register_Empty_handler:
005E 9518 RETI
(0046) {
(0047)
(0048) }
_USART_Transmit_Complete_handler:
005F 9518 RETI
_main:
temp --> Y+1
str --> Y+0
i --> R20
0060 9724 SBIW R28,4
FILE: F:\自編程序\M16\ADC\main.c
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003) void main()
(0004) {
(0005) unsigned char temp,str[4];
(0006) unsigned int i;
(0007) DDRA=0x00;
0061 2422 CLR R2
0062 BA2A OUT 0x1A,R2
(0008) PORTA=0X00;
0063 BA2B OUT 0x1B,R2
(0009) USART_Init();
0064 940E004B CALL _USART_Init
(0010) //ADMUX=0X40;
(0011) // ADCSRA=0XE4;
(0012) // SFIOR&=0X1F;
(0013) ADC_initial();
0066 940E00BA CALL _ADC_initial
0068 C02C RJMP 0x0095
(0014) while(1){
(0015) for(i=0;i<60000;i++);
0069 2744 CLR R20
006A 2755 CLR R21
006B C002 RJMP 0x006E
006C 5F4F SUBI R20,0xFF
006D 4F5F SBCI R21,0xFF
006E 3640 CPI R20,0x60
006F EEEA LDI R30,0xEA
0070 075E CPC R21,R30
0071 F3D0 BCS 0x006C
(0016) MyItoa(ADC_READ()*5,str);
0072 940E00BF CALL _ADC_READ
0074 0118 MOVW R2,R16
0075 019E MOVW R18,R28
0076 E005 LDI R16,5
0077 E010 LDI R17,0
0078 932F PUSH R18
0079 933F PUSH R19
007A 0191 MOVW R18,R2
007B 940E00E5 CALL empy16s
007D 913F POP R19
007E 912F POP R18
007F 940E0098 CALL _MyItoa
(0017) USART_Transmit(str[0]);
0081 8108 LDD R16,Y+0
0082 2711 CLR R17
0083 940E0055 CALL _USART_Transmit
(0018) USART_Transmit(str[1]);
0085 8109 LDD R16,Y+1
0086 2711 CLR R17
0087 940E0055 CALL _USART_Transmit
(0019) USART_Transmit(str[2]);
0089 810A LDD R16,Y+2
008A 2711 CLR R17
008B 940E0055 CALL _USART_Transmit
(0020) USART_Transmit(str[3]);
008D 810B LDD R16,Y+3
008E 2711 CLR R17
008F 940E0055 CALL _USART_Transmit
(0021) USART_Transmit('\n');
0091 E00A LDI R16,0xA
0092 E010 LDI R17,0
0093 940E0055 CALL _USART_Transmit
0095 CFD3 RJMP 0x0069
(0022) }
(0023) }
0096 9624 ADIW R28,4
0097 9508 RET
_MyItoa:
i --> R20
Dat --> R22
Inter --> R10
0098 940E0113 CALL push_gset3
009A 01B9 MOVW R22,R18
009B 0158 MOVW R10,R16
FILE: F:\自編程序\M16\ADC\ADC.C
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003) #define AVCC (1<<REFS0)
(0004) #define V_2.56 (1<<REFS0)|(1<<REFS1)
(0005) #define AD_PRESCAL_2 (1<<ADPS0)
(0006) #define AD_PRESCAL_4 (1<<ADPS1)
(0007) #define AD_PRESCAL_8 (1<<ADPS0)|(1<<ADPS1)
(0008) #define AD_PRESCAL_16 (1<<ADPS2)
(0009) #define AD_PRESCAL_32 (1<<ADPS0)|(1<<ADPS2)
(0010) #define AD_PRESCAL_64 (1<<ADPS1)|(1<<ADPS2)
(0011) #define AD_PRESCAL_128 (1<<ADPS0)|(1<<ADPS2)|(1<<ADPS1)
(0012) #define AD_SE_ADC0 //ADC0
(0013) #define AD_SE_ADC1 (1<<MUX0) //ADC1
(0014) #define AD_SE_ADC2 (1<<MUX1) //ADC2
(0015) #define AD_SE_ADC3 (1<<MUX1)|(1<<MUX0) //ADC3
(0016) #define AD_SE_ADC4 (1<<MUX2)//ADC4
(0017) #define AD_SE_ADC5 (1<<MUX2)|(1<<MUX0)//ADC5
(0018) #define AD_SE_ADC6 (1<<MUX2)|(1<<MUX1) //ADC6
(0019) #define AD_SE_ADC7 (1<<MUX2)|(1<<MUX1)|(1<<MUX0) //ADC7
(0020) //========================================
(0021) //數字轉到字串,函數.--只有4個字節,而且向后對齊,前面補零.
(0022) void MyItoa( unsigned int Inter, unsigned char Dat[])
(0023) {
(0024) unsigned char i;
(0025) for ( i=0; i<4 ; i++ )
009C 2744 CLR R20
009D C017 RJMP 0x00B5
(0026) {
(0027) Dat[3-i]=Inter%10+'0';
009E 2E24 MOV R2,R20
009F 2433 CLR R3
00A0 E0E3 LDI R30,3
00A1 E0F0 LDI R31,0
00A2 19E2 SUB R30,R2
00A3 09F3 SBC R31,R3
00A4 0FE6 ADD R30,R22
00A5 1FF7 ADC R31,R23
00A6 E02A LDI R18,0xA
00A7 E030 LDI R19,0
00A8 0185 MOVW R16,R10
00A9 940E00C9 CALL mod16u
00AB 01C8 MOVW R24,R16
00AC 96C0 ADIW R24,0x30
00AD 8380 STD Z+0,R24
(0028) Inter/=10;
00AE E02A LDI R18,0xA
00AF E030 LDI R19,0
00B0 0185 MOVW R16,R10
00B1 940E00CB CALL div16u
00B3 0158 MOVW R10,R16
00B4 9543 INC R20
00B5 3044 CPI R20,4
00B6 F338 BCS 0x009E
(0029) }
(0030) }
00B7 940E00F5 CALL pop_gset3
00B9 9508 RET
(0031) void ADC_initial(void)
(0032) {
(0033) ADMUX=AVCC;
_ADC_initial:
00BA E480 LDI R24,0x40
00BB B987 OUT 0x07,R24
(0034) ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|AD_PRESCAL_4;
00BC EE82 LDI R24,0xE2
00BD B986 OUT 0x06,R24
(0035) }
00BE 9508 RET
(0036) unsigned int ADC_READ()
(0037) {
(0038) unsigned char temp;
(0039) unsigned int data;
(0040) temp=ADCL;
_ADC_READ:
temp --> R18
data --> R16
00BF B124 IN R18,0x04
(0041) data=ADCH;
00C0 B105 IN R16,0x05
00C1 2711 CLR R17
(0042) data<<=8;
00C2 2F10 MOV R17,R16
00C3 2700 CLR R16
(0043) data+=temp;
00C4 2E22 MOV R2,R18
00C5 2433 CLR R3
00C6 0D02 ADD R16,R2
00C7 1D13 ADC R17,R3
(0044) return(data);
FILE: <library>
00C8 9508 RET
mod16u:
00C9 9468 BSET 6
00CA C001 RJMP xdiv16u
div16u:
00CB 94E8 BCLR 6
xdiv16u:
00CC 92EA ST R14,-Y
00CD 92FA ST R15,-Y
00CE 938A ST R24,-Y
00CF 24EE CLR R14
00D0 24FF CLR R15
00D1 E180 LDI R24,0x10
00D2 0F00 LSL R16
00D3 1F11 ROL R17
00D4 1CEE ROL R14
00D5 1CFF ROL R15
00D6 16E2 CP R14,R18
00D7 06F3 CPC R15,R19
00D8 F018 BCS 0x00DC
00D9 1AE2 SUB R14,R18
00DA 0AF3 SBC R15,R19
00DB 9503 INC R16
00DC 958A DEC R24
00DD F7A1 BNE 0x00D2
00DE F416 BRTC 0x00E1
00DF 2D0E MOV R16,R14
00E0 2D1F MOV R17,R15
00E1 9189 LD R24,Y+
00E2 90F9 LD R15,Y+
00E3 90E9 LD R14,Y+
00E4 9508 RET
empy16s:
00E5 920A ST R0,-Y
00E6 921A ST R1,-Y
00E7 938A ST R24,-Y
00E8 939A ST R25,-Y
00E9 9F02 MUL R16,R18
00EA 01C0 MOVW R24,R0
00EB 9F12 MUL R17,R18
00EC 0D90 ADD R25,R0
00ED 9F03 MUL R16,R19
00EE 0D90 ADD R25,R0
00EF 018C MOVW R16,R24
00F0 9199 LD R25,Y+
00F1 9189 LD R24,Y+
00F2 9019 LD R1,Y+
00F3 9009 LD R0,Y+
00F4 9508 RET
pop_gset3:
00F5 E0E4 LDI R30,4
00F6 940C00FC JMP pop
push_gset1:
00F8 935A ST R21,-Y
00F9 934A ST R20,-Y
00FA 9508 RET
pop_gset1:
00FB E0E1 LDI R30,1
pop:
00FC 9149 LD R20,Y+
00FD 9159 LD R21,Y+
00FE FDE0 SBRC R30,0
00FF 9508 RET
0100 9169 LD R22,Y+
0101 9179 LD R23,Y+
0102 FDE1 SBRC R30,1
0103 9508 RET
0104 90A9 LD R10,Y+
0105 90B9 LD R11,Y+
0106 FDE2 SBRC R30,2
0107 9508 RET
0108 90C9 LD R12,Y+
0109 90D9 LD R13,Y+
010A FDE3 SBRC R30,3
010B 9508 RET
010C 90E9 LD R14,Y+
010D 90F9 LD R15,Y+
010E 9508 RET
push_gset2:
010F 937A ST R23,-Y
0110 936A ST R22,-Y
0111 940C00F8 JMP push_gset1
push_gset3:
0113 92BA ST R11,-Y
0114 92AA ST R10,-Y
0115 940C010F JMP push_gset2
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -