?? yaokong.lst
字號:
__text_start:
__start:
004C E5CF LDI R28,0x5F
004D E0D8 LDI R29,0x8
004E BFCD OUT 0x3D,R28
004F BFDE OUT 0x3E,R29
0050 51C0 SUBI R28,0x10
0051 40D0 SBCI R29,0
0052 EA0A LDI R16,0xAA
0053 8308 STD Y+0,R16
0054 2400 CLR R0
0055 EAE3 LDI R30,0xA3
0056 E0F0 LDI R31,0
0057 E010 LDI R17,0
0058 3BE1 CPI R30,0xB1
0059 07F1 CPC R31,R17
005A F011 BEQ 0x005D
005B 9201 ST R0,Z+
005C CFFB RJMP 0x0058
005D 8300 STD Z+0,R16
005E E5E4 LDI R30,0x54
005F E0F0 LDI R31,0
0060 E6A0 LDI R26,0x60
0061 E0B0 LDI R27,0
0062 E010 LDI R17,0
0063 39E7 CPI R30,0x97
0064 07F1 CPC R31,R17
0065 F021 BEQ 0x006A
0066 95C8 LPM
0067 9631 ADIW R30,1
0068 920D ST R0,X+
0069 CFF9 RJMP 0x0063
006A 940E03E2 CALL _main
_exit:
006C CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\無線視頻車\程序\cw1.c
(0001) #include "iom32v.h"
(0002) #include "macros.h"
(0003) #define wuxian_js PA3 //無線接收
(0004) #define power_led PC6 //電源指示燈
(0005) #define study_key PC1 //學習鍵
(0006) #define UDRE 5 //發送緩沖區為空
(0007) #define DATA_REGISTER_EMPTY (1<<UDRE)
(0008) #define uchar unsigned char
(0009) #define ulong unsigned long
(0010) ulong count,count1; //定時器2計數器
(0011) uchar code[3],code1[3];
(0012) ulong data=0;
(0013) uchar forward[14]={0x00,0x7f,0x7f,0xff,0xff,0xfb,0x00,0x00,0x7f,
(0014) 0xff,0xff,0xff,0xfd,0x00};
(0015) uchar back[14]={0x00,0x7f,0x7f,0xff,0xff,0xfd,0x00,0x00,0x7f,0xff,
(0016) 0xff,0xff,0xfd,0x00};
(0017) uchar UP[7]={0xff,0x01,0x00,0x08,0x00,0x2f,0x38};
(0018) uchar DOWN[7]={0xff,0x01,0x00,0x10,0x00,0x2f,0x40};
(0019) uchar left[7]={0xff,0x01,0x00,0x04,0x3f,0x00,0x44};
(0020) uchar right[7]={0xff,0x01,0x00,0x02,0x3f,0x00,0x42};
(0021) uchar STOP[7]={0xff,0x01,0x00,0x00,0x00,0x00,0x01};
(0022) void delay_ms(void) //毫秒延時
(0023) {
(0024) unsigned int i;
(0025) for (i=0;i<140;i++)
_delay_ms:
i --> R16
006D 2700 CLR R16
006E 2711 CLR R17
006F C002 RJMP 0x0072
0070 5F0F SUBI R16,0xFF
0071 4F1F SBCI R17,0xFF
0072 380C CPI R16,0x8C
0073 E0E0 LDI R30,0
0074 071E CPC R17,R30
0075 F3D0 BCS 0x0070
0076 9508 RET
_delay_nms:
i --> R20
n --> R22
0077 940E03F7 CALL push_gset2
0079 01B8 MOVW R22,R16
(0026) {
(0027) }
(0028) }
(0029)
(0030) void delay_nms(unsigned int n) //延時周期
(0031) {
(0032) unsigned int i;
(0033) for (i=0;i<n;i++)
007A 2744 CLR R20
007B 2755 CLR R21
007C C003 RJMP 0x0080
(0034) {
(0035) delay_ms();
007D DFEF RCALL _delay_ms
007E 5F4F SUBI R20,0xFF
007F 4F5F SBCI R21,0xFF
0080 1746 CP R20,R22
0081 0757 CPC R21,R23
0082 F3D0 BCS 0x007D
0083 940E03EB CALL pop_gset2
0085 9508 RET
(0036) }
(0037) }
(0038) void port_init(void)
(0039) {
(0040) PORTA = 0xff;
_port_init:
0086 EF8F LDI R24,0xFF
0087 BB8B OUT 0x1B,R24
(0041) DDRA = 0x00;
0088 2422 CLR R2
0089 BA2A OUT 0x1A,R2
(0042) PORTB = 0x00;
008A BA28 OUT 0x18,R2
(0043) DDRB = 0x00;
008B BA27 OUT 0x17,R2
(0044) PORTC = 0x01; //m103 output only
008C E081 LDI R24,1
008D BB85 OUT 0x15,R24
(0045) DDRC = 0x00;
008E BA24 OUT 0x14,R2
(0046) PORTD = 0x00;
008F BA22 OUT 0x12,R2
(0047) DDRD = 0x00;
0090 BA21 OUT 0x11,R2
0091 9508 RET
(0048) }
(0049) void uart0_init(void)
(0050) {
(0051) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
0092 2422 CLR R2
0093 B82A OUT 0x0A,R2
(0052) UCSRA = 0x00;
0094 B82B OUT 0x0B,R2
(0053) UCSRC = BIT(URSEL) | 0x06;
0095 E886 LDI R24,0x86
0096 BD80 OUT 0x20,R24
(0054) UBRRL = 0x67; //set baud rate lo6719
0097 E687 LDI R24,0x67
0098 B989 OUT 0x09,R24
(0055) UBRRH = 0x00; //set baud rate hi
0099 BC20 OUT 0x20,R2
(0056) UCSRB = 0x08;
009A E088 LDI R24,0x8
009B B98A OUT 0x0A,R24
009C 9508 RET
(0057) }
(0058) //發送單字節字符
(0059) void uart_transmit_byte( unsigned char data)
(0060) {
(0061) while(!(UCSRA&DATA_REGISTER_EMPTY));
_uart_transmit_byte:
data --> R16
009D 9B5D SBIS 0x0B,5
009E CFFE RJMP _uart_transmit_byte
(0062) UDR=data;
009F B90C OUT 0x0C,R16
00A0 9508 RET
(0063) }
(0064)
(0065) //TIMER2 initialize - prescale:8
(0066) // desired value: 100uSec
(0067) // actual value: 100.000uSec (0.0%)
(0068) void timer2_init(void)
(0069) {
(0070) TCCR2 = 0x00; //stop
_timer2_init:
00A1 2422 CLR R2
00A2 BC25 OUT 0x25,R2
(0071) ASSR = 0x00; //set async mode
00A3 BC22 OUT 0x22,R2
(0072) TCNT2 = 0xCE; //setup
00A4 EC8E LDI R24,0xCE
00A5 BD84 OUT 0x24,R24
(0073) OCR2 = 0x32;
00A6 E382 LDI R24,0x32
00A7 BD83 OUT 0x23,R24
(0074) TCCR2 = 0x02; //start
00A8 E082 LDI R24,2
00A9 BD85 OUT 0x25,R24
00AA 9508 RET
_timer2_ovf_isr:
00AB 920A ST R0,-Y
00AC 921A ST R1,-Y
00AD 922A ST R2,-Y
00AE 923A ST R3,-Y
00AF 924A ST R4,-Y
00B0 925A ST R5,-Y
00B1 938A ST R24,-Y
00B2 93EA ST R30,-Y
00B3 B60F IN R0,0x3F
00B4 920A ST R0,-Y
00B5 940E03F7 CALL push_gset2
(0075) }
(0076)
(0077) #pragma interrupt_handler timer2_ovf_isr:6
(0078) void timer2_ovf_isr(void)
(0079) {
(0080) TCNT2 = 0xCE; //reload counter value
00B7 EC8E LDI R24,0xCE
00B8 BD84 OUT 0x24,R24
(0081) if(count<65535){++count;}
00B9 EF4F LDI R20,0xFF
00BA EF5F LDI R21,0xFF
00BB E060 LDI R22,0
00BC E070 LDI R23,0
00BD 904000AF LDS R4,count+2
00BF 905000B0 LDS R5,count+3
00C1 902000AD LDS R2,count
00C3 903000AE LDS R3,count+1
00C5 1624 CP R2,R20
00C6 0635 CPC R3,R21
00C7 0646 CPC R4,R22
00C8 0657 CPC R5,R23
00C9 F480 BCC 0x00DA
00CA E041 LDI R20,1
00CB E050 LDI R21,0
00CC E060 LDI R22,0
00CD E070 LDI R23,0
00CE 0E24 ADD R2,R20
00CF 1E35 ADC R3,R21
00D0 1E46 ADC R4,R22
00D1 1E57 ADC R5,R23
00D2 923000AE STS count+1,R3
00D4 922000AD STS count,R2
00D6 925000B0 STS count+3,R5
00D8 924000AF STS count+2,R4
(0082) if(count1<65535){++count1;}
00DA EF4F LDI R20,0xFF
00DB EF5F LDI R21,0xFF
00DC E060 LDI R22,0
00DD E070 LDI R23,0
00DE 904000AB LDS R4,count1+2
00E0 905000AC LDS R5,count1+3
00E2 902000A9 LDS R2,count1
00E4 903000AA LDS R3,count1+1
00E6 1624 CP R2,R20
00E7 0635 CPC R3,R21
00E8 0646 CPC R4,R22
00E9 0657 CPC R5,R23
00EA F480 BCC 0x00FB
00EB E041 LDI R20,1
00EC E050 LDI R21,0
00ED E060 LDI R22,0
00EE E070 LDI R23,0
00EF 0E24 ADD R2,R20
00F0 1E35 ADC R3,R21
00F1 1E46 ADC R4,R22
00F2 1E57 ADC R5,R23
00F3 923000AA STS count1+1,R3
00F5 922000A9 STS count1,R2
00F7 925000AC STS count1+3,R5
00F9 924000AB STS count1+2,R4
00FB 940E03EB CALL pop_gset2
00FD 9009 LD R0,Y+
00FE BE0F OUT 0x3F,R0
00FF 91E9 LD R30,Y+
0100 9189 LD R24,Y+
0101 9059 LD R5,Y+
0102 9049 LD R4,Y+
0103 9039 LD R3,Y+
0104 9029 LD R2,Y+
0105 9019 LD R1,Y+
0106 9009 LD R0,Y+
0107 9518 RETI
(0083) }
(0084) //==============================================================================
(0085) void eeprom_writ(uchar dz,uchar sj) //寫EEPROM
(0086) {
(0087) CLI(); //清總中斷
_eeprom_writ:
sj --> R18
dz --> R16
0108 94F8 BCLR 7
(0088) while(EECR & (1<<EEWE)){;}
0109 99E1 SBIC 0x1C,1
010A CFFE RJMP 0x0109
(0089) EEARH=0x00;
010B 2422 CLR R2
010C BA2F OUT 0x1F,R2
(0090) EEARL=dz;
010D BB0E OUT 0x1E,R16
(0091) EEDR=sj;
010E BB2D OUT 0x1D,R18
(0092) EECR |= (1<<EEMWE);
010F 9AE2 SBI 0x1C,2
(0093) EECR |= (1<<EEWE);
0110 9AE1 SBI 0x1C,1
(0094) SEI();
0111 9478 BSET 7
0112 9508 RET
(0095) }
(0096) //==============================================================================
(0097) uchar eeprom_read(uchar dz) //讀EEPROM
(0098) {
(0099) CLI(); //清總中斷
_eeprom_read:
dz --> R16
0113 94F8 BCLR 7
(0100) while(EECR & (1<<EEWE)){;}
0114 99E1 SBIC 0x1C,1
0115 CFFE RJMP 0x0114
(0101) EEARH=0x00;
0116 2422 CLR R2
0117 BA2F OUT 0x1F,R2
(0102) EEARL=dz;
0118 BB0E OUT 0x1E,R16
(0103) EECR |= (1<<EERE);
0119 9AE0 SBI 0x1C,0
(0104) SEI();
011A 9478 BSET 7
(0105) return(EEDR);
011B B30D IN R16,0x1D
011C 9508 RET
(0106) }
(0107) void init_devices(void)
(0108) {
(0109) //stop errant interrupts until set up
(0110) CLI(); //disable all interrupts
_init_devices:
011D 94F8 BCLR 7
(0111) port_init();
011E DF67 RCALL _port_init
(0112) timer2_init();
011F DF81 RCALL _timer2_init
(0113) uart0_init();
0120 DF71 RCALL _uart0_init
(0114) MCUCR = 0x00;
0121 2422 CLR R2
0122 BE25 OUT 0x35,R2
(0115) GICR = 0x00;
0123 BE2B OUT 0x3B,R2
(0116) TIMSK = 0x40; //timer interrupt sources
0124 E480 LDI R24,0x40
0125 BF89 OUT 0x39,R24
(0117) SEI(); //re-enable interrupts
0126 9478 BSET 7
0127 9508 RET
_decode:
j --> R10
i --> R12
data --> Y+0
flag --> R10
pin_var --> R14
0128 940E03F1 CALL push_gset5
012A 9724 SBIW R28,4
(0118) //all peripherals are now initialized
(0119) }
(0120) uchar decode(void)
(0121) {
(0122) uchar pin_var,i;
(0123) uchar flag=0;
012B 24AA CLR R10
(0124) signed char j;
(0125) ulong data=0;
012C E040 LDI R20,0
012D E050 LDI R21,0
012E E060 LDI R22,0
012F E070 LDI R23,0
0130 01FE MOVW R30,R28
0131 8340 STD Z+0,R20
0132 8351 STD Z+1,R21
0133 8362 STD Z+2,R22
0134 8373 STD Z+3,R23
(0126) count1=0;
0135 E040 LDI R20,0
0136 E050 LDI R21,0
0137 E060 LDI R22,0
0138 E070 LDI R23,0
0139 935000AA STS count1+1,R21
013B 934000A9 STS count1,R20
013D 937000AC STS count1+3,R23
013F 936000AB STS count1+2,R22
(0127) DDRA&=~(1<<wuxian_js);PORTA|=(1<<wuxian_js);
0141 98D3 CBI 0x1A,3
0142 9ADB SBI 0x1B,3
0143 C07A RJMP 0x01BE
(0128) while(1)
(0129) {
(0130) if(count1>250){return(0xff);}
0144 EF4A LDI R20,0xFA
0145 E050 LDI R21,0
0146 E060 LDI R22,0
0147 E070 LDI R23,0
0148 904000AB LDS R4,count1+2
014A 905000AC LDS R5,count1+3
014C 902000A9 LDS R2,count1
014E 903000AA LDS R3,count1+1
0150 1542 CP R20,R2
0151 0553 CPC R21,R3
0152 0564 CPC R22,R4
0153 0575 CPC R23,R5
0154 F410 BCC 0x0157
0155 EF0F LDI R16,0xFF
0156 C12C RJMP 0x0283
(0131) pin_var=PINA&(1<<wuxian_js);
0157 B389 IN R24,0x19
0158 7088 ANDI R24,0x8
0159 2EE8 MOV R14,R24
(0132) if(flag==1){break;}
015A 2D8A MOV R24,R10
015B 3081 CPI R24,1
015C F009 BEQ 0x015E
015D C059 RJMP 0x01B7
015E C060 RJMP 0x01BF
(0133) while(pin_var==0)
(0134) {
(0135) count=0;
015F E040 LDI R20,0
0160 E050 LDI R21,0
0161 E060 LDI R22,0
0162 E070 LDI R23,0
0163 935000AE STS count+1,R21
0165 934000AD STS count,R20
0167 937000B0 STS count+3,R23
0169 936000AF STS count+2,R22
(0136) if(count1>250){return(0xff);}
016B EF4A LDI R20,0xFA
016C E050 LDI R21,0
016D E060 LDI R22,0
016E E070 LDI R23,0
016F 904000AB LDS R4,count1+2
0171 905000AC LDS R5,count1+3
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -