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

📄 dac_sin.lst

📁 这是atmega128单片机的数模转换程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
      60 EFCF      LDI	R28,0xFF
      61 E1D0      LDI	R29,0x10
      62 BFCD      OUT	0x3D,R28
      63 BFDE      OUT	0x3E,R29
      64 51CE      SUBI	R28,0x1E
      65 40D0      SBCI	R29,0
      66 EA0A      LDI	R16,0xAA
      67 8308      STD	Y+0,R16
      68 2400      CLR	R0
      69 E0E0      LDI	R30,0
      6A E0F1      LDI	R31,1
      6B E011      LDI	R17,1
      6C 30E0      CPI	R30,0
      6D 07F1      CPC	R31,R17
      6E F011      BEQ	0x0071
      6F 9201      ST	R0,Z+
      70 CFFB      RJMP	0x006C
      71 8300      STD	Z+0,R16
      72 ECE0      LDI	R30,0xC0
      73 E0F0      LDI	R31,0
      74 E0A0      LDI	R26,0
      75 E0B1      LDI	R27,1
      76 E010      LDI	R17,0
      77 E000      LDI	R16,0
      78 BF0B      OUT	0x3B,R16
      79 3CE0      CPI	R30,0xC0
      7A 07F1      CPC	R31,R17
      7B F021      BEQ	0x0080
      7C 95C8      LPM
      7D 9631      ADIW	R30,1
      7E 920D      ST	R0,X+
      7F CFF9      RJMP	0x0079
      80 940E 00A5 CALL	_main
_exit:
      82 CFFF      RJMP	_exit
FILE: E:\产品\开发板\mega128-board\实验程序\数模转换\正弦波\dac_sin.c
(0001) #include<iom128v.h>
(0002) #include"math.h"
(0003) #define uchar unsigned char 
(0004) #define uint unsigned int 
(0005) 
(0006) //延时函数
(0007) void s_ms(unsigned int t)
(0008) {
(0009)     for(;t>1;t--)
_s_ms:
  t                    --> R16
      83 C002      RJMP	0x0086
      84 5001      SUBI	R16,1
      85 4010      SBCI	R17,0
      86 E081      LDI	R24,1
      87 E090      LDI	R25,0
      88 1780      CP	R24,R16
      89 0791      CPC	R25,R17
      8A F3C8      BCS	0x0084
      8B 9508      RET
(0010)     {
(0011)     }
(0012) }
(0013) 
(0014) //SPI初始化
(0015) void spi_init()    
(0016) {
(0017) DDRB=0xf7;   //端口设置
_spi_init:
      8C EF87      LDI	R24,0xF7
      8D BB87      OUT	0x17,R24
(0018) PORTB=0xff;
      8E EF8F      LDI	R24,0xFF
      8F BB88      OUT	0x18,R24
(0019) SPSR&=0x00;
      90 2422      CLR	R2
      91 B82E      OUT	0x0E,R2
(0020) SPCR=0x5d;   //主机模式 方式0 ocs/16
      92 E58D      LDI	R24,0x5D
      93 B98D      OUT	0x0D,R24
      94 9508      RET
_spi_send:
  spi_hi               --> R12
  spi_lo               --> R10
  spi_data             --> R16
      95 940E 015D CALL	push_xgset003C
(0021) }
(0022) 
(0023) void spi_send(uint spi_data)
(0024) {
(0025) uchar spi_lo,spi_hi;
(0026) spi_lo=spi_data;
      97 2EA0      MOV	R10,R16
(0027) spi_hi=spi_data>>8;
      98 0168      MOVW	R12,R16
      99 2CCD      MOV	R12,R13
      9A 24DD      CLR	R13
(0028) 
(0029) PORTB&=~(1<<0);                //ss=0
      9B 98C0      CBI	0x18,0
(0030) SPDR=spi_hi;                   //发送高字节
      9C B8CF      OUT	0x0F,R12
(0031) while(!(SPSR&(1<<SPIF)));  
      9D 9B77      SBIS	0x0E,7
      9E CFFE      RJMP	0x009D
(0032) SPDR=spi_lo;                   //发送低字节
      9F B8AF      OUT	0x0F,R10
(0033) while(!(SPSR&(1<<SPIF)));
      A0 9B77      SBIS	0x0E,7
      A1 CFFE      RJMP	0x00A0
(0034) PORTB|=(1<<0);
      A2 9AC0      SBI	0x18,0
      A3 940C 0152 JMP	pop_xgset003C
_main:
  aa                   --> Y,+4
  sin_p                --> R20
  pai                  --> Y,+0
      A5 9728      SBIW	R28,0x8
(0035) }
(0036) 
(0037) //使用DAC产生27Hz的正弦波
(0038) //主要时间消耗在sin的计算上,使用查表会更快
(0039) //主函数
(0040) main()
(0041) {
(0042) float pai=0,aa;
      A6 E908      LDI	R16,0x98
      A7 E010      LDI	R17,0
      A8 940E 013E CALL	elpm32
      AA 8308      STD	Y+0,R16
      AB 8319      STD	Y+1,R17
      AC 832A      STD	Y+2,R18
      AD 833B      STD	Y+3,R19
(0043) int sin_p;
(0044) s_ms(50000);  //等待7512复位
      AE E500      LDI	R16,0x50
      AF EC13      LDI	R17,0xC3
      B0 DFD2      RCALL	_s_ms
(0045) spi_init();
      B1 DFDA      RCALL	_spi_init
(0046) 
(0047) spi_send(0x07ff);
      B2 EF0F      LDI	R16,0xFF
      B3 E017      LDI	R17,7
      B4 DFE0      RCALL	_spi_send
      B5 C046      RJMP	0x00FC
(0048) while(1)
(0049)      {
(0050) 	  pai+=0.1;
      B6 8028      LDD	R2,Y+0
      B7 8039      LDD	R3,Y+1
      B8 804A      LDD	R4,Y+2
      B9 805B      LDD	R5,Y+3
      BA E904      LDI	R16,0x94
      BB E010      LDI	R17,0
      BC 940E 013E CALL	elpm32
      BE 933A      ST	R19,-Y
      BF 932A      ST	R18,-Y
      C0 931A      ST	R17,-Y
      C1 930A      ST	R16,-Y
      C2 0181      MOVW	R16,R2
      C3 0192      MOVW	R18,R4
      C4 940E 01E1 CALL	fpadd2
      C6 8308      STD	Y+0,R16
      C7 8319      STD	Y+1,R17
      C8 832A      STD	Y+2,R18
      C9 833B      STD	Y+3,R19
(0051) 	  sin_p=sin(pai)*2000;
      CA 8108      LDD	R16,Y+0
      CB 8119      LDD	R17,Y+1
      CC 812A      LDD	R18,Y+2
      CD 813B      LDD	R19,Y+3
      CE 940E 0573 CALL	_sinf
      D0 0118      MOVW	R2,R16
      D1 0129      MOVW	R4,R18
      D2 E900      LDI	R16,0x90
      D3 E010      LDI	R17,0
      D4 940E 013E CALL	elpm32
      D6 925A      ST	R5,-Y
      D7 924A      ST	R4,-Y
      D8 923A      ST	R3,-Y
      D9 922A      ST	R2,-Y
      DA 940E 03FB CALL	fpmule2
      DC 940E 021D CALL	fpint
      DE 01A8      MOVW	R20,R16
(0052)       sin_p+=2048;               //2048作为中点
      DF 5040      SUBI	R20,0
      E0 4F58      SBCI	R21,0xF8
(0053) 	  spi_send(sin_p);
      E1 018A      MOVW	R16,R20
      E2 DFB2      RCALL	_spi_send
(0054) 	  if(pai==6.28)              //2pai回零
      E3 8028      LDD	R2,Y+0
      E4 8039      LDD	R3,Y+1
      E5 804A      LDD	R4,Y+2
      E6 805B      LDD	R5,Y+3
      E7 E80C      LDI	R16,0x8C
      E8 E010      LDI	R17,0
      E9 940E 013E CALL	elpm32
      EB 933A      ST	R19,-Y
      EC 932A      ST	R18,-Y
      ED 931A      ST	R17,-Y
      EE 930A      ST	R16,-Y
      EF 0181      MOVW	R16,R2
      F0 0192      MOVW	R18,R4
      F1 940E 041E CALL	fpcmp2
      F3 F441      BNE	0x00FC
(0055) 	    {pai=0;}
FILE: <library>
      F4 E908      LDI	R16,0x98
      F5 E010      LDI	R17,0
      F6 940E 013E CALL	elpm32
      F8 8308      STD	Y+0,R16
      F9 8319      STD	Y+1,R17
      FA 832A      STD	Y+2,R18
      FB 833B      STD	Y+3,R19
      FC CFB9      RJMP	0x00B6
      FD 9628      ADIW	R28,0x8
      FE 9508      RET
push_arg4:
      FF 933A      ST	R19,-Y
     100 932A      ST	R18,-Y
push_arg2:
     101 931A      ST	R17,-Y
     102 930A      ST	R16,-Y
     103 9508      RET
mod16s:
     104 9468      BSET	6
     105 92DA      ST	R13,-Y
     106 2ED1      MOV	R13,R17
     107 C004      RJMP	0x010C
div16s:
     108 94E8      BCLR	6
     109 92DA      ST	R13,-Y
     10A 2ED1      MOV	R13,R17
     10B 26D3      EOR	R13,R19
     10C FF17      SBRS	R17,7
     10D C004      RJMP	0x0112
     10E 9510      COM	R17
     10F 9500      COM	R16
     110 5F0F      SUBI	R16,0xFF
     111 4F1F      SBCI	R17,0xFF
     112 FF37      SBRS	R19,7
     113 C004      RJMP	0x0118
     114 9530      COM	R19
     115 9520      COM	R18
     116 5F2F      SUBI	R18,0xFF
     117 4F3F      SBCI	R19,0xFF
     118 940E 0125 CALL	xdiv16u
     11A FED7      SBRS	R13,7
     11B C004      RJMP	0x0120
     11C 9510      COM	R17
     11D 9500      COM	R16
     11E 5F0F      SUBI	R16,0xFF
     11F 4F1F      SBCI	R17,0xFF
     120 90D9      LD	R13,Y+
     121 9508      RET
mod16u:
     122 9468      BSET	6
     123 C001      RJMP	xdiv16u
div16u:
     124 94E8      BCLR	6
xdiv16u:
     125 92EA      ST	R14,-Y
     126 92FA      ST	R15,-Y
     127 938A      ST	R24,-Y
     128 24EE      CLR	R14
     129 24FF      CLR	R15
     12A E180      LDI	R24,0x10
     12B 0F00      LSL	R16
     12C 1F11      ROL	R17
     12D 1CEE      ROL	R14
     12E 1CFF      ROL	R15
     12F 16E2      CP	R14,R18
     130 06F3      CPC	R15,R19
     131 F018      BCS	0x0135
     132 1AE2      SUB	R14,R18
     133 0AF3      SBC	R15,R19
     134 9503      INC	R16
     135 958A      DEC	R24
     136 F7A1      BNE	0x012B
     137 F416      BRTC	0x013A
     138 2D0E      MOV	R16,R14
     139 2D1F      MOV	R17,R15
     13A 9189      LD	R24,Y+
     13B 90F9      LD	R15,Y+
     13C 90E9      LD	R14,Y+
     13D 9508      RET
elpm32:
     13E 93EA      ST	R30,-Y
     13F 93FA      ST	R31,-Y
     140 920A      ST	R0,-Y
     141 2FE0      MOV	R30,R16
     142 2FF1      MOV	R31,R17
     143 95D8      ELPM
     144 2D00      MOV	R16,R0
     145 9631      ADIW	R30,1
     146 95D8      ELPM
     147 2D10      MOV	R17,R0
     148 9631      ADIW	R30,1
     149 95D8      ELPM
     14A 2D20      MOV	R18,R0
     14B 9631      ADIW	R30,1
     14C 95D8      ELPM
     14D 2D30      MOV	R19,R0
     14E 9009      LD	R0,Y+
     14F 91F9      LD	R31,Y+
     150 91E9      LD	R30,Y+
     151 9508      RET
pop_xgset003C:
     152 90A9      LD	R10,Y+
     153 90B9      LD	R11,Y+
     154 90C9      LD	R12,Y+
     155 90D9      LD	R13,Y+
     156 9508      RET
push_xgsetF0FC:
     157 937A      ST	R23,-Y
     158 936A      ST	R22,-Y
push_xgset30FC:
     159 935A      ST	R21,-Y
     15A 934A      ST	R20,-Y
push_xgset00FC:
     15B 92FA      ST	R15,-Y
     15C 92EA      ST	R14,-Y
push_xgset003C:
     15D 92DA      ST	R13,-Y
     15E 92CA      ST	R12,-Y
     15F 92BA      ST	R11,-Y
     160 92AA      ST	R10,-Y
     161 9508      RET
push_xgsetF00C:
     162 937A      ST	R23,-Y
     163 936A      ST	R22,-Y
     164 935A      ST	R21,-Y
     165 934A      ST	R20,-Y
     166 92BA      ST	R11,-Y
     167 92AA      ST	R10,-Y
     168 9508      RET
pop_xgsetF00C:
     169 90A9      LD	R10,Y+
     16A 90B9      LD	R11,Y+
     16B 9149      LD	R20,Y+
     16C 9159      LD	R21,Y+
     16D 9169      LD	R22,Y+
     16E 9179      LD	R23,Y+
     16F 9508      RET
neg32:
     170 9500      COM	R16
     171 9510      COM	R17
     172 9520      COM	R18
     173 9530      COM	R19
     174 5F0F      SUBI	R16,0xFF
     175 4F1F      SBCI	R17,0xFF
     176 4F2F      SBCI	R18,0xFF
     177 4F3F      SBCI	R19,0xFF
     178 9508      RET
fpsub:
     179 9468      BSET	6
     17A C001      RJMP	fpadd_alt
fpadd:
     17B 94E8      BCLR	6
fpadd_alt:
     17C 940E 0383 CALL	saveR8toR25
     17E 940E 0319 CALL	unpacks
     180 F409      BNE	0x0182
     181 C047      RJMP	0x01C9
     182 2EE6      MOV	R14,R22
     183 2ED5      MOV	R13,R21
     184 2EC4      MOV	R12,R20
     185 2EB3      MOV	R11,R19
     186 2EA2      MOV	R10,R18
     187 2E91      MOV	R9,R17
     188 2E80      MOV	R8,R16
     189 8100      LDD	R16,Z+0
     18A 8111      LDD	R17,Z+1
     18B 8122      LDD	R18,Z+2
     18C 8133      LDD	R19,Z+3
     18D 940E 0319 CALL	unpacks
     18F F409      BNE	0x0191
     190 C043      RJMP	0x01D4
     191 2F84      MOV	R24,R20
     192 2F95      MOV	R25,R21
     193 198C      SUB	R24,R12
     194 099D      SBC	R25,R13
     195 F0B9      BEQ	0x01AD
     196 F472      BPL	0x01A5
     197 9590      COM	R25
     198 9580      COM	R24
     199 9601      ADIW	R24,1
     19A 2D4C      MOV	R20,R12
     19B 2D5D      MOV	R21,R13
     19C 3188      CPI	R24,0x18
     19D F5B0      BCC	0x01D4
     19E 9535      ASR	R19
     19F 9527      ROR	R18
     1A0 9517      ROR	R17
     1A1 9507      ROR	R16
     1A2 9701      SBIW	R24,1
     1A3 F7D1      BNE	0x019E
     1A4 C008      RJMP	0x01AD
     1A5 3188      CPI	R24,0x18
     1A6 F510      BCC	0x01C9
     1A7 94B5      ASR	R11
     1A8 94A7      ROR	R10
     1A9 9497      ROR	R9
     1AA 9487      ROR	R8
     1AB 9701      SBIW	R24,1
     1AC F7D1      BNE	0x01A7
     1AD 2766      CLR	R22
     1AE F02E      BRTS	0x01B4
     1AF 0D08      ADD	R16,R8
     1B0 1D19      ADC	R17,R9
     1B1 1D2A      ADC	R18,R10
     1B2 1D3B      ADC	R19,R11
     1B3 C009      RJMP	0x01BD
     1B4 1A80      SUB	R8,R16
     1B5 0A91      SBC	R9,R17
     1B6 0AA2      SBC	R10,R18
     1B7 0AB3      SBC	R11,R19
     1B8 2D08      MOV	R16,R8
     1B9 2D19      MOV	R17,R9
     1BA 2D2A      MOV	R18,R10
     1BB 2D3B      MOV	R19,R11
     1BC 2333      TST	R19
     1BD F41A      BPL	0x01C1
     1BE 940E 0170 CALL	neg32
     1C0 E860      LDI	R22,0x80
     1C1 940E 033E CALL	normalize_and_pack
     1C3 C002      RJMP	0x01C6
     1C4 940E 036C CALL	pack
     1C6 940E 0392 CALL	restoreR8toR25
     1C8 9508      RET
     1C9 8100      LDD	R16,Z+0
     1CA 8111      LDD	R17,Z+1
     1CB 8122      LDD	R18,Z+2
     1CC 8133      LDD	R19,Z+3
     1CD F7C6      BRTC	0x01C6
     1CE 940E 0321 CALL	tstR16_R19
     1D0 F3A9      BEQ	0x01C6
     1D1 E840      LDI	R20,0x80
     1D2 2734      EOR	R19,R20
     1D3 CFF2      RJMP	0x01C6
     1D4 2D08      MOV	R16,R8
     1D5 2D19      MOV	R17,R9
     1D6 2D2A      MOV	R18,R10
     1D7 2D3B      MOV	R19,R11
     1D8 2D4C      MOV	R20,R12
     1D9 2D5D      MOV	R21,R13
     1DA 2D6E      MOV	R22,R14
     1DB 2333      TST	R19
     1DC F73A      BPL	0x01C4
     1DD 940E 0170 CALL	neg32
     1DF E860      LDI	R22,0x80
     1E0 CFE3      RJMP	0x01C4
fpadd2:
     1E1 93FA      ST	R31,-Y
     1E2 93EA      ST	R30,-Y
     1E3 2FEC      MOV	R30,R28
     1E4 2FFD      MOV	R31,R29
     1E5 9632      ADIW	R30,2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -