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

📄 adc0809.lst

📁 基于AVR单片机的ADC0808模数转换程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -