📄 uart-lednum.lis
字号:
00AA ; UCSRB = 0x00; //disable while setting baud rate
00AA 2224 clr R2
00AC 2AB8 out 0xa,R2
00AE .dbline 80
00AE ; UCSRA = 0x00;
00AE 2BB8 out 0xb,R2
00B0 .dbline 81
00B0 ; UCSRC = 0x86;
00B0 86E8 ldi R24,134
00B2 80BD out 0x20,R24
00B4 .dbline 82
00B4 ; UBRRL = 0x47; //set baud rate lo
00B4 87E4 ldi R24,71
00B6 89B9 out 0x9,R24
00B8 .dbline 83
00B8 ; UBRRH = 0x00; //set baud rate hi
00B8 20BC out 0x20,R2
00BA .dbline 84
00BA ; UCSRB = 0x98;
00BA 88E9 ldi R24,152
00BC 8AB9 out 0xa,R24
00BE .dbline -2
00BE .dbline 85
00BE ; }
00BE L13:
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbend
.area vector(rom, abs)
.org 22
0016 60C0 rjmp _uart0_rx_isr
.area text(rom, con, rel)
00C0 .dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
00C0 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
00C0 ; temp -> R16
.even
00C0 _uart0_rx_isr::
00C0 2A92 st -y,R2
00C2 0A93 st -y,R16
00C4 8A93 st -y,R24
00C6 9A93 st -y,R25
00C8 2FB6 in R2,0x3f
00CA 2A92 st -y,R2
00CC .dbline -1
00CC .dbline 89
00CC ;
00CC ; #pragma interrupt_handler uart0_rx_isr:12
00CC ; void uart0_rx_isr(void)
00CC ; {
00CC .dbline 92
00CC ; //uart has received a character in UDR
00CC ; char temp;
00CC ; temp = UDR;
00CC 0CB1 in R16,0xc
00CE .dbline 93
00CE ; if(uart_count == 0)
00CE 20900F00 lds R2,_uart_count
00D2 2220 tst R2
00D4 41F4 brne L15
00D6 .dbline 94
00D6 ; { led_sel = temp;
00D6 .dbline 94
00D6 00931000 sts _led_sel,R16
00DA .dbline 95
00DA ; UDR = temp;
00DA 0CB9 out 0xc,R16
00DC .dbline 96
00DC ; uart_count ++;
00DC 822D mov R24,R2
00DE 8F5F subi R24,255 ; addi 1
00E0 80930F00 sts _uart_count,R24
00E4 .dbline 97
00E4 ; }
00E4 1BC0 rjmp L16
00E6 L15:
00E6 .dbline 99
00E6 ; else
00E6 ; { uart_count = 0;
00E6 .dbline 99
00E6 2224 clr R2
00E8 20920F00 sts _uart_count,R2
00EC .dbline 100
00EC ; if(led_sel == 1)
00EC 80911000 lds R24,_led_sel
00F0 8130 cpi R24,1
00F2 19F4 brne L17
00F4 .dbline 101
00F4 ; lednum1=temp;
00F4 00930100 sts _lednum1,R16
00F8 10C0 rjmp L18
00FA L17:
00FA .dbline 102
00FA ; else if(led_sel == 2)
00FA 80911000 lds R24,_led_sel
00FE 8230 cpi R24,2
0100 19F4 brne L19
0102 .dbline 103
0102 ; lednum2 = temp;
0102 00930200 sts _lednum2,R16
0106 09C0 rjmp L20
0108 L19:
0108 .dbline 104
0108 ; else if(led_sel == 3)
0108 80911000 lds R24,_led_sel
010C 8330 cpi R24,3
010E 19F4 brne L21
0110 .dbline 105
0110 ; lednum3 = temp;
0110 00930300 sts _lednum3,R16
0114 02C0 rjmp L22
0116 L21:
0116 .dbline 107
0116 ; else
0116 ; lednum4 =temp;
0116 00930400 sts _lednum4,R16
011A L22:
011A L20:
011A L18:
011A .dbline 108
011A 0CB9 out 0xc,R16
011C .dbline 109
011C L16:
011C .dbline -2
011C .dbline 110
011C ; UDR = temp;
011C ; }
011C ; }
011C L14:
011C 2990 ld R2,y+
011E 2FBE out 0x3f,R2
0120 9991 ld R25,y+
0122 8991 ld R24,y+
0124 0991 ld R16,y+
0126 2990 ld R2,y+
0128 .dbline 0 ; func end
0128 1895 reti
012A .dbsym r temp 16 c
012A .dbend
012A .dbfunc e init_devices _init_devices fV
.even
012A _init_devices::
012A .dbline -1
012A .dbline 115
012A ;
012A ;
012A ; //call this routine to initialise all peripherals
012A ; void init_devices(void)
012A ; {
012A .dbline 117
012A ; //stop errant interrupts until set up
012A ; CLI(); //disable all interrupts
012A F894 cli
012C .dbline 118
012C ; port_init();
012C 69DF rcall _port_init
012E .dbline 119
012E ; timer0_init();
012E 73DF rcall _timer0_init
0130 .dbline 120
0130 ; uart0_init();
0130 BCDF rcall _uart0_init
0132 .dbline 122
0132 ;
0132 ; MCUCR = 0x00;
0132 2224 clr R2
0134 25BE out 0x35,R2
0136 .dbline 123
0136 ; GICR = 0x00;
0136 2BBE out 0x3b,R2
0138 .dbline 124
0138 ; TIMSK = 0x01; //timer interrupt sources
0138 81E0 ldi R24,1
013A 89BF out 0x39,R24
013C .dbline 125
013C ; SEI(); //re-enable interrupts
013C 7894 sei
013E .dbline -2
013E .dbline 127
013E ; //all peripherals are now initialised
013E ; }
013E L23:
013E .dbline 0 ; func end
013E 0895 ret
0140 .dbend
0140 .dbfunc e delay _delay fV
0140 ; j -> R16,R17
0140 ; i -> R18,R19
0140 ; z -> R20,R21
.even
0140 _delay::
0140 00D0 rcall push_gset1
0142 .dbline -1
0142 .dbline 134
0142 ;
0142 ;
0142 ;
0142 ;
0142 ; //自定义函数
0142 ; void delay(void)
0142 ; {
0142 .dbline 136
0142 2227 clr R18
0144 3327 clr R19
0146 02C0 rjmp L28
0148 L25:
0148 .dbline 136
0148 L26:
0148 .dbline 136
0148 2F5F subi R18,255 ; offset = 1
014A 3F4F sbci R19,255
014C L28:
014C .dbline 136
014C ; unsigned int i,j,z;
014C ; for(i=0;i<10000;i++);
014C 2031 cpi R18,16
014E E7E2 ldi R30,39
0150 3E07 cpc R19,R30
0152 D0F3 brlo L25
0154 .dbline 137
0154 ; { for(j=0;j<10000;j++)
0154 .dbline 137
0154 0027 clr R16
0156 1127 clr R17
0158 0BC0 rjmp L32
015A L29:
015A .dbline 138
015A .dbline 138
015A 4427 clr R20
015C 5527 clr R21
015E 02C0 rjmp L36
0160 L33:
0160 .dbline 138
0160 L34:
0160 .dbline 138
0160 4F5F subi R20,255 ; offset = 1
0162 5F4F sbci R21,255
0164 L36:
0164 .dbline 138
0164 4436 cpi R20,100
0166 E0E0 ldi R30,0
0168 5E07 cpc R21,R30
016A D0F3 brlo L33
016C .dbline 138
016C L30:
016C .dbline 137
016C 0F5F subi R16,255 ; offset = 1
016E 1F4F sbci R17,255
0170 L32:
0170 .dbline 137
0170 0031 cpi R16,16
0172 E7E2 ldi R30,39
0174 1E07 cpc R17,R30
0176 88F3 brlo L29
0178 .dbline 139
0178 ; { for(z=0;z<100;z++);}
0178 ; }
0178 .dbline -2
0178 .dbline 140
0178 ; }
0178 L24:
0178 00D0 rcall pop_gset1
017A .dbline 0 ; func end
017A 0895 ret
017C .dbsym r j 16 i
017C .dbsym r i 18 i
017C .dbsym r z 20 i
017C .dbend
017C .dbfunc e main _main fV
.even
017C _main::
017C .dbline -1
017C .dbline 143
017C ;
017C ; void main(void)
017C ; {
017C .dbline 145
017C ;
017C ; init_devices();
017C D6DF rcall _init_devices
017E .dbline 147
017E ;
017E ; lednum1 = num[0];
017E 20900500 lds R2,_num
0182 20920100 sts _lednum1,R2
0186 .dbline 148
0186 ; lednum2 =num[1];
0186 20900600 lds R2,_num+1
018A 20920200 sts _lednum2,R2
018E .dbline 149
018E ; lednum3 = num[2];
018E 20900700 lds R2,_num+2
0192 20920300 sts _lednum3,R2
0196 .dbline 150
0196 ; lednum4 = num[3];
0196 20900800 lds R2,_num+3
019A 20920400 sts _lednum4,R2
019E L41:
019E .dbline 152
019E .dbline 152
019E .dbline 153
019E L42:
019E .dbline 151
019E FFCF rjmp L41
01A0 X0:
01A0 .dbline -2
01A0 .dbline 154
01A0 ; while(1)
01A0 ; {;
01A0 ; }
01A0 ; }
01A0 L37:
01A0 .dbline 0 ; func end
01A0 0895 ret
01A2 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -