📄 led_m16.lst
字号:
__text_start:
__start:
004F E5CF LDI R28,0x5F
0050 E0D4 LDI R29,4
0051 BFCD OUT 0x3D,R28
0052 BFDE OUT 0x3E,R29
0053 51C4 SUBI R28,0x14
0054 40D0 SBCI R29,0
0055 EA0A LDI R16,0xAA
0056 8308 STD Y+0,R16
0057 2400 CLR R0
0058 EAEA LDI R30,0xAA
0059 E0F0 LDI R31,0
005A E010 LDI R17,0
005B 3CEC CPI R30,0xCC
005C 07F1 CPC R31,R17
005D F011 BEQ 0x0060
005E 9201 ST R0,Z+
005F CFFB RJMP 0x005B
0060 8300 STD Z+0,R16
0061 E5E4 LDI R30,0x54
0062 E0F0 LDI R31,0
0063 E6A0 LDI R26,0x60
0064 E0B0 LDI R27,0
0065 E010 LDI R17,0
0066 39EE CPI R30,0x9E
0067 07F1 CPC R31,R17
0068 F021 BEQ 0x006D
0069 95C8 LPM
006A 9631 ADIW R30,1
006B 920D ST R0,X+
006C CFF9 RJMP 0x0066
006D 940E0437 CALL _main
_exit:
006F CFFF RJMP _exit
FILE: D:\WORK\ELECTR~1\proteus\M167LE~1\c\led.c
(0001) /*
(0002) 2007-01-05 22:30 2007-1-6 23:04
(0003) infrared
(0004) //ICC-AVR application builder : 2006-12-16 0:17:05 2006-12-18 20:04 IR_CDOE
(0005) // Target : M16
(0006) // Crystal: 16.000Mhz //注册大小写识别 开始必须为字母 红外线
(0007) */
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) #include "led.h"
(0011) #include "IR_DATA.H"
(0012) #define IR 6
(0013) //#include "delay.h"
(0014) //用户码
(0015) #define CUSTOMCODE 9
(0016) //按键码
(0017) #define POWER_ON 221
(0018) #define STAND_BY 220
(0019) #define DMX 216
(0020) #define AUTO 212
(0021) #define AUDIO 208
(0022) #define FADETIME_UP 217
(0023) #define FADETIME_DOWN 209
(0024) #define PATTERN_UP 218
(0025) #define PATTERN_DOWN 210
(0026)
(0027)
(0028) // 值 0 1 10 11 12 13 14 15
(0029) // 0 1 2 3 4 5 6 7 8 9 d f
(0030) char LED_DATA[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xa1,0X0e,0x00,0xff,0xef,0x3f}; //11 FOR "d"
(0031) char iPos,iPreBit,iNowBit,iHight,iLow,iIrMode,iBitCount,bIrCmdOk,bCmdOk,iCmd,iIrData[6];
(0032) char JS_001=0,JS_002=0;
(0033) long JS_003=0;
(0034) char JS_004=0;
(0035) char JS_005=0;
(0036) char JS_006=0;
(0037) char JS_007=0;
(0038) char JS_008=0;
(0039) long TIMER1_ICP_T,TIMER1_ICP_T1,TIMER1_ICP_T2;
(0040) char LED_DISPLAY_V1=10; // 初始值 显示 为 d001
(0041) char LED_DISPLAY_V2=0;
(0042) char LED_DISPLAY_V3=0;
(0043) char LED_DISPLAY_V4=1;
(0044) char LED_DISPLAY_V5=14;
(0045)
(0046) long JS_PRESS_ON_UP=0;
(0047) long JS_PRESS_ON_DOWN=0;
(0048)
(0049) char JS_TIMER1_ICP_INPUT=0;
(0050) char OUT_22_LOW;
(0051) char JS_PRESS_ON_UP_1=0;
(0052) char JS_PRESS_ON_UP_10000=0;
(0053) char JS_PRESS_DWON_ON_1=0;
(0054) char JS_PRESS_ON_DOWN_10000=0;
(0055) int JS_PRESS_ON_UP_FAST=0;
(0056) int JS_PRESS_OFF_UP=0;
(0057) char JS_MODE_MODE=0;
(0058) char JS_MENU_MODE=0;
(0059) char JS_UP_MODE=0;
(0060) char JS_DOWN_MODE=0;
(0061) int JS_PRESS_OFF_DOWN;
(0062) int JS_PRESS_ON_DOWN_FAST;
(0063) char JS_PRESS_DOWN_ON_1;
(0064)
(0065) char ICP_TIME=0,ICP_TIME_T1=0;
(0066) char START_ICP_JS_TLOW=0;
(0067) char ICP_INT_SN=0; //ICP 产生中断标志位
(0068) char KEY_BANK=0;
(0069) char KEY_PAN_MODE_1=0;
(0070) char KEY_PAN_MODE_2=0;
(0071) char KEY_PAN_MODE_3=0;
(0072) char KEY_PAN_3=0;
(0073) char KEY_PAN_4=0;
(0074) char KEY_PAN_5=0;
(0075) char KEY_PAN_6=0;
(0076) char KEY_PAN_7=0;
(0077) char KEY_PAN_8=0;
(0078)
(0079) char PAN_ICP_INPUT_CHECK=0,JS_ICP_INT=0;
(0080)
(0081) char N_001=1,SUM=0;
(0082) char IR_CUSTOM_CODE=0;IR_DATA_CODE=0;
(0083)
(0084) // 共阳极用
(0085) void port_init(void)
(0086) {
(0087) PORTA = 0xFF;
_port_init:
0070 EF8F LDI R24,0xFF
0071 BB8B OUT 0x1B,R24
(0088) DDRA = 0xFF;
0072 BB8A OUT 0x1A,R24
(0089) PORTB = 0x1F;
0073 E18F LDI R24,0x1F
0074 BB88 OUT 0x18,R24
(0090) DDRB = 0x1F;
0075 BB87 OUT 0x17,R24
(0091) PORTC = 0x1F; //m103 output only
0076 BB85 OUT 0x15,R24
(0092) DDRC = 0x10;
0077 E180 LDI R24,0x10
0078 BB84 OUT 0x14,R24
(0093) PORTD = 0x00;
0079 2422 CLR R2
007A BA22 OUT 0x12,R2
(0094) DDRD = 0x00;
007B BA21 OUT 0x11,R2
(0095) }
007C 9508 RET
(0096)
(0097) //Watchdog initialize
(0098) // prescale: 16K
(0099) //void watchdog_init(void)
(0100) //{
(0101) //WDR(); //this prevents a timout on enabling
(0102) //WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
(0103) //}
(0104) //Watchdog initialize
(0105) // prescale: 2048K
(0106) void watchdog_init(void)
(0107) {
(0108) WDR(); //this prevents a timout on enabling
_watchdog_init:
007D 95A8 WDR
(0109) WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
007E E08F LDI R24,0xF
007F BD81 OUT 0x21,R24
(0110) }
0080 9508 RET
(0111) #pragma interrupt_handler eeprom_ready_isr:16
(0112) void eeprom_ready_isr(void)
(0113) {
(0114) //eeprom ready event
(0115) }
_eeprom_ready_isr:
0081 9518 RETI
(0116)
(0117) /////////////////////////TIMER0/////////////////////////////////////////////////////////////
(0118) //TIMER0 initialize - prescale:8
(0119) // WGM: Normal
(0120) // desired value: 100uSec
(0121) // actual value: 100.000uSec (0.0%)
(0122) void timer0_init(void)
(0123) {
(0124) TCCR0 = 0x00; //stop
_timer0_init:
0082 2422 CLR R2
0083 BE23 OUT 0x33,R2
(0125) TCNT0 = 0xCE; //set count
0084 EC8E LDI R24,0xCE
0085 BF82 OUT 0x32,R24
(0126) OCR0 = 0x32; //set compare
0086 E382 LDI R24,0x32
0087 BF8C OUT 0x3C,R24
(0127) TCCR0 = 0x02; //start timer
0088 E082 LDI R24,2
0089 BF83 OUT 0x33,R24
(0128) }
008A 9508 RET
_timer0_ovf_isr:
008B 940E0631 CALL push_lset
008D 940E062D CALL push_gset2
008F 9724 SBIW R28,4
(0129)
(0130) #pragma interrupt_handler timer0_ovf_isr:10
(0131) void timer0_ovf_isr(void)
(0132) {
(0133) TCNT0 = 0xCE; //reload counter value 100us
0090 EC8E LDI R24,0xCE
0091 BF82 OUT 0x32,R24
(0134) LED_SCAN();
0092 D2E4 RCALL _LED_SCAN
(0135) KEY_CHK();
0093 D084 RCALL _KEY_CHK
(0136) CheckIR();
0094 D3D1 RCALL _CheckIR
(0137) JS_003=++JS_003; //KEY_CHECK
(0138) TEST();
0095 E041 LDI R20,1
0096 E050 LDI R21,0
0097 E060 LDI R22,0
0098 E070 LDI R23,0
0099 90400074 LDS R4,0x74
009B 90500075 LDS R5,0x75
009D 90200072 LDS R2,0x72
009F 90300073 LDS R3,0x73
00A1 0E24 ADD R2,R20
00A2 1E35 ADC R3,R21
00A3 1E46 ADC R4,R22
00A4 1E57 ADC R5,R23
00A5 01FE MOVW R30,R28
00A6 8220 STD Z+0,R2
00A7 8231 STD Z+1,R3
00A8 8242 STD Z+2,R4
00A9 8253 STD Z+3,R5
00AA 01FE MOVW R30,R28
00AB 8020 LDD R2,Z+0
00AC 8031 LDD R3,Z+1
00AD 8042 LDD R4,Z+2
00AE 8053 LDD R5,Z+3
00AF 92300073 STS 0x73,R3
00B1 92200072 STS 0x72,R2
00B3 92500075 STS 0x75,R5
00B5 92400074 STS 0x74,R4
00B7 01FE MOVW R30,R28
00B8 8020 LDD R2,Z+0
00B9 8031 LDD R3,Z+1
00BA 8042 LDD R4,Z+2
00BB 8053 LDD R5,Z+3
00BC 92300073 STS 0x73,R3
00BE 92200072 STS 0x72,R2
00C0 92500075 STS 0x75,R5
00C2 92400074 STS 0x74,R4
00C4 D006 RCALL _TEST
(0139) //display_times(); //TEST USE
(0140)
(0141)
(0142)
(0143) }
00C5 9624 ADIW R28,4
00C6 940E0613 CALL pop_gset2
00C8 940E0648 CALL pop_lset
00CA 9518 RETI
_TEST:
00CB 940E062D CALL push_gset2
(0144) /////////////////test/////////////////////////////////////
(0145) void TEST()
(0146) {
(0147) //LED_DISPLAY_V4=8; //TEST
(0148) if (JS_003==10000)
00CD E140 LDI R20,0x10
00CE E257 LDI R21,0x27
00CF E060 LDI R22,0
00D0 E070 LDI R23,0
00D1 90400074 LDS R4,0x74
00D3 90500075 LDS R5,0x75
00D5 90200072 LDS R2,0x72
00D7 90300073 LDS R3,0x73
00D9 1624 CP R2,R20
00DA 0635 CPC R3,R21
00DB 0646 CPC R4,R22
00DC 0657 CPC R5,R23
00DD F421 BNE 0x00E2
(0149) {
(0150) LED_DISPLAY_V5=14;
00DE E08E LDI R24,0xE
00DF 9380007F STS 0x7F,R24
(0151)
(0152) }
00E1 C020 RJMP 0x0102
(0153) else if (JS_003==20000)
00E2 E240 LDI R20,0x20
00E3 E45E LDI R21,0x4E
00E4 E060 LDI R22,0
00E5 E070 LDI R23,0
00E6 90400074 LDS R4,0x74
00E8 90500075 LDS R5,0x75
00EA 90200072 LDS R2,0x72
00EC 90300073 LDS R3,0x73
00EE 1624 CP R2,R20
00EF 0635 CPC R3,R21
00F0 0646 CPC R4,R22
00F1 0657 CPC R5,R23
00F2 F479 BNE 0x0102
(0154) {
(0155) JS_003=0;
(0156) LED_DISPLAY_V5=13;
00F3 E040 LDI R20,0
00F4 E050 LDI R21,0
00F5 E060 LDI R22,0
00F6 E070 LDI R23,0
00F7 93500073 STS 0x73,R21
00F9 93400072 STS 0x72,R20
00FB 93700075 STS 0x75,R23
00FD 93600074 STS 0x74,R22
00FF E08D LDI R24,0xD
0100 9380007F STS 0x7F,R24
(0157) }
(0158) }
0102 940E0613 CALL pop_gset2
0104 9508 RET
(0159) /////////////////////////timer2///////////////////////////////////////////////////////////////////
(0160) //TIMER2 initialize - prescale:32
(0161) // WGM: Normal
(0162) // desired value: 10uSec
(0163) // actual value: 10.000uSec (0.0%)
(0164) void timer2_init(void)
(0165) {
(0166) TCCR2 = 0x00; //stop
_timer2_init:
0105 2422 CLR R2
0106 BC25 OUT 0x25,R2
(0167) ASSR = 0x00; //set async mode
0107 BC22 OUT 0x22,R2
(0168) TCNT2 = 0xFB; //setup
0108 EF8B LDI R24,0xFB
0109 BD84 OUT 0x24,R24
(0169) OCR2 = 0x05;
010A E085 LDI R24,5
010B BD83 OUT 0x23,R24
(0170) TCCR2 = 0x03; //start
010C E083 LDI R24,3
010D BD85 OUT 0x25,R24
(0171) }
010E 9508 RET
_timer2_ovf_isr:
010F 938A ST R24,-Y
0110 B78F IN R24,0x3F
0111 938A ST R24,-Y
(0172)
(0173) #pragma interrupt_handler timer2_ovf_isr:5
(0174) void timer2_ovf_isr(void) //10us
(0175) {
(0176) TCNT2 = 0xFB; //reload counter value
0112 EF8B LDI R24,0xFB
0113 BD84 OUT 0x24,R24
(0177) //ICP_INT_JS();
(0178) //ICP_INT_CLR_JS();
(0179)
(0180) }
0114 9189 LD R24,Y+
0115 BF8F OUT 0x3F,R24
0116 9189 LD R24,Y+
0117 9518 RETI
(0181) /////////////////////////KEY_CHK/////////////////////////////////////////////////////////////
(0182)
(0183) void KEY_CHK()
(0184) {
(0185)
(0186)
(0187) KEY_CHK_MODE(); // 调用 KEY_CHK_MODE
_KEY_CHK:
0118 D003 RCALL _KEY_CHK_MODE
(0188) KEY_CHK_MENU(); // 调用 KEY_CHK_MENU
0119 D045 RCALL _KEY_CHK_MENU
(0189) KEY_CHK_UP(); // 调用 KEY_CHK_UP
011A D045 RCALL _KEY_CHK_UP
(0190) KEY_CHK_DOWN(); // 调用 KEY_CHK_DOWN
(0191) }
011B C14E RJMP _KEY_CHK_DOWN
(0192) //////////////////////////MODE///////////////////////////////////////////////////////////
(0193) void KEY_CHK_MODE() //100us /times
(0194) {
(0195) KEY_BANK=KEY_INPUT; // 取PINC值
(0196) KEY_BANK&=0X01; // 取mode 值
(0197) if (KEY_BANK==0) //有按下 执行
_KEY_CHK_MODE:
011C B223 IN R2,0x13
011D 92200099 STS 0x99,R2
011F 2D82 MOV R24,R2
0120 7081 ANDI R24,1
0121 93800099 STS 0x99,R24
0123 2388 TST R24
0124 F529 BNE 0x014A
(0198) { //TEST--------OK------------->>>>
(0199) KEY_BANK=1;
(0200) JS_004=++JS_004;
(0201) if (JS_004==1)
0125 E081 LDI R24,1
0126 93800099 STS 0x99,R24
0128 91800076 LDS R24,0x76
012A 5F8F SUBI R24,0xFF
012B 2E28 MOV R2,R24
012C 92200076 STS 0x76,R2
012E 92200076 STS 0x76,R2
0130 3081 CPI R24,1
0131 F449 BNE 0x013B
(0202) {
(0203) //LED_DISPLAY_V1=11;
(0204) LED_DISPLAY_V2=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -