📄 led_m16.lst
字号:
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 + -