📄 adc0809.lst
字号:
__text_start:
__start:
001A E5CF LDI R28,0x5F
001B E0D4 LDI R29,4
001C BFCD OUT 0x3D,R28
001D BFDE OUT 0x3E,R29
001E 51C0 SUBI R28,0x10
001F 40D0 SBCI R29,0
0020 EA0A LDI R16,0xAA
0021 8308 STD Y+0,R16
0022 2400 CLR R0
0023 E6EE LDI R30,0x6E
0024 E0F0 LDI R31,0
0025 E010 LDI R17,0
0026 36EE CPI R30,0x6E
0027 07F1 CPC R31,R17
0028 F011 BEQ 0x002B
0029 9201 ST R0,Z+
002A CFFB RJMP 0x0026
002B 8300 STD Z+0,R16
002C E2E6 LDI R30,0x26
002D E0F0 LDI R31,0
002E E6A0 LDI R26,0x60
002F E0B0 LDI R27,0
0030 E010 LDI R17,0
0031 33E4 CPI R30,0x34
0032 07F1 CPC R31,R17
0033 F021 BEQ 0x0038
0034 95C8 LPM
0035 9631 ADIW R30,1
0036 920D ST R0,X+
0037 CFF9 RJMP 0x0031
0038 D0BD RCALL _main
_exit:
0039 CFFF RJMP _exit
_delayms:
j --> R20
i --> R16
003A D17F RCALL push_gset1
FILE: E:\数据采集作业\ADC0809+AVR\0809.h
(0001) //ICC-AVR application builder : 2007-8-31 下午 05:03:50
(0002) // Target : M8
(0003) // Crystal: 4.0000Mhz
(0004)
(0005) #include <macros.h>
(0006)
(0007) #define pindata PIND
(0008) #define ddrdata DDRD
(0009)
(0010) void delayms(uint i)
(0011) {
(0012) uint j;
(0013) for(;i!=0;i--)
003B C00A RJMP 0x0046
(0014) for(j=4000;j!=0;j--)
003C EA40 LDI R20,0xA0
003D E05F LDI R21,0xF
003E C002 RJMP 0x0041
003F 5041 SUBI R20,1
0040 4050 SBCI R21,0
0041 3040 CPI R20,0
0042 0745 CPC R20,R21
0043 F7D9 BNE 0x003F
0044 5001 SUBI R16,1
0045 4010 SBCI R17,0
0046 3000 CPI R16,0
0047 0701 CPC R16,R17
0048 F799 BNE 0x003C
0049 D173 RCALL pop_gset1
004A 9508 RET
_ADC0909:
data --> Y+0
channel --> R10
004B D16A RCALL push_gset3
004C 2EA0 MOV R10,R16
004D 9724 SBIW R28,4
(0015) ;
(0016) }
(0017)
(0018) /*ADC0809驱动程序*/
(0019) ADC0909(uchar channel)
(0020) {
(0021) unsigned long data;
(0022) ddrdata=0x00;
004E 2422 CLR R2
004F BA21 OUT 0x11,R2
(0023) DDRB|= 0b00000111;
0050 B387 IN R24,0x17
0051 6087 ORI R24,7
0052 BB87 OUT 0x17,R24
(0024) PORTB&=0b11111000;
0053 B388 IN R24,0x18
0054 7F88 ANDI R24,0xF8
0055 BB88 OUT 0x18,R24
(0025) //PORTB|=0b00010000;
(0026)
(0027) //PORTB&=0b11101111s;
(0028)
(0029)
(0030) /*
(0031) if(channel<8)
(0032) {
(0033) PORTB|=channel;
(0034) DDRB|=channel;
(0035) }
(0036) else
(0037) {
(0038) while(1)
(0039) PORTB=0xff;
(0040) }
(0041) */
(0042)
(0043) DDRC =0b00000101;
0056 E085 LDI R24,5
0057 BB84 OUT 0x14,R24
(0044) //PORTC&=0x00;
(0045) PORTC&=0b11111010;//0809初始化
0058 B385 IN R24,0x15
0059 7F8A ANDI R24,0xFA
005A BB85 OUT 0x15,R24
(0046) //PORTC&=0b11111110;
(0047) PORTC|=0b00000001;
005B 9AA8 SBI 0x15,0
(0048) PORTC&=0b11111110;
005C B385 IN R24,0x15
005D 7F8E ANDI R24,0xFE
005E BB85 OUT 0x15,R24
(0049)
(0050) while(!(PINC&0b00000010))
005F 9B99 SBIS 0x13,1
0060 CFFE RJMP 0x005F
(0051) {
(0052) ;
(0053) }
(0054) PORTC|=0b00000100;
0061 9AAA SBI 0x15,2
(0055) data=pindata;
0062 B220 IN R2,0x10
0063 2433 CLR R3
0064 2444 CLR R4
0065 2455 CLR R5
0066 01FE MOVW R30,R28
0067 8220 STD Z+0,R2
0068 8231 STD Z+1,R3
0069 8242 STD Z+2,R4
006A 8253 STD Z+3,R5
(0056) PORTC&=0b11111011;
006B B385 IN R24,0x15
006C 7F8B ANDI R24,0xFB
006D BB85 OUT 0x15,R24
(0057) data=data*10000/255;
006E 01FE MOVW R30,R28
006F 8020 LDD R2,Z+0
0070 8031 LDD R3,Z+1
0071 8042 LDD R4,Z+2
0072 8053 LDD R5,Z+3
0073 E140 LDI R20,0x10
0074 E257 LDI R21,0x27
0075 E060 LDI R22,0
0076 E070 LDI R23,0
0077 925A ST R5,-Y
0078 924A ST R4,-Y
0079 923A ST R3,-Y
007A 922A ST R2,-Y
007B 018A MOVW R16,R20
007C 019B MOVW R18,R22
007D D104 RCALL empy32s
007E EF4F LDI R20,0xFF
007F E050 LDI R21,0
0080 E060 LDI R22,0
0081 E070 LDI R23,0
0082 937A ST R23,-Y
0083 936A ST R22,-Y
0084 935A ST R21,-Y
0085 934A ST R20,-Y
0086 D098 RCALL div32u
0087 01FE MOVW R30,R28
0088 8300 STD Z+0,R16
0089 8311 STD Z+1,R17
008A 8322 STD Z+2,R18
008B 8333 STD Z+3,R19
(0058) return (data);
008C 01FE MOVW R30,R28
008D 8100 LDD R16,Z+0
008E 8111 LDD R17,Z+1
008F 9624 ADIW R28,4
0090 D11F RCALL pop_gset3
0091 9508 RET
_process:
p --> R10
i --> Y+6
0092 D087 RCALL push_arg4
0093 D122 RCALL push_gset3
0094 84AA LDD R10,Y+10
0095 84BB LDD R11,Y+11
FILE: E:\数据采集作业\ADC0809+AVR\SPIshow.h
(0001) //ICC-AVR application builder : 2007-7-29 下午 02:23:54
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <macros.h>
(0006)
(0007) extern uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
(0008) //uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0009) extern uchar data[]={0,0,0,0};
(0010)
(0011)
(0012)
(0013)
(0014) void process(unsigned long i,uchar *p)
(0015) {
(0016) p[0]=i/1000;
0096 EE48 LDI R20,0xE8
0097 E053 LDI R21,3
0098 D14F RCALL <created procedures>
0099 D085 RCALL div32u
009A 01F5 MOVW R30,R10
009B 8300 STD Z+0,R16
(0017) i=i%1000;
009C EE48 LDI R20,0xE8
009D E053 LDI R21,3
009E D149 RCALL <created procedures>
009F D081 RCALL mod32u
00A0 D155 RCALL 0x01F6
(0018) p[1]=i/100;
00A1 E644 LDI R20,0x64
00A2 E050 LDI R21,0
00A3 D144 RCALL <created procedures>
00A4 D07A RCALL div32u
00A5 01F5 MOVW R30,R10
00A6 8301 STD Z+1,R16
(0019) i=i%100;
00A7 E644 LDI R20,0x64
00A8 E050 LDI R21,0
00A9 D13E RCALL <created procedures>
00AA D076 RCALL mod32u
00AB D14A RCALL 0x01F6
(0020) p[2]=i/10;
00AC E04A LDI R20,0xA
00AD E050 LDI R21,0
00AE D139 RCALL <created procedures>
00AF D06F RCALL div32u
00B0 01F5 MOVW R30,R10
00B1 8302 STD Z+2,R16
(0021) i=i%10;
00B2 E04A LDI R20,0xA
00B3 E050 LDI R21,0
00B4 D133 RCALL <created procedures>
00B5 D06B RCALL mod32u
00B6 D13F RCALL 0x01F6
(0022) p[3]=i;
00B7 01FE MOVW R30,R28
00B8 8026 LDD R2,Z+6
00B9 8037 LDD R3,Z+7
00BA 8440 LDD R4,Z+8
00BB 8451 LDD R5,Z+9
00BC 01F5 MOVW R30,R10
00BD 8223 STD Z+3,R2
00BE D0F1 RCALL pop_gset3
00BF 9624 ADIW R28,4
00C0 9508 RET
(0023) }
(0024)
(0025)
(0026) //SPI initialize
(0027) // clock rate: 125000hz
(0028) void spi_init(void)//要初始化
(0029) {
(0030) //PORTB = 0xff;
(0031) DDRB |= BIT(PB5)|BIT(PB3);
_spi_init:
00C1 B387 IN R24,0x17
00C2 6288 ORI R24,0x28
00C3 BB87 OUT 0x17,R24
(0032) SPCR = 0x5F; //setup SPI//如果刷板用7F,仿真用5F
00C4 E58F LDI R24,0x5F
00C5 B98D OUT 0x0D,R24
(0033) SPSR = 0x00; //setup SPI
00C6 2422 CLR R2
00C7 B82E OUT 0x0E,R2
00C8 9508 RET
(0034) }
(0035)
(0036)
(0037) void send(uchar data)
(0038) {
(0039) //PORTB&=0b11111111;//要有启动过程
(0040) SPDR=data;
_send:
data --> R16
00C9 B90F OUT 0x0F,R16
(0041) while( !(SPSR&0x80))
00CA 9B77 SBIS 0x0E,7
00CB CFFE RJMP 0x00CA
00CC 9508 RET
_display:
i --> R20
p --> R22
00CD D0EA RCALL push_gset2
00CE 01B8 MOVW R22,R16
(0042) ;
(0043) }
(0044)
(0045) void display(uchar *p)
(0046) {
(0047) uchar i;
(0048) for(i=3;i!=255;)
00CF E043 LDI R20,3
00D0 C00F RJMP 0x00E0
(0049) {
(0050) send(table[p[i--]]);
00D1 2E24 MOV R2,R20
00D2 2433 CLR R3
00D3 5041 SUBI R20,1
00D4 2DE2 MOV R30,R2
00D5 27FF CLR R31
00D6 0FE6 ADD R30,R22
00D7 1FF7 ADC R31,R23
00D8 81E0 LDD R30,Z+0
00D9 27FF CLR R31
00DA E680 LDI R24,0x60
00DB E090 LDI R25,0
00DC 0FE8 ADD R30,R24
00DD 1FF9 ADC R31,R25
00DE 8100 LDD R16,Z+0
00DF DFE9 RCALL _send
00E0 3F4F CPI R20,0xFF
00E1 F779 BNE 0x00D1
00E2 D0CB RCALL pop_gset2
00E3 9508 RET
FILE: E:\数据采集作业\ADC0809+AVR\main.c
(0001) //ICC-AVR application builder : 2007-8-31 下午 06:40:58
(0002) // Target : M8
(0003) // Crystal: 4.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) #include "0809.h"
(0008) #include "SPIshow.h"
(0009) void port_init(void)
(0010) {
(0011) PORTB = 0x00;
_port_init:
00E4 2422 CLR R2
00E5 BA28 OUT 0x18,R2
(0012) DDRB = 0xff;
00E6 EF8F LDI R24,0xFF
00E7 BB87 OUT 0x17,R24
(0013) PORTC = 0x00; //m103 output only
00E8 BA25 OUT 0x15,R2
(0014) DDRC = 0x00;
00E9 BA24 OUT 0x14,R2
(0015) PORTD = 0xff;
00EA BB82 OUT 0x12,R24
(0016) DDRD = 0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -