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

📄 led_m16.lst

📁 51单片机的
💻 LST
📖 第 1 页 / 共 5 页
字号:
    040B 2032      AND	R3,R2
    040C BA3B      OUT	0x1B,R3
(0472)    LED_SCAN_PORTB&=~LED_V5;       //PB4=0
    040D 98C4      CBI	0x18,4
(0473)    if (JS_001>=43)
    040E 91800070  LDS	R24,0x70
    0410 328B      CPI	R24,0x2B
    0411 F010      BCS	0x0414
(0474)        HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
    0412 98AC      CBI	0x15,4
    0413 C001      RJMP	0x0415
(0475)    else 
(0476)        HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
    0414 9AAC      SBI	0x15,4
(0477)    if (JS_001==50)
    0415 91800070  LDS	R24,0x70
    0417 3382      CPI	R24,0x32
    0418 F419      BNE	0x041C
(0478)        JS_001&=0; 
    0419 2422      CLR	R2
    041A 92200070  STS	0x70,R2
(0479)    }
(0480) 
(0481) }
    041C 9508      RET
(0482) /*
(0483) ////////////////////////////TIMER1///////////////////////////////////////////////////////////////////////////
(0484) //TIMER1 initialize - prescale:Falling edge
(0485) // WGM: 0) Normal, TOP=0xFFFF
(0486) // desired value: 0Hz
(0487) // actual value: Out of range
(0488) void timer1_init(void)
(0489) {
(0490)  TCCR1B = 0x00; //stop
(0491)  TCNT1H = 0x00 ; //setup
(0492)  TCNT1L = 0x00 ;
(0493)  OCR1AH = 0x00 ;
(0494)  OCR1AL = 0x00 ;
(0495)  OCR1BH = 0x00 ;
(0496)  OCR1BL = 0x00 ;
(0497) // OCR1CH = $OCR1CH$;
(0498) // OCR1CL = $OCR1CL$;
(0499)  ICR1H  = 0x00 ;
(0500)  ICR1L  = 0x00 ;
(0501)  TCCR1A = 0x00;
(0502)  TCCR1B = 0x87; //start Timer   详见p173  ICP 选上升沿触发  47 87
(0503) }
(0504) /*
(0505) ///////////////////////ICP_INPUT//////////////////////////////////////////////
(0506) #pragma interrupt_handler timer1_capt_isr:6                                 
(0507) void timer1_capt_isr(void)
(0508) {
(0509)  //timer 1 input capture event, read (int)value in ICR1 using;
(0510)  // value=ICR1L;            //Read low byte first (important)
(0511)  // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
(0512)   //LED_DISPLAY_V4=8;          //TEST  OK
(0513)   JS_TIMER1_ICP_INPUT=++JS_TIMER1_ICP_INPUT;    //8 bit  IR INT/TIMES  ++
(0514)        
(0515)    ICP_INT_SN=1;         //ICP 产生中断标志位
(0516) 
(0517)       
(0518)   OUT_22_LOW=JS_TIMER1_ICP_INPUT;  // 记数 二进制显示  test use
(0519)   LED_DISPLAY_V1=(OUT_22_LOW>>3)&0X01;   
(0520)   OUT_22_LOW=JS_TIMER1_ICP_INPUT;     
(0521)   LED_DISPLAY_V2=(OUT_22_LOW>>2)&0X01;
(0522)   OUT_22_LOW=JS_TIMER1_ICP_INPUT;
(0523)   LED_DISPLAY_V3=(OUT_22_LOW>>1)&0X01;
(0524)   OUT_22_LOW=JS_TIMER1_ICP_INPUT;
(0525)   LED_DISPLAY_V4=OUT_22_LOW&0X01;
(0526)   LED_DISPLAY_V5=15;       
(0527)        
(0528) }
(0529)   
(0530)     
(0531) #pragma interrupt_handler timer1_ovf_isr:9
(0532) void timer1_ovf_isr(void)
(0533) {
(0534)  //TIMER1 has overflowed
(0535)  TCNT1H = 0x00; //reload counter high value
(0536)  TCNT1L = 0x00; //reload counter low value
(0537)  
(0538) }
(0539) */
(0540) ////////////////////////////UART0//////////////////////////////////////////////////////////////////////
(0541) 
(0542) //UART0 initialize
(0543) // desired baud rate: 250000
(0544) // actual: baud rate:250000 (0.0%)
(0545) // char size: 9 bit
(0546) // parity: Odd
(0547) void uart0_init(void)
(0548) {
(0549)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    041D 2422      CLR	R2
    041E B82A      OUT	0x0A,R2
(0550)  UCSRA = 0x03;
    041F E083      LDI	R24,3
    0420 B98B      OUT	0x0B,R24
(0551)  UCSRC = BIT(URSEL) | 0x36;
    0421 EB86      LDI	R24,0xB6
    0422 BD80      OUT	0x20,R24
(0552)  UBRRL = 0x07; //set baud rate lo
    0423 E087      LDI	R24,7
    0424 B989      OUT	0x09,R24
(0553)  UBRRH = 0x00; //set baud rate hi
    0425 BC20      OUT	0x20,R2
(0554)  UCSRB = 0xFC;
    0426 EF8C      LDI	R24,0xFC
    0427 B98A      OUT	0x0A,R24
(0555) }
    0428 9508      RET
(0556) 
(0557) 
(0558) #pragma interrupt_handler uart0_rx_isr:12
(0559) void uart0_rx_isr(void)
(0560) {
(0561)  //uart has received a character in UDR
(0562) }
_uart0_rx_isr:
    0429 9518      RETI
(0563) 
(0564) #pragma interrupt_handler uart0_udre_isr:13
(0565) void uart0_udre_isr(void)
(0566) {
(0567)  //character transferred to shift register so UDR is now empty
(0568) }
_uart0_udre_isr:
    042A 9518      RETI
(0569) 
(0570) #pragma interrupt_handler uart0_tx_isr:14
(0571) void uart0_tx_isr(void)
(0572) {
(0573)  //character has been transmitted
(0574) }
_uart0_tx_isr:
    042B 9518      RETI
(0575) 
(0576) //call this routine to initialize all peripherals
(0577) void init_devices(void)
(0578) {
(0579)  //stop errant interrupts until set up
(0580)  CLI(); //disable all interrupts
_init_devices:
    042C 94F8      BCLR	7
(0581)  port_init();
    042D DC42      RCALL	_port_init
(0582) //watchdog_init();
(0583)  timer0_init();
    042E DC53      RCALL	_timer0_init
(0584) 
(0585)  uart0_init();
    042F DFED      RCALL	_uart0_init
(0586)  
(0587)  MCUCR = 0x00;
    0430 2422      CLR	R2
    0431 BE25      OUT	0x35,R2
(0588)  GICR  = 0x00;
    0432 BE2B      OUT	0x3B,R2
(0589)  TIMSK = 0x25; //timer interrupt sources
    0433 E285      LDI	R24,0x25
    0434 BF89      OUT	0x39,R24
(0590)  SEI(); //re-enable interrupts
    0435 9478      BSET	7
(0591)  //all peripherals are now initialized
(0592) }
    0436 9508      RET
(0593) 
(0594) ////////////////////////MAIN////////////////////////////////////////////////////////////////////
(0595) void main(void)
(0596) {
(0597)   
(0598)  
(0599)  init_devices();
_main:
    0437 DFF4      RCALL	_init_devices
    0438 C00A      RJMP	0x0443
(0600)  while (1)
(0601)  {
(0602)  if (bIrCmdOk) CheckIrCmd();
    0439 902000C4  LDS	R2,_bIrCmdOk
    043B 2022      TST	R2
    043C F009      BEQ	0x043E
    043D D111      RCALL	_CheckIrCmd
(0603)  if (bCmdOk) ReadCmd();
    043E 902000C3  LDS	R2,_bCmdOk
    0440 2022      TST	R2
    0441 F009      BEQ	0x0443
    0442 D185      RCALL	_ReadCmd
    0443 CFF5      RJMP	0x0439
(0604)  }
(0605)  
(0606)  //insert your functional code here...
(0607)  
(0608)   
(0609)  //while(N_001<=100)
(0610)  //{
(0611)  //      N_001=N_001+SUM;
(0612)  //}
(0613) 
(0614)   //insert your functional code here...
(0615)  
(0616)  
(0617)  
(0618) } 
    0444 9508      RET
_display_times:
  temp3                --> R20
  temp1                --> R20
  temp2                --> R22
    0445 940E062D  CALL	push_gset2
(0619)       
(0620) void display_times()     //输入三位10进制&8位无符号数 (0xef) 用led 输出 成功
(0621) {
(0622) char temp1,temp2,temp3;
(0623)            temp1=iIrData[0]>>4;
(0624)            temp2=iIrData[0]>>4;
(0625)            //temp1=(iIrData[2]+(iIrData[1]>>4));
(0626)            //temp2=(iIrData[2]+(iIrData[1]>>4));
(0627)            LED_DISPLAY_V2=temp1/100;
(0628)            temp2=temp2%100;
(0629)            temp3=temp2;
(0630)            LED_DISPLAY_V3=temp2/10;
(0631)            LED_DISPLAY_V4=temp3%10;
    0447 918000BC  LDS	R24,_iIrData
    0449 9582      SWAP	R24
    044A 708F      ANDI	R24,0xF
    044B 2F68      MOV	R22,R24
    044C E614      LDI	R17,0x64
    044D 2F08      MOV	R16,R24
    044E 940E05FD  CALL	div8u
    0450 9300007C  STS	0x7C,R16
    0452 E614      LDI	R17,0x64
    0453 2F06      MOV	R16,R22
    0454 940E05FB  CALL	mod8u
    0456 2F60      MOV	R22,R16
    0457 2F46      MOV	R20,R22
    0458 E01A      LDI	R17,0xA
    0459 940E05FD  CALL	div8u
    045B 9300007D  STS	0x7D,R16
    045D E01A      LDI	R17,0xA
    045E 2F04      MOV	R16,R20
    045F 940E05FB  CALL	mod8u
    0461 9300007E  STS	0x7E,R16
(0632)          // LED_DISPLAY_V4=6; //testy
(0633) }
    0463 940E0613  CALL	pop_gset2
    0465 9508      RET
(0634) 
(0635) //红外解码
(0636) void CheckIR()
(0637) {
(0638)    //uchar iNowBit,iPos;
(0639)   if ((PIND&(1<<IR))>0)    //ICP INPUT CHECK
_CheckIR:
    0466 2422      CLR	R2
    0467 B380      IN	R24,0x10
    0468 7480      ANDI	R24,0x40
    0469 1628      CP	R2,R24
    046A F418      BCC	0x046E
(0640)        iNowBit=0;
    046B 922000C9  STS	_iNowBit,R2
    046D C003      RJMP	0x0471
(0641)    else 
(0642)      iNowBit=1;//先反相
    046E E081      LDI	R24,1
    046F 938000C9  STS	_iNowBit,R24
(0643)    
(0644)    //把信号持续的处理作为公共处理
(0645)    if ((iPreBit==1)&&(iNowBit==1))//hight++  
    0471 918000CA  LDS	R24,_iPreBit
    0473 3081      CPI	R24,1
    0474 F451      BNE	0x047F
    0475 918000C9  LDS	R24,_iNowBit
    0477 3081      CPI	R24,1
    0478 F431      BNE	0x047F
(0646) 		  { iHight++;
(0647) 		    return;
    0479 918000C8  LDS	R24,_iHight
    047B 5F8F      SUBI	R24,0xFF
    047C 938000C8  STS	_iHight,R24
    047E C0CF      RJMP	0x054E
(0648) 		  }
(0649)    if ((iPreBit==0)&&(iNowBit==0))//low++
    047F 902000CA  LDS	R2,_iPreBit
    0481 2022      TST	R2
    0482 F451      BNE	0x048D
    0483 902000C9  LDS	R2,_iNowBit
    0485 2022      TST	R2
    0486 F431      BNE	0x048D
(0650) 		  { iLow++;
(0651) 		    return;
    0487 918000C7  LDS	R24,_iLow
    0489 5F8F      SUBI	R24,0xFF
    048A 938000C7  STS	_iLow,R24
    048C C0C1      RJMP	0x054E
(0652) 		  }
(0653) 		  
(0654)    switch (iIrMode)
    048D 910000C6  LDS	R16,_iIrMode
    048F 2711      CLR	R17
    0490 3000      CPI	R16,0
    0491 0701      CPC	R16,R17
    0492 F051      BEQ	0x049D
    0493 3001      CPI	R16,1
    0494 E0E0      LDI	R30,0
    0495 071E      CPC	R17,R30
    0496 F199      BEQ	0x04CA
    0497 3002      CPI	R16,2
    0498 E0E0      LDI	R30,0
    0499 071E      CPC	R17,R30
    049A F409      BNE	0x049C
    049B C056      RJMP	0x04F2
    049C C0AE      RJMP	0x054B
(0655)    {
(0656)      case 0://等待9ms的高电平
(0657) 	      if ((iPreBit==0)&&(iNowBit==1))//0->1:start
    049D 902000CA  LDS	R2,_iPreBit
    049F 2022      TST	R2
    04A0 F451      BNE	0x04AB
    04A1 918000C9  LDS	R24,_iNowBit
    04A3 3081      CPI	R24,1
    04A4 F431      BNE	0x04AB
(0658) 		  { iPreBit=1;
(0659) 		    iHight=1;
(0660) 			return;
    04A5 E081      LDI	R24,1
    04A6 938000CA  STS	_iPreBit,R24
    04A8 938000C8  STS	_iHight,R24
    04AA C0A3      RJMP	0x054E
(0661) 		  }
(0662) 		  
(0663) 		  if ((iPreBit==1)&&(iNowBit==0))//1->0
    04AB 918000CA  LDS	R24,_iPreBit
    04AD 3081      CPI	R24,1
    04AE F009      BEQ	0x04B0
    04AF C09E      RJMP	0x054E
    04B0 902000C9  LDS	R2,_iNowBit
    04B2 2022      TST	R2
    04B3 F009      BEQ	0x04B5
    04B4 C099      RJMP	0x054E
(0664) 		  { iPreBit=0;
(0665) 		    if (iHight>12)//1.30ms
    04B5 2422      CLR	R2
    04B6 922000CA  STS	_iPreBit,R2
    04B8 E08C      LDI	R24,0xC
    04B9 902000C8  LDS	R2,_iHight
    04BB 1582      CP	R24,R2
    04BC F448      BCC	0x04C6
(0666) 			  { iIrMode=1;
(0667) 			    iLow=1;
(0668) 				iHight=0;
    04BD E081      LDI	R24,1
    04BE 938000C6  STS	_iIrMode,R24
    04C0 938000C7  STS	_iLow,R24
    04C2 2422      CLR	R2
    04C3 922000C8  STS	_iHight,R2
(0669) 			    //bCmdOk=1;iCmd=10;//Test..
(0670) 			  }
    04C5 C088      RJMP	0x054E
(0671) 			else
(0672) 			   {iHight=0;//reset
    04C6 2422      CLR	R2
    04C7 922000C8  STS	_iHight,R2
(0673) 			   }
(0674) 			return;
    04C9 C084      RJMP	0x054E
(0675) 		  }
(0676) 	      break;
(0677) 		  
(0678) 	 case 1://等待1.6ms的低电平
(0679) 	      if ((iPreBit==0)&&(iNowBit==1))//0->1
    04CA 902000CA  LDS	R2,_iPreBit
    04CC 2022      TST	R2
    04CD F009      BEQ	0x04CF
    04CE C07F      RJMP	0x054E
    04CF 918000C9  LDS	R24,_iNowBit
    04D1 3081      CPI	R24,1
    04D2 F009      BEQ	0x04D4
    04D3 C07A      RJMP	0x054E
(0680) 		  { iPreBit=1;
(0681) 		    if (iLow>15)//1.6ms
    04D4 E081      LDI	R24,1
    04D5 938000CA  STS	_iPreBit,R24
    04D7 E08F      LDI	R24,0xF
    04D8 902000C7  LDS	R2,_iLow
    04DA 1582      CP	R24,R2
    04DB F490      BCC	0x04EE
(0682) 			  {  iIrMode=2;
(0683) 			     iBitCount=0;
(0684) 				 iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
    04DC E082      LDI	R24,2
    04DD 938000C6  STS	_iIrMode,R24
    04DF 2422      CLR	R2
    04E0 922000C5  STS	_iBitCount,R2
    04E2 922000BC  STS	_iIrData,R2
    04E4 922000BD  STS	_iIrData+1,R2
    04E6 922000BE  STS	_iIrData+2,R2
    04E8 922000BF  STS	_iIrData+3,R2
(0685) 				 iHight=1;
    04EA E081      LDI	R24,1
    04EB 938000C8  STS	_iHight,R24
(0686) 				 //bCmdOk=1;iCmd=10;//Test..
(0687) 			  }
    04ED C060      RJMP	0x054E
(0688) 			else

⌨️ 快捷键说明

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