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

📄 ire.lst

📁 16个单片机c语言实验程序
💻 LST
字号:
__text_start:
__start:
      2A E5CF      LDI	R28,0x5F
      2B E0D4      LDI	R29,4
      2C BFCD      OUT	0x3D,R28
      2D BFDE      OUT	0x3E,R29
      2E 51CE      SUBI	R28,0x1E
      2F 40D0      SBCI	R29,0
      30 EA0A      LDI	R16,0xAA
      31 8308      STD	Y+0,R16
      32 2400      CLR	R0
      33 E6E0      LDI	R30,0x60
      34 E0F0      LDI	R31,0
      35 E010      LDI	R17,0
      36 36E0      CPI	R30,0x60
      37 07F1      CPC	R31,R17
      38 F011      BEQ	0x003B
      39 9201      ST	R0,Z+
      3A CFFB      RJMP	0x0036
      3B 8300      STD	Z+0,R16
      3C E5E4      LDI	R30,0x54
      3D E0F0      LDI	R31,0
      3E E6A0      LDI	R26,0x60
      3F E0B0      LDI	R27,0
      40 E010      LDI	R17,0
      41 E000      LDI	R16,0
      42 BF0B      OUT	0x3B,R16
      43 35E4      CPI	R30,0x54
      44 07F1      CPC	R31,R17
      45 F021      BEQ	0x004A
      46 95C8      LPM
      47 9631      ADIW	R30,1
      48 920D      ST	R0,X+
      49 CFF9      RJMP	0x0043
      4A 940E 00EB CALL	_main
_exit:
      4C CFFF      RJMP	_exit
FILE: C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外发射\ire.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) 
(0006) //端口初始化
(0007) void port_init(void)
(0008) {
(0009)  PORTA = 0xff;
_port_init:
      4D EF8F      LDI	R24,0xFF
      4E BB8B      OUT	0x1B,R24
(0010)  DDRA  = 0xff;
      4F BB8A      OUT	0x1A,R24
(0011)  PORTB = 0xff;
      50 BB88      OUT	0x18,R24
(0012)  DDRB  = 0xff;
      51 BB87      OUT	0x17,R24
(0013)  PORTC = 0xff; 
      52 BB85      OUT	0x15,R24
(0014)  DDRC  = 0xff;
      53 BB84      OUT	0x14,R24
(0015)  PORTD = 0xff;
      54 BB82      OUT	0x12,R24
(0016)  DDRD  = 0xff;
      55 BB81      OUT	0x11,R24
      56 9508      RET
(0017) }
(0018) 
(0019) //T0初始化,产生38k的载波
(0020) // actual value: 38.462KHz (1.2%)
(0021) void timer0_init(void)
(0022) {
(0023)  TCCR0 = 0x00; //stop
_timer0_init:
      57 2422      CLR	R2
      58 BE23      OUT	0x33,R2
(0024)  ASSR  = 0x00; //set async mode
      59 BC22      OUT	0x22,R2
(0025)  TCNT0 = 0xe8; //set count
      5A EE88      LDI	R24,0xE8
      5B BF82      OUT	0x32,R24
(0026)  OCR0  = 0x34;
      5C E384      LDI	R24,0x34
      5D BF8C      OUT	0x3C,R24
(0027)  TCCR0 = 0x02; //start timer
      5E E082      LDI	R24,2
      5F BF83      OUT	0x33,R24
      60 9508      RET
_timer0_ovf_isr:
      61 922A      ST	R2,-Y
      62 938A      ST	R24,-Y
      63 B62F      IN	R2,0x3F
      64 922A      ST	R2,-Y
(0028) }
(0029) 
(0030) //T0中断
(0031) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0032) void timer0_ovf_isr(void)
(0033) {
(0034)  TCNT0 = 0xe8; //reload counter value
      65 EE88      LDI	R24,0xE8
      66 BF82      OUT	0x32,R24
(0035)  PORTD^=(1<<1);  //引脚输出38K信号
      67 E082      LDI	R24,2
      68 B222      IN	R2,0x12
      69 2628      EOR	R2,R24
      6A BA22      OUT	0x12,R2
      6B 9029      LD	R2,Y+
      6C BE2F      OUT	0x3F,R2
      6D 9189      LD	R24,Y+
      6E 9029      LD	R2,Y+
      6F 9518      RETI
(0036) }
(0037) 
(0038) //TIMER1 initialize - prescale:8
(0039) // WGM: 0) Normal, TOP=0xFFFF
(0040) // desired value: 588Hz
(0041) // actual value: 588.062Hz (0.0%)
(0042) timer1_init(uchar th,uchar tl)
(0043) {
(0044)  TIFR|=0X04;          //复位溢出标志
_timer1_init:
  tl                   --> R18
  th                   --> R16
      70 B788      IN	R24,0x38
      71 6084      ORI	R24,4
      72 BF88      OUT	0x38,R24
(0045)  TCCR1B = 0x00;       //stop
      73 2422      CLR	R2
      74 BC2E      OUT	0x2E,R2
(0046)  TCNT1H = th;         //setup
      75 BD0D      OUT	0x2D,R16
(0047)  TCNT1L = tl;
      76 BD2C      OUT	0x2C,R18
(0048)  TCCR1A = 0x00;
      77 BC2F      OUT	0x2F,R2
(0049)  TCCR1B = 0x02;       //start Timer
      78 E082      LDI	R24,2
      79 BD8E      OUT	0x2E,R24
(0050)  while(!(TIFR&0X04)); //溢出后离开
      7A B628      IN	R2,0x38
      7B FE22      SBRS	R2,2
      7C CFFD      RJMP	0x007A
      7D 9508      RET
(0051) }
(0052) 
(0053) //call this routine to initialize all peripherals
(0054) void init_devices(void)
(0055) {
(0056)  //stop errant interrupts until set up
(0057)  CLI(); //disable all interrupts
_init_devices:
      7E 94F8      BCLR	7
(0058)  port_init();
      7F DFCD      RCALL	_port_init
(0059)  timer0_init();
      80 DFD6      RCALL	_timer0_init
(0060) 
(0061)  MCUCR = 0x00;
      81 2422      CLR	R2
      82 BE25      OUT	0x35,R2
(0062)  GICR  = 0x00;
      83 BE2B      OUT	0x3B,R2
(0063)  TIMSK = 0x01; //timer interrupt sources
      84 E081      LDI	R24,1
      85 BF89      OUT	0x39,R24
(0064)  SEI(); //re-enable interrupts
      86 9478      BSET	7
      87 9508      RET
(0065)  //all peripherals are now initialized
(0066) }
(0067) 
(0068) out_1() //输出1
(0069) {
(0070) TIMSK=0x01;               //发送
_out_1:
      88 E081      LDI	R24,1
      89 BF89      OUT	0x39,R24
(0071) timer1_init(0xfb,0xa0);  //560us
      8A EA20      LDI	R18,0xA0
      8B EF0B      LDI	R16,0xFB
      8C DFE3      RCALL	_timer1_init
(0072) TIMSK=0x00;               //停止发送
      8D 2422      CLR	R2
      8E BE29      OUT	0x39,R2
(0073) timer1_init(0xf2,0xb7);  //1650us
      8F EB27      LDI	R18,0xB7
      90 EF02      LDI	R16,0xF2
      91 CFDE      RJMP	_timer1_init
(0074) }
(0075) 
(0076) out_0() //输出0
(0077) {
(0078) TIMSK=0x01;               //发送
_out_0:
      92 E081      LDI	R24,1
      93 BF89      OUT	0x39,R24
(0079) timer1_init(0xfb,0xa0);  //560us
      94 EA20      LDI	R18,0xA0
      95 EF0B      LDI	R16,0xFB
      96 DFD9      RCALL	_timer1_init
(0080) TIMSK=0x00;               //停止发送
      97 2422      CLR	R2
      98 BE29      OUT	0x39,R2
(0081) timer1_init(0xfb,0xa0);  //560us
      99 EA20      LDI	R18,0xA0
      9A EF0B      LDI	R16,0xFB
      9B CFD4      RJMP	_timer1_init
(0082) }
(0083) 
(0084) out_f() //输出结束
(0085) {
(0086) TIMSK=0x01;               //发送
_out_f:
      9C E081      LDI	R24,1
      9D BF89      OUT	0x39,R24
(0087) timer1_init(0xfb,0xa0);  //560us
      9E EA20      LDI	R18,0xA0
      9F EF0B      LDI	R16,0xFB
      A0 DFCF      RCALL	_timer1_init
(0088) TIMSK=0x00;               //停止发送
      A1 2422      CLR	R2
      A2 BE29      OUT	0x39,R2
      A3 9508      RET
_send_n:
  i                    --> R22
  cc                   --> R20
  bb                   --> R10
  aa                   --> R12
      A4 940E 00F3 CALL	push_xgsetF03C
      A6 2EA2      MOV	R10,R18
      A7 2EC0      MOV	R12,R16
(0089) }
(0090) 
(0091) //发送函数
(0092) void send_n(uchar aa,uchar bb)  //aa系统码,bb键码
(0093) {
(0094)  uchar cc,i;
(0095)  TIMSK=0x01;
      A8 E081      LDI	R24,1
      A9 BF89      OUT	0x39,R24
(0096)  timer1_init(0xb9,0x9e);     //引导码9ms低
      AA E92E      LDI	R18,0x9E
      AB EB09      LDI	R16,0xB9
      AC DFC3      RCALL	_timer1_init
(0097)  TIMSK=0x00;
      AD 2422      CLR	R2
      AE BE29      OUT	0x39,R2
(0098)  timer1_init(0xdc,0xcf);     //引导码4.5ms高
      AF EC2F      LDI	R18,0xCF
      B0 ED0C      LDI	R16,0xDC
      B1 DFBE      RCALL	_timer1_init
(0099)  //发送系统码      
(0100)  cc=0x80;
      B2 E840      LDI	R20,0x80
(0101)  for(i=0;i<8;i++)        
      B3 2766      CLR	R22
      B4 C008      RJMP	0x00BD
(0102)     {
(0103)      if(aa&cc)
      B5 2C2C      MOV	R2,R12
      B6 2224      AND	R2,R20
      B7 F011      BEQ	0x00BA
(0104)        {
(0105)         out_1();
      B8 DFCF      RCALL	_out_1
(0106)        }
      B9 C001      RJMP	0x00BB
(0107)      else
(0108)        {       
(0109)         out_0();
      BA DFD7      RCALL	_out_0
(0110)        }
(0111)     cc=cc>>1;
      BB 9546      LSR	R20
      BC 9563      INC	R22
      BD 3068      CPI	R22,0x8
      BE F3B0      BCS	0x00B5
(0112)     }
(0113)  //发送系统反码
(0114)  aa=~aa;
      BF 94C0      COM	R12
(0115)  cc=0x80;
      C0 E840      LDI	R20,0x80
(0116)  for(i=0;i<8;i++)        
      C1 2766      CLR	R22
      C2 C008      RJMP	0x00CB
(0117)     {
(0118)      if(aa&cc)
      C3 2C2C      MOV	R2,R12
      C4 2224      AND	R2,R20
      C5 F011      BEQ	0x00C8
(0119)        {
(0120)         out_1();
      C6 DFC1      RCALL	_out_1
(0121)        }
      C7 C001      RJMP	0x00C9
(0122)      else
(0123)        {       
(0124)         out_0();
      C8 DFC9      RCALL	_out_0
(0125)        }
(0126)     cc=cc>>1;
      C9 9546      LSR	R20
      CA 9563      INC	R22
      CB 3068      CPI	R22,0x8
      CC F3B0      BCS	0x00C3
(0127)     }
(0128)  //发送键码   
(0129)  cc=0x80;
      CD E840      LDI	R20,0x80
(0130)  for(i=0;i<8;i++)
      CE 2766      CLR	R22
      CF C008      RJMP	0x00D8
(0131)     {
(0132)      if(bb&cc)
      D0 2C2A      MOV	R2,R10
      D1 2224      AND	R2,R20
      D2 F011      BEQ	0x00D5
(0133)        {
(0134)         out_1();
      D3 DFB4      RCALL	_out_1
(0135)        }
      D4 C001      RJMP	0x00D6
(0136)      else
(0137)        {       
(0138)         out_0();
      D5 DFBC      RCALL	_out_0
(0139)        }
(0140)     cc=cc>>1;
      D6 9546      LSR	R20
      D7 9563      INC	R22
      D8 3068      CPI	R22,0x8
      D9 F3B0      BCS	0x00D0
(0141)     }
(0142)  //发送键码反码
(0143)  bb=~bb;
      DA 94A0      COM	R10
(0144)  cc=0x80;
      DB E840      LDI	R20,0x80
(0145)  for(i=0;i<8;i++)
      DC 2766      CLR	R22
      DD C008      RJMP	0x00E6
(0146)     {
(0147)      if(bb&cc)
      DE 2C2A      MOV	R2,R10
      DF 2224      AND	R2,R20
      E0 F011      BEQ	0x00E3
(0148)        {
(0149)         out_1();
      E1 DFA6      RCALL	_out_1
(0150)        }
      E2 C001      RJMP	0x00E4
(0151)      else
(0152)        {       
(0153)         out_0();
      E3 DFAE      RCALL	_out_0
(0154)        }
(0155)     cc=cc>>1;
      E4 9546      LSR	R20
      E5 9563      INC	R22
      E6 3068      CPI	R22,0x8
      E7 F3B0      BCS	0x00DE
(0156)     }
(0157) //结束
(0158) out_f();
      E8 DFB3      RCALL	_out_f
      E9 940C 00FC JMP	pop_xgsetF03C
(0159) }
(0160) 
(0161) main()
(0162) {
(0163) init_devices();
_main:
      EB DF92      RCALL	_init_devices
      EC C004      RJMP	0x00F1
(0164) while(1)
(0165)      {
(0166)       send_n(0x00,0x58);   //发送遥控码
      ED E528      LDI	R18,0x58
      EE 2700      CLR	R16
      EF DFB4      RCALL	_send_n
(0167) 	  while(1);
FILE: <library>
      F0 CFFF      RJMP	0x00F0
      F1 CFFB      RJMP	0x00ED
      F2 9508      RET
push_xgsetF03C:
      F3 937A      ST	R23,-Y
      F4 936A      ST	R22,-Y
      F5 935A      ST	R21,-Y
      F6 934A      ST	R20,-Y
      F7 92DA      ST	R13,-Y
      F8 92CA      ST	R12,-Y
      F9 92BA      ST	R11,-Y
      FA 92AA      ST	R10,-Y
      FB 9508      RET
pop_xgsetF03C:
      FC 90A9      LD	R10,Y+
      FD 90B9      LD	R11,Y+
      FE 90C9      LD	R12,Y+
      FF 90D9      LD	R13,Y+
     100 9149      LD	R20,Y+
     101 9159      LD	R21,Y+
     102 9169      LD	R22,Y+
     103 9179      LD	R23,Y+
     104 9508      RET

⌨️ 快捷键说明

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