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

📄 正弦波.lst

📁 AVR之ATMega16
💻 LST
字号:
__text_start:
__start:
    006B E5CF      LDI	R28,0x5F
    006C E0D4      LDI	R29,4
    006D BFCD      OUT	0x3D,R28
    006E BFDE      OUT	0x3E,R29
    006F 51C0      SUBI	R28,0x10
    0070 40D0      SBCI	R29,0
    0071 EA0A      LDI	R16,0xAA
    0072 8308      STD	Y+0,R16
    0073 2400      CLR	R0
    0074 EEE1      LDI	R30,0xE1
    0075 E0F0      LDI	R31,0
    0076 E010      LDI	R17,0
    0077 3EE1      CPI	R30,0xE1
    0078 07F1      CPC	R31,R17
    0079 F011      BEQ	0x007C
    007A 9201      ST	R0,Z+
    007B CFFB      RJMP	0x0077
    007C 8300      STD	Z+0,R16
    007D E5E4      LDI	R30,0x54
    007E E0F0      LDI	R31,0
    007F E6A0      LDI	R26,0x60
    0080 E0B0      LDI	R27,0
    0081 E010      LDI	R17,0
    0082 3DE5      CPI	R30,0xD5
    0083 07F1      CPC	R31,R17
    0084 F021      BEQ	0x0089
    0085 95C8      LPM
    0086 9631      ADIW	R30,1
    0087 920D      ST	R0,X+
    0088 CFF9      RJMP	0x0082
    0089 940E00FF  CALL	_main
_exit:
    008B CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\正弦波\delay.h
(0001) #define xtal  8                      //8MS
(0002) /************************************************************
(0003) *   函数名称:void DelayUS(unsigned int time)
(0004) *   功    能:软件延时1.1Us 
(0005) *   入口参数:time 延时时间
(0006) *   出口参数:无
(0007) ************************************************************/
(0008) void DelayUS(unsigned int time)
(0009) {   
_DelayUS:
  time                 --> R16
    008C C002      RJMP	0x008F
(0010)      while(time>1)
(0011) 	    time--; 
    008D 5001      SUBI	R16,1
    008E 4010      SBCI	R17,0
    008F E081      LDI	R24,1
    0090 E090      LDI	R25,0
    0091 1780      CP	R24,R16
    0092 0791      CPC	R25,R17
    0093 F3C8      BCS	0x008D
    0094 9508      RET
_DelayMS:
  i                    --> R20
  time                 --> R16
    0095 940E010C  CALL	push_gset1
(0012) }
(0013) /************************************************************
(0014) *   函数名称:void DelayMS(unsigned int time)
(0015) *   功    能:软件延时  1/1000s
(0016) *   入口参数:time 延时时间 MS  
(0017) *   出口参数:无
(0018) ************************************************************/
(0019) void DelayMS (unsigned int time)
(0020) {
    0097 C009      RJMP	0x00A1
(0021)     unsigned int i;
(0022)     while(time--)	
(0023) 	{
(0024) 	  for(i=1;i<(unsigned int)(xtal*143-2);i++)
    0098 E041      LDI	R20,1
    0099 E050      LDI	R21,0
    009A C002      RJMP	0x009D
    009B 5F4F      SUBI	R20,0xFF
    009C 4F5F      SBCI	R21,0xFF
    009D 3746      CPI	R20,0x76
    009E E0E4      LDI	R30,4
    009F 075E      CPC	R21,R30
    00A0 F3D0      BCS	0x009B
    00A1 0118      MOVW	R2,R16
    00A2 5001      SUBI	R16,1
    00A3 4010      SBCI	R17,0
    00A4 2022      TST	R2
    00A5 F791      BNE	0x0098
    00A6 2033      TST	R3
    00A7 F781      BNE	0x0098
    00A8 940E010F  CALL	pop_gset1
    00AA 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\正弦波\正弦波.c
(0001) //内部晶振 8M
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include"delay.h"
(0005) 
(0006) 
(0007) 
(0008) /*------宏定义------*/
(0009) #define uchar	unsigned char
(0010) #define uint	unsigned int
(0011) 
(0012) char x=0;
(0013) char auc_SinParam[128]={
(0014) 128,134,140,147,153,159,165,171,177,182,188,193,198,204,208,213,
(0015) 218,222,226,230,233,237,240,242,245,247,249,251,252,253,254,254,
(0016) 254,254,253,252,251,250,248,246,244,241,238,235,232,228,224,220,
(0017) 215,211,206,201,196,191,185,179,174,168,162,156,150,144,137,131,
(0018) 125,119,112,106,100,94,88,82,77,71,65,60,55,50,45,41,
(0019) 36,32,28,24,21,18,15,12,10,8,6,5,4,3,2,2,
(0020) 2,2,3,4,5,7,9,11,14,16,19,23,26,30,34,38,
(0021) 43,48,52,57,63,68,74,79,85,91,97,103,109,116,122,128 
(0022) };//128点正弦波样本值
(0023) 
(0024) //端口初始化
(0025) void port_init(void)
(0026) {
(0027)  PORTA = 0x00;//设置端口方向和数据
_port_init:
    00AB 2422      CLR	R2
    00AC BA2B      OUT	0x1B,R2
(0028)  DDRA  = 0x00;
    00AD BA2A      OUT	0x1A,R2
(0029)  PORTB = 0x00;
    00AE BA28      OUT	0x18,R2
(0030)  DDRB  = 0x00;
    00AF BA27      OUT	0x17,R2
(0031)  PORTC = 0x00;
    00B0 BA25      OUT	0x15,R2
(0032)  DDRC  = 0x00;
    00B1 BA24      OUT	0x14,R2
(0033)  PORTD = 0x00;
    00B2 BA22      OUT	0x12,R2
(0034)  DDRD  = 0x20;
    00B3 E280      LDI	R24,0x20
    00B4 BB81      OUT	0x11,R24
    00B5 9508      RET
(0035) }
(0036) 
(0037) 
(0038) //定时T1初始化
(0039) void timer1_init(void)
(0040) {
(0041)  TCCR1B = 0x00;//停止定时器
_timer1_init:
    00B6 2422      CLR	R2
    00B7 BC2E      OUT	0x2E,R2
(0042)  TIMSK |= 0x04;//中断允许
    00B8 B789      IN	R24,0x39
    00B9 6084      ORI	R24,4
    00BA BF89      OUT	0x39,R24
(0043)  TIFR   = 0x00;//中断标志位
    00BB BE28      OUT	0x38,R2
(0044)  TCNT1H = 0x00;
    00BC BC2D      OUT	0x2D,R2
(0045)  TCNT1L = 0x00;//初始值
    00BD BC2C      OUT	0x2C,R2
(0046)  OCR1AH = 0x00;
    00BE BC2B      OUT	0x2B,R2
(0047)  OCR1AL = 0xD0;//匹配A值
    00BF ED80      LDI	R24,0xD0
    00C0 BD8A      OUT	0x2A,R24
(0048)  OCR1BH = 0x00;
    00C1 BC29      OUT	0x29,R2
(0049)  OCR1BL = 0x7F;//匹配B值
    00C2 E78F      LDI	R24,0x7F
    00C3 BD88      OUT	0x28,R24
(0050)  ICR1H  = 0xFF;
    00C4 EF8F      LDI	R24,0xFF
    00C5 BD87      OUT	0x27,R24
(0051)  ICR1L  = 0xFF;//输入捕捉匹配值
    00C6 BD86      OUT	0x26,R24
(0052)  TCCR1A = 0x81;
    00C7 E881      LDI	R24,0x81
    00C8 BD8F      OUT	0x2F,R24
(0053)  TCCR1B = 0x09;//启动定时器
    00C9 E089      LDI	R24,0x9
    00CA BD8E      OUT	0x2E,R24
    00CB 9508      RET
_timer1_ovf_isr:
    00CC 922A      ST	R2,-Y
    00CD 923A      ST	R3,-Y
    00CE 938A      ST	R24,-Y
    00CF 939A      ST	R25,-Y
    00D0 93EA      ST	R30,-Y
    00D1 93FA      ST	R31,-Y
    00D2 B62F      IN	R2,0x3F
    00D3 922A      ST	R2,-Y
(0054) }
(0055) 
(0056) 
(0057) //定时器T1溢出中断服务程序
(0058) #pragma interrupt_handler timer1_ovf_isr:9
(0059) void timer1_ovf_isr(void)
(0060) {
(0061)  x=x+1;
    00D4 91800060  LDS	R24,x
    00D6 5F8F      SUBI	R24,0xFF
    00D7 93800060  STS	x,R24
(0062)  if (x>128)
    00D9 E880      LDI	R24,0x80
    00DA 90200060  LDS	R2,x
    00DC 1582      CP	R24,R2
    00DD F418      BCC	0x00E1
(0063)  x=0;
    00DE 2422      CLR	R2
    00DF 92200060  STS	x,R2
(0064)  OCR1A=auc_SinParam[x];//auc_SinParam[x];取样点指针到比较匹配寄存器
    00E1 E681      LDI	R24,0x61
    00E2 E090      LDI	R25,0
    00E3 91E00060  LDS	R30,x
    00E5 27FF      CLR	R31
    00E6 0FE8      ADD	R30,R24
    00E7 1FF9      ADC	R31,R25
    00E8 8020      LDD	R2,Z+0
    00E9 2433      CLR	R3
    00EA BC3B      OUT	0x2B,R3
    00EB BC2A      OUT	0x2A,R2
    00EC 9029      LD	R2,Y+
    00ED BE2F      OUT	0x3F,R2
    00EE 91F9      LD	R31,Y+
    00EF 91E9      LD	R30,Y+
    00F0 9199      LD	R25,Y+
    00F1 9189      LD	R24,Y+
    00F2 9039      LD	R3,Y+
    00F3 9029      LD	R2,Y+
    00F4 9518      RETI
(0065) }
(0066) 
(0067) 
(0068) void init_devices(void)
(0069) {
(0070)  CLI(); //禁止所有中断
_init_devices:
    00F5 94F8      BCLR	7
(0071)  MCUCR  = 0x00;//INT0、INT1中断触发方式
    00F6 2422      CLR	R2
    00F7 BE25      OUT	0x35,R2
(0072)  MCUCSR = 0x80;//禁止JTAG
    00F8 E880      LDI	R24,0x80
    00F9 BF84      OUT	0x34,R24
(0073)  GICR   = 0x00;//外部中断使能
    00FA BE2B      OUT	0x3B,R2
(0074)  port_init();
    00FB DFAF      RCALL	_port_init
(0075)  timer1_init();
    00FC DFB9      RCALL	_timer1_init
(0076)  SEI();//开全局中断
    00FD 9478      BSET	7
    00FE 9508      RET
(0077) }
(0078) //主函数
(0079) void main(void)
(0080) {
(0081)  init_devices();
_main:
    00FF DFF5      RCALL	_init_devices
    0100 C001      RJMP	0x0102
(0082)  //在这继续添加你的代码
(0083)  while(1)
(0084)  {
(0085)   NOP();
FILE: <library>
    0101 0000      NOP
    0102 CFFE      RJMP	0x0101
    0103 9508      RET
push_gset5:
    0104 92FA      ST	R15,-Y
    0105 92EA      ST	R14,-Y
push_gset4:
    0106 92DA      ST	R13,-Y
    0107 92CA      ST	R12,-Y
push_gset3:
    0108 92BA      ST	R11,-Y
    0109 92AA      ST	R10,-Y
push_gset2:
    010A 937A      ST	R23,-Y
    010B 936A      ST	R22,-Y
push_gset1:
    010C 935A      ST	R21,-Y
    010D 934A      ST	R20,-Y
    010E 9508      RET
pop_gset1:
    010F E0E1      LDI	R30,1
pop:
    0110 9149      LD	R20,Y+
    0111 9159      LD	R21,Y+
    0112 FDE0      SBRC	R30,0
    0113 9508      RET
    0114 9169      LD	R22,Y+
    0115 9179      LD	R23,Y+
    0116 FDE1      SBRC	R30,1
    0117 9508      RET
    0118 90A9      LD	R10,Y+
    0119 90B9      LD	R11,Y+
    011A FDE2      SBRC	R30,2
    011B 9508      RET
    011C 90C9      LD	R12,Y+
    011D 90D9      LD	R13,Y+
    011E FDE3      SBRC	R30,3
    011F 9508      RET
    0120 90E9      LD	R14,Y+
    0121 90F9      LD	R15,Y+
    0122 9508      RET

⌨️ 快捷键说明

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