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

📄 signal.lst

📁 简易信号发生器+Protues仿真,函数波形发生器产生波形表
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
      96 E5CF      LDI	R28,0x5F
      97 E0D2      LDI	R29,2
      98 BFCD      OUT	0x3D,R28
      99 BFDE      OUT	0x3E,R29
      9A 51CE      SUBI	R28,0x1E
      9B 40D0      SBCI	R29,0
      9C EA0A      LDI	R16,0xAA
      9D 8308      STD	Y+0,R16
      9E 2400      CLR	R0
      9F E6E9      LDI	R30,0x69
      A0 E0F0      LDI	R31,0
      A1 E010      LDI	R17,0
      A2 36EA      CPI	R30,0x6A
      A3 07F1      CPC	R31,R17
      A4 F011      BEQ	0x00A7
      A5 9201      ST	R0,Z+
      A6 CFFB      RJMP	0x00A2
      A7 8300      STD	Z+0,R16
      A8 E2E2      LDI	R30,0x22
      A9 E0F1      LDI	R31,1
      AA E6A0      LDI	R26,0x60
      AB E0B0      LDI	R27,0
      AC E011      LDI	R17,1
      AD E000      LDI	R16,0
      AE BF0B      OUT	0x3B,R16
      AF 32EB      CPI	R30,0x2B
      B0 07F1      CPC	R31,R17
      B1 F021      BEQ	0x00B6
      B2 95C8      LPM
      B3 9631      ADIW	R30,1
      B4 920D      ST	R0,X+
      B5 CFF9      RJMP	0x00AF
      B6 D11D      RCALL	_main
_exit:
      B7 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
      B8 D120      RCALL	push_xgsetF000
FILE: E:\OK\DA0832\signal.C
(0001) //ICC-AVR application builder : 2008-9-7 11:00:08
(0002) // Target : M8515
(0003) // Crystal: 16.000Mhz
(0004) 
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007) 
(0008) 
(0009) #define uchar unsigned char
(0010) #define uint  unsigned int
(0011) 
(0012) #define data1 PORTB
(0013) 
(0014) uchar h=0,j=0,k=0,func,th1=0xE7,tl1=0;
(0015) uchar f1=0x06,f2=0;    //250Hz的步进
(0016) uint i=0;
(0017) #pragma data:code
(0018) const uchar sin_table[256]=
(0019) {
(0020) 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
(0021) 0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
(0022) 0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,
(0023) 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
(0024) 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
(0025) 0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,
(0026) 0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,
(0027) 0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,
(0028) 0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,
(0029) 0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
(0030) 0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,
(0031) 0x8,0x7,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
(0032) 0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,
(0033) 0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,
(0034) 0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,
(0035) 0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c
(0036) };
(0037) void delay(uint ms)
(0038) {
(0039)         uint i,j;
(0040) 	for(i=0;i<ms;i++)
      B9 2744      CLR	R20
      BA 2755      CLR	R21
      BB C00B      RJMP	0x00C7
(0041) 	   {
(0042) 	   for(j=0;j<1141;j++);
      BC 2766      CLR	R22
      BD 2777      CLR	R23
      BE C002      RJMP	0x00C1
      BF 5F6F      SUBI	R22,0xFF
      C0 4F7F      SBCI	R23,0xFF
      C1 3765      CPI	R22,0x75
      C2 E0E4      LDI	R30,4
      C3 077E      CPC	R23,R30
      C4 F3D0      BCS	0x00BF
      C5 5F4F      SUBI	R20,0xFF
      C6 4F5F      SBCI	R21,0xFF
      C7 1740      CP	R20,R16
      C8 0751      CPC	R21,R17
      C9 F390      BCS	0x00BC
      CA C113      RJMP	pop_xgsetF000
(0043)        }
(0044) }
(0045) 
(0046) void port_init(void)
(0047) {
(0048)  PORTB = 0x00;
_port_init:
      CB 2422      CLR	R2
      CC BA28      OUT	0x18,R2
(0049)  DDRB  = 0xff;
      CD EF8F      LDI	R24,0xFF
      CE BB87      OUT	0x17,R24
(0050)  PORTC = 0x00;
      CF BA25      OUT	0x15,R2
(0051)  DDRC  = 0xff;
      D0 BB84      OUT	0x14,R24
(0052)  PORTD = 0x00;
      D1 BA22      OUT	0x12,R2
(0053)  DDRD  = 0x01; 
      D2 E081      LDI	R24,1
      D3 BB81      OUT	0x11,R24
(0054)  PORTE = 0x00;
      D4 B827      OUT	0x07,R2
(0055)  DDRE  = 0x00; 
      D5 B826      OUT	0x06,R2
      D6 9508      RET
(0056) }
(0057) 
(0058) //TIMER1 initialize - prescale:1
(0059) // WGM: 0) Normal, TOP=0xFFFF
(0060) // desired value: 400uSec
(0061) // actual value: 400.000uSec (0.0%)
(0062) void timer1_init(void)
(0063) {
(0064)  TCCR1B = 0x00; //stop
_timer1_init:
      D7 2422      CLR	R2
      D8 BC2E      OUT	0x2E,R2
(0065)  TCNT1H = th1; //setup       //th1,tl1用来改变频率
      D9 9020 0063 LDS	R2,th1
      DB BC2D      OUT	0x2D,R2
(0066)  TCNT1L = tl1;
      DC 9020 0064 LDS	R2,tl1
      DE BC2C      OUT	0x2C,R2
(0067)  OCR1AH = 0x20;
      DF E280      LDI	R24,0x20
      E0 BD8B      OUT	0x2B,R24
(0068)  OCR1AL = 0x00;
      E1 2422      CLR	R2
      E2 BC2A      OUT	0x2A,R2
(0069)  OCR1BH = 0x20;
      E3 BD89      OUT	0x29,R24
(0070)  OCR1BL = 0x00;
      E4 BC28      OUT	0x28,R2
(0071)  TCCR1A = 0x00;
      E5 BC2F      OUT	0x2F,R2
(0072)  TCCR1B = 0x01; //start Timer
      E6 E081      LDI	R24,1
      E7 BD8E      OUT	0x2E,R24
      E8 9508      RET
_timer1_ovf_isr:
      E9 922A      ST	R2,-Y
      EA 923A      ST	R3,-Y
      EB 924A      ST	R4,-Y
      EC 925A      ST	R5,-Y
      ED 938A      ST	R24,-Y
      EE 939A      ST	R25,-Y
      EF 93EA      ST	R30,-Y
      F0 93FA      ST	R31,-Y
      F1 B62F      IN	R2,0x3F
      F2 922A      ST	R2,-Y
(0073) }
(0074) #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
(0075) void timer1_ovf_isr(void)
(0076) {
(0077)   TCCR1B = 0x00; //stop
      F3 2422      CLR	R2
      F4 BC2E      OUT	0x2E,R2
(0078)   TCNT1H = th1; //reload counter high value
      F5 9020 0063 LDS	R2,th1
      F7 BC2D      OUT	0x2D,R2
(0079)   TCNT1L = tl1; //reload counter low value
      F8 9020 0064 LDS	R2,tl1
      FA BC2C      OUT	0x2C,R2
(0080)   //func=1;             //设置调试点,计算时间
(0081)   if(func==1)         //正弦波
      FB 9180 0069 LDS	R24,func
      FD 3081      CPI	R24,1
      FE F479      BNE	0x010E
(0082)    {
(0083)      data1=sin_table[j++];
      FF 9020 0061 LDS	R2,j
     101 2433      CLR	R3
     102 2D82      MOV	R24,R2
     103 5F8F      SUBI	R24,0xFF
     104 9380 0061 STS	j,R24
     106 E282      LDI	R24,0x22
     107 E090      LDI	R25,0
     108 2DE2      MOV	R30,R2
     109 27FF      CLR	R31
     10A 0FE8      ADD	R30,R24
     10B 1FF9      ADC	R31,R25
     10C 9024      LPM	R2,0(Z)
     10D BA28      OUT	0x18,R2
(0084)    }    
(0085)      //func++;             //设置调试点
(0086)     if(func==2)    // 锯齿波
     10E 9180 0069 LDS	R24,func
     110 3082      CPI	R24,2
     111 F4A9      BNE	0x0127
(0087)    {
(0088)      if(h<128)
     112 9180 0060 LDS	R24,h
     114 3880      CPI	R24,0x80
     115 F410      BCC	0x0118
(0089) 	   data1=h;
     116 BB88      OUT	0x18,R24
     117 C009      RJMP	0x0121
(0090) 	 else
(0091) 	   data1=255-h;
     118 9020 0060 LDS	R2,h
     11A 2433      CLR	R3
     11B EF8F      LDI	R24,0xFF
     11C E090      LDI	R25,0
     11D 012C      MOVW	R4,R24
     11E 1842      SUB	R4,R2
     11F 0853      SBC	R5,R3
     120 BA48      OUT	0x18,R4
(0092) 	   h++;
     121 9180 0060 LDS	R24,h
     123 5F8F      SUBI	R24,0xFF
     124 9380 0060 STS	h,R24
(0093)    }
     126 C013      RJMP	0x013A
(0094)    else if(func==3)     // 方波
     127 9180 0069 LDS	R24,func
     129 3083      CPI	R24,3
     12A F479      BNE	0x013A
(0095)    { 
(0096)       k++;
     12B 9180 0062 LDS	R24,k
     12D 5F8F      SUBI	R24,0xFF
     12E 9380 0062 STS	k,R24
(0097) 	  if(k<=127)
     130 E78F      LDI	R24,0x7F
     131 9020 0062 LDS	R2,k
     133 1582      CP	R24,R2
     134 F018      BCS	0x0138
(0098) 	    data1=0x00;
     135 2422      CLR	R2
     136 BA28      OUT	0x18,R2
     137 C002      RJMP	0x013A
(0099) 	  else
(0100) 	    data1=0xff;
     138 EF8F      LDI	R24,0xFF
     139 BB88      OUT	0x18,R24
(0101)    
(0102)    }
(0103)   
(0104)   TCCR1B = 0x01; //start Timer
     13A E081      LDI	R24,1
     13B BD8E      OUT	0x2E,R24
     13C 9029      LD	R2,Y+
     13D BE2F      OUT	0x3F,R2
     13E 91F9      LD	R31,Y+
     13F 91E9      LD	R30,Y+

⌨️ 快捷键说明

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