📄 main.lis
字号:
00B8 80E4 ldi R24,64
00BA 89B9 out 0x9,R24
00BC .dbline 107
00BC ; UBRRH = 0x00; //set baud rate hi
00BC 20BC out 0x20,R2
00BE .dbline 108
00BE ; UCSRB = 0x98;
00BE 88E9 ldi R24,152
00C0 8AB9 out 0xa,R24
00C2 .dbline -2
00C2 L12:
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbend
00C4 .dbfunc e USART_Transmit _USART_Transmit fV
00C4 ; data -> R16
.even
00C4 _USART_Transmit::
00C4 .dbline -1
00C4 .dbline 112
00C4 ; }
00C4 ;
00C4 ; void USART_Transmit( unsigned char data )
00C4 ; {
00C4 L14:
00C4 .dbline 115
00C4 L15:
00C4 .dbline 114
00C4 ;
00C4 ; while ( !( UCSRA & (1<<UDRE)) ) // 等待发送缓冲器为空
00C4 5D9B sbis 0xb,5
00C6 FECF rjmp L14
00C8 .dbline 116
00C8 ; ;
00C8 ; UDR = data; //将数据放入缓冲器,发送数据
00C8 0CB9 out 0xc,R16
00CA .dbline -2
00CA L13:
00CA .dbline 0 ; func end
00CA 0895 ret
00CC .dbsym r data 16 c
00CC .dbend
00CC .dbfunc e USART_Receive _USART_Receive fc
.even
00CC _USART_Receive::
00CC .dbline -1
00CC .dbline 120
00CC ; }
00CC ;
00CC ; unsigned char USART_Receive(void) //使用中断接受时不用此函数
00CC ; {
00CC L18:
00CC .dbline 122
00CC L19:
00CC .dbline 121
00CC ; while ( !(UCSRA & (1<<RXC)) ) // 等待接收数据
00CC 5F9B sbis 0xb,7
00CE FECF rjmp L18
00D0 .dbline 123
00D0 ; ;
00D0 ; return UDR; // 从缓冲器中获取并返回数据
00D0 0CB1 in R16,0xc
00D2 .dbline -2
00D2 L17:
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbend
.area vector(rom, abs)
.org 44
002C 0C946A00 jmp _uart0_rx_isr
.area text(rom, con, rel)
00D4 .dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
00D4 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
00D4 _uart0_rx_isr::
00D4 0E940000 xcall push_lset
00D8 .dbline -1
00D8 .dbline 128
00D8 ; }
00D8 ;
00D8 ; #pragma interrupt_handler uart0_rx_isr:12
00D8 ; void uart0_rx_isr(void) //串口0的中断服务程序
00D8 ; {
00D8 .dbline 129
00D8 ; USART_Transmit(UDR); //把接收到的数据重新发回给PC机
00D8 0CB1 in R16,0xc
00DA F4DF xcall _USART_Transmit
00DC .dbline -2
00DC L21:
00DC 0E940000 xcall pop_lset
00E0 .dbline 0 ; func end
00E0 1895 reti
00E2 .dbend
00E2 .dbfunc e init_devices _init_devices fV
.even
00E2 _init_devices::
00E2 .dbline -1
00E2 .dbline 135
00E2 ; }
00E2 ;
00E2 ;
00E2 ; //call this routine to initialize all peripherals
00E2 ; void init_devices(void)
00E2 ; {
00E2 .dbline 137
00E2 ; //stop errant interrupts until set up
00E2 ; CLI(); //disable all interrupts
00E2 F894 cli
00E4 .dbline 138
00E4 ; port_init();
00E4 8DDF xcall _port_init
00E6 .dbline 139
00E6 ; timer0_init();
00E6 97DF xcall _timer0_init
00E8 .dbline 140
00E8 ; uart0_init();
00E8 E2DF xcall _uart0_init
00EA .dbline 141
00EA ; spi_init();
00EA CEDF xcall _spi_init
00EC .dbline 142
00EC ; adc_init();
00EC 9DDF xcall _adc_init
00EE .dbline 143
00EE ; MCUCR = 0x00;
00EE 2224 clr R2
00F0 25BE out 0x35,R2
00F2 .dbline 144
00F2 ; GICR = 0x00;
00F2 2BBE out 0x3b,R2
00F4 .dbline 145
00F4 ; ASSR &= ~(0X08);
00F4 82B5 in R24,0x22
00F6 877F andi R24,247
00F8 82BD out 0x22,R24
00FA .dbline 146
00FA ; TIMSK = 0x01; //timer interrupt sources
00FA 81E0 ldi R24,1
00FC 89BF out 0x39,R24
00FE .dbline 147
00FE ; SEI(); //re-enable interrupts
00FE 7894 sei
0100 .dbline -2
0100 L22:
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbend
0102 .dbfunc e flash_led_type1 _flash_led_type1 fV
.even
0102 _flash_led_type1::
0102 .dbline -1
0102 .dbline 153
0102 ; //all peripherals are now initialized
0102 ; }
0102 ;
0102 ;
0102 ; void flash_led_type1(void) //PD口的跑马灯显示 从右到左
0102 ; {
0102 .dbline 154
0102 ; if (led_ch==0x02) led_ch=0x80;
0102 80910000 lds R24,_led_ch
0106 8230 cpi R24,2
0108 19F4 brne L24
010A .dbline 154
010A 80E8 ldi R24,128
010C 80930000 sts _led_ch,R24
0110 L24:
0110 .dbline 155
0110 ; PORTD=~(led_ch);
0110 20900000 lds R2,_led_ch
0114 2094 com R2
0116 22BA out 0x12,R2
0118 .dbline 156
0118 ; led_ch=led_ch>>1;
0118 20900000 lds R2,_led_ch
011C 2694 lsr R2
011E 20920000 sts _led_ch,R2
0122 .dbline -2
0122 L23:
0122 .dbline 0 ; func end
0122 0895 ret
0124 .dbend
0124 .dbfunc e flash_led_type2 _flash_led_type2 fV
.even
0124 _flash_led_type2::
0124 .dbline -1
0124 .dbline 160
0124 ; }
0124 ;
0124 ; void flash_led_type2(void) //PD口的跑马灯显示 从左到右
0124 ; {
0124 .dbline 161
0124 ; if (led_ch==0x00) led_ch=0x02;
0124 20900000 lds R2,_led_ch
0128 2220 tst R2
012A 19F4 brne L27
012C .dbline 161
012C 82E0 ldi R24,2
012E 80930000 sts _led_ch,R24
0132 L27:
0132 .dbline 162
0132 ; PORTD=~(led_ch);
0132 20900000 lds R2,_led_ch
0136 2094 com R2
0138 22BA out 0x12,R2
013A .dbline 163
013A ; led_ch=led_ch<<1;
013A 20900000 lds R2,_led_ch
013E 220C lsl R2
0140 20920000 sts _led_ch,R2
0144 .dbline -2
0144 L26:
0144 .dbline 0 ; func end
0144 0895 ret
0146 .dbend
0146 .dbfunc e flash_led_type3 _flash_led_type3 fV
.even
0146 _flash_led_type3::
0146 .dbline -1
0146 .dbline 167
0146 ; }
0146 ;
0146 ; void flash_led_type3(void) //PD口的跑马灯显示 反相
0146 ; {
0146 .dbline 168
0146 ; PORTD^=0XFC;
0146 8CEF ldi R24,252
0148 90E0 ldi R25,0
014A 22B2 in R2,0x12
014C 3324 clr R3
014E 2826 eor R2,R24
0150 3926 eor R3,R25
0152 22BA out 0x12,R2
0154 .dbline -2
0154 L29:
0154 .dbline 0 ; func end
0154 0895 ret
0156 .dbend
0156 .dbfunc e flash_led_type4 _flash_led_type4 fV
0156 ; tmp_PD -> R16
.even
0156 _flash_led_type4::
0156 .dbline -1
0156 .dbline 172
0156 ; }
0156 ;
0156 ; void flash_led_type4(void) //PD口的跑马灯显示 流水
0156 ; {
0156 .dbline 174
0156 ; unsigned char tmp_PD;
0156 ; tmp_PD=PIND;
0156 00B3 in R16,0x10
0158 .dbline 175
0158 ; tmp_PD|=0XFC;
0158 0C6F ori R16,252
015A .dbline 176
015A ; led_ch++;
015A 80910000 lds R24,_led_ch
015E 8F5F subi R24,255 ; addi 1
0160 80930000 sts _led_ch,R24
0164 .dbline 177
0164 ; if (led_ch==0X87) led_ch=0X80;
0164 8738 cpi R24,135
0166 19F4 brne L31
0168 .dbline 177
0168 80E8 ldi R24,128
016A 80930000 sts _led_ch,R24
016E L31:
016E .dbline 178
016E ; switch (led_ch)
016E 00910000 lds R16,_led_ch
0172 1127 clr R17
0174 0138 cpi R16,129
0176 E0E0 ldi R30,0
0178 1E07 cpc R17,R30
017A A9F0 breq L36
017C 0238 cpi R16,130
017E E0E0 ldi R30,0
0180 1E07 cpc R17,R30
0182 A1F0 breq L37
0184 0338 cpi R16,131
0186 E0E0 ldi R30,0
0188 1E07 cpc R17,R30
018A A1F0 breq L38
018C 0438 cpi R16,132
018E E0E0 ldi R30,0
0190 1E07 cpc R17,R30
0192 A1F0 breq L39
0194 0538 cpi R16,133
0196 E0E0 ldi R30,0
0198 1E07 cpc R17,R30
019A A1F0 breq L40
019C 0638 cpi R16,134
019E E0E0 ldi R30,0
01A0 1E07 cpc R17,R30
01A2 A1F0 breq L41
01A4 15C0 xjmp L33
01A6 X0:
01A6 .dbline 179
01A6 ; {
01A6 L36:
01A6 .dbline 181
01A6 ;
01A6 ; case 0X81: PORTD=~(0X78); break; //0111 10 00 代码
01A6 87E8 ldi R24,135
01A8 82BB out 0x12,R24
01AA .dbline 181
01AA 12C0 xjmp L34
01AC L37:
01AC .dbline 182
01AC ; case 0X82: PORTD=~(0XD4); break; //1011 01 00 代码
01AC 8BE2 ldi R24,-213
01AE 9FEF ldi R25,-1
01B0 82BB out 0x12,R24
01B2 .dbline 182
01B2 0EC0 xjmp L34
01B4 L38:
01B4 .dbline 183
01B4 ; case 0X83: PORTD=~(0XCC); break; //1100 11 00 代码
01B4 83E3 ldi R24,-205
01B6 9FEF ldi R25,-1
01B8 82BB out 0x12,R24
01BA .dbline 183
01BA 0AC0 xjmp L34
01BC L39:
01BC .dbline 184
01BC ; case 0X84: PORTD=~(0XCC); break; //1100 11 00 代码
01BC 83E3 ldi R24,-205
01BE 9FEF ldi R25,-1
01C0 82BB out 0x12,R24
01C2 .dbline 184
01C2 06C0 xjmp L34
01C4 L40:
01C4 .dbline 185
01C4 ; case 0X85: PORTD=~(0XD4); break; //1011 01 00 代码
01C4 8BE2 ldi R24,-213
01C6 9FEF ldi R25,-1
01C8 82BB out 0x12,R24
01CA .dbline 185
01CA 02C0 xjmp L34
01CC L41:
01CC .dbline 186
01CC ; case 0X86: PORTD=~(0X78); break; //0111 10 00 代码
01CC 87E8 ldi R24,135
01CE 82BB out 0x12,R24
01D0 .dbline 186
01D0 L33:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -