📄 uart.lis
字号:
00BA 20922C00 sts _rscnt12,R2
00BE ; rscnt13=0x00;
00BE 20922B00 sts _rscnt13,R2
00C2 ; }
00C2 L14:
00C2 ; else
00C2 ; {}
00C2 L15:
00C2 ; }
00C2 L12:
00C2 L11:
00C2 2990 ld R2,y+
00C4 2FBE out 0x3f,R2
00C6 9991 ld R25,y+
00C8 8991 ld R24,y+
00CA 2990 ld R2,y+
00CC .dbline 0 ; func end
00CC 1895 reti
.area vector(rom, abs)
.org 4
0004 67C0 rjmp _int1_isr
.area text(rom, con, rel)
.even
00CE _int1_isr::
00CE ;
00CE ; }
00CE ;
00CE ;
00CE ; #pragma interrupt_handler int1_isr:3
00CE ; void int1_isr(void)
00CE ; {
00CE L16:
00CE .dbline 0 ; func end
00CE 1895 reti
.even
00D0 _init_devices::
00D0 ; //external interupt on INT1
00D0 ; }
00D0 ;
00D0 ; //call this routine to initialize all peripherals
00D0 ; void init_devices(void)
00D0 ; {
00D0 ; //stop errant interrupts until set up
00D0 ; CLI(); //disable all interrupts
00D0 F894 cli
00D2 ; watchdog_init();
00D2 9ADF rcall _watchdog_init
00D4 ; timer0_init();
00D4 A1DF rcall _timer0_init
00D6 ; timer1_init();
00D6 B1DF rcall _timer1_init
00D8 ; timer2_init();
00D8 BEDF rcall _timer2_init
00DA ; MCUCR = 0x08; //INT1的下降沿产生中断
00DA 88E0 ldi R24,8
00DC 85BF out 0x35,R24
00DE ; GICR = 0x80; //BOOT区起始地址
00DE 80E8 ldi R24,128
00E0 8BBF out 0x3b,R24
00E2 ; TIMSK = 0x41; //timer interrupt sources
00E2 81E4 ldi R24,65
00E4 89BF out 0x39,R24
00E6 ; SEI(); //re-enable interrupts
00E6 7894 sei
00E8 L17:
00E8 .dbline 0 ; func end
00E8 0895 ret
.area vector(rom, abs)
.org 22
0016 75C0 rjmp _uart0_rx_isr
.area text(rom, con, rel)
.even
00EA _uart0_rx_isr::
00EA 2A92 st -y,R2
00EC 3A92 st -y,R3
00EE 8A93 st -y,R24
00F0 9A93 st -y,R25
00F2 EA93 st -y,R30
00F4 FA93 st -y,R31
00F6 2FB6 in R2,0x3f
00F8 2A92 st -y,R2
00FA ; //all peripherals are now initialized
00FA ; }
00FA ;
00FA ;
00FA ;
00FA ; //串行接收中断服务程序
00FA ; #pragma interrupt_handler uart0_rx_isr:12
00FA ; void uart0_rx_isr(void)
00FA ; {
00FA ; if(!(UCSRA& (1<<RXC)))
00FA 5F99 sbic 0xb,7
00FC 01C0 rjmp L19
00FE ; return;
00FE D2C0 rjmp L18
0100 L19:
0100 ; if(rsok00==0){
0100 20902700 lds R2,_rsok00
0104 2220 tst R2
0106 31F5 brne L21
0108 ; rcvd1=UDR;
0108 2CB0 in R2,0xc
010A 20922E00 sts _rcvd1,R2
010E ; if(rcvd1==0x55)rscnt01++;
010E 822D mov R24,R2
0110 8535 cpi R24,85
0112 31F4 brne L23
0114 80912A00 lds R24,_rscnt01
0118 8F5F subi R24,255 ; addi 1
011A 80932A00 sts _rscnt01,R24
011E 09C0 rjmp L24
0120 L23:
0120 ; else if(rcvd1==0xaa)rscnt01++;
0120 80912E00 lds R24,_rcvd1
0124 8A3A cpi R24,170
0126 29F4 brne L25
0128 80912A00 lds R24,_rscnt01
012C 8F5F subi R24,255 ; addi 1
012E 80932A00 sts _rscnt01,R24
0132 L25:
0132 ; else{}
0132 L26:
0132 L24:
0132 ; if((rcvd1==0xaa)&&(rscnt01>=1)){rsok00=1;
0132 80912E00 lds R24,_rcvd1
0136 8A3A cpi R24,170
0138 09F0 breq X0
013A B4C0 rjmp L22
013C X0:
013C 80912A00 lds R24,_rscnt01
0140 8130 cpi R24,1
0142 08F4 brsh X1
0144 AFC0 rjmp L22
0146 X1:
0146 81E0 ldi R24,1
0148 80932700 sts _rsok00,R24
014C ; rscnt01=0;
014C 2224 clr R2
014E 20922A00 sts _rscnt01,R2
0152 ; }
0152 ; }
0152 A8C0 rjmp L22
0154 L21:
0154 ; else{
0154 ; if(rsok10==0){
0154 20902600 lds R2,_rsok10
0158 2220 tst R2
015A 41F5 brne L29
015C ;
015C ; rscnt11=UDR;
015C 2CB0 in R2,0xc
015E 20922D00 sts _rscnt11,R2
0162 ; // if((rscnt11==addressper)||(rscnt11==0x00))
0162 ; if(rscnt11==addressper)
0162 822D mov R24,R2
0164 8031 cpi R24,16
0166 F1F4 brne L31
0168 ; { rsok10=1;
0168 81E0 ldi R24,1
016A 80932600 sts _rsok10,R24
016E ; xx0=0;xx1=0;
016E 2224 clr R2
0170 20922900 sts _xx0,R2
0174 20922800 sts _xx1,R2
0178 ; xx0=xx0^0x55;
0178 85E5 ldi R24,85
017A 2826 eor R2,R24
017C 20922900 sts _xx0,R2
0180 ; xx0=xx0^0xaa;
0180 8AEA ldi R24,170
0182 90E0 ldi R25,0
0184 3324 clr R3
0186 2826 eor R2,R24
0188 3926 eor R3,R25
018A 20922900 sts _xx0,R2
018E ; xx0=xx0^rscnt11;
018E 20902D00 lds R2,_rscnt11
0192 30902900 lds R3,_xx0
0196 3224 eor R3,R2
0198 30922900 sts _xx0,R3
019C ; Tx_Rx=0;
019C 2224 clr R2
019E 20921B00 sts _Tx_Rx,R2
01A2 ; }
01A2 80C0 rjmp L30
01A4 L31:
01A4 ; else { rsok00=0;}
01A4 2224 clr R2
01A6 20922700 sts _rsok00,R2
01AA ; }
01AA 7CC0 rjmp L30
01AC L29:
01AC ; else{
01AC ; if(rsok20==0){
01AC 20902500 lds R2,_rsok20
01B0 2220 tst R2
01B2 61F4 brne L33
01B4 ; rscnt12=UDR;
01B4 2CB0 in R2,0xc
01B6 20922C00 sts _rscnt12,R2
01BA ; rsok20=1;
01BA 81E0 ldi R24,1
01BC 80932500 sts _rsok20,R24
01C0 ; xx0=xx0^rscnt12;
01C0 30902900 lds R3,_xx0
01C4 3224 eor R3,R2
01C6 30922900 sts _xx0,R3
01CA ; }
01CA 6CC0 rjmp L34
01CC L33:
01CC ; else {
01CC ; if(rsok30==0){
01CC 20902400 lds R2,_rsok30
01D0 2220 tst R2
01D2 61F4 brne L35
01D4 ; rscnt13=UDR;
01D4 2CB0 in R2,0xc
01D6 20922B00 sts _rscnt13,R2
01DA ; rsok30=1;
01DA 81E0 ldi R24,1
01DC 80932400 sts _rsok30,R24
01E0 ; xx0=xx0^rscnt13;
01E0 30902900 lds R3,_xx0
01E4 3224 eor R3,R2
01E6 30922900 sts _xx0,R3
01EA ; }
01EA 5CC0 rjmp L36
01EC L35:
01EC ; else{
01EC ; rcv1[rscnt01]=UDR;
01EC 80E0 ldi R24,<_rcv1
01EE 90E0 ldi R25,>_rcv1
01F0 E0912A00 lds R30,_rscnt01
01F4 FF27 clr R31
01F6 E80F add R30,R24
01F8 F91F adc R31,R25
01FA 2CB0 in R2,0xc
01FC 2082 std z+0,R2
01FE ; if(rscnt01<(rscnt13+1)){ xx0=xx0^rcv1[rscnt01];
01FE 80912B00 lds R24,_rscnt13
0202 8F5F subi R24,255 ; addi 1
0204 20902A00 lds R2,_rscnt01
0208 2816 cp R2,R24
020A B8F4 brsh L37
020C 80E0 ldi R24,<_rcv1
020E 90E0 ldi R25,>_rcv1
0210 E22D mov R30,R2
0212 FF27 clr R31
0214 E80F add R30,R24
0216 F91F adc R31,R25
0218 2080 ldd R2,z+0
021A 30902900 lds R3,_xx0
021E 3224 eor R3,R2
0220 30922900 sts _xx0,R3
0224 ; xx1+=rcv1[rscnt01];
0224 E0912A00 lds R30,_rscnt01
0228 FF27 clr R31
022A E80F add R30,R24
022C F91F adc R31,R25
022E 2080 ldd R2,z+0
0230 30902800 lds R3,_xx1
0234 320C add R3,R2
0236 30922800 sts _xx1,R3
023A ; }
023A L37:
023A ; if(rscnt01==(rscnt13+1)){
023A 80912B00 lds R24,_rscnt13
023E 8F5F subi R24,255 ; addi 1
0240 20902A00 lds R2,_rscnt01
0244 2816 cp R2,R24
0246 49F5 brne L39
0248 ; if(xx0==rcv1[rscnt01])
0248 80E0 ldi R24,<_rcv1
024A 90E0 ldi R25,>_rcv1
024C E22D mov R30,R2
024E FF27 clr R31
0250 E80F add R30,R24
0252 F91F adc R31,R25
0254 2080 ldd R2,z+0
0256 30902900 lds R3,_xx0
025A 3214 cp R3,R2
025C 51F4 brne L41
025E ; { rsok40=1;
025E 81E0 ldi R24,1
0260 80932300 sts _rsok40,R24
0264 ; Rx_Time = 0;
0264 2224 clr R2
0266 20921A00 sts _Rx_Time,R2
026A ; Tx_Rx = 2;
026A 82E0 ldi R24,2
026C 80931B00 sts _Tx_Rx,R24
0270 ; }
0270 14C0 rjmp L42
0272 L41:
0272 ; else {
0272 ; // UCSRB=UCSRB|0x08;
0272 ; rsok00=0;
0272 2224 clr R2
0274 20922700 sts _rsok00,R2
0278 ; rsok10=0;
0278 20922600 sts _rsok10,R2
027C ; rsok20=0;
027C 20922500 sts _rsok20,R2
0280 ; rsok30=0;
0280 20922400 sts _rsok30,R2
0284 ; rsok40=0;
0284 20922300 sts _rsok40,R2
0288 ; rscnt01=0;
0288 20922A00 sts _rscnt01,R2
028C ; rscnt11=0;
028C 20922D00 sts _rscnt11,R2
0290 ; Tx_Rx=2;
0290 82E0 ldi R24,2
0292 80931B00 sts _Tx_Rx,R24
0296 ; Rx_Time=0;
0296 20921A00 sts _Rx_Time,R2
029A ; }
029A L42:
029A ; }
029A L39:
029A ; rscnt01++;
029A 80912A00 lds R24,_rscnt01
029E 8F5F subi R24,255 ; addi 1
02A0 80932A00 sts _rscnt01,R24
02A4 ; }
02A4 L36:
02A4 ; }
02A4 L34:
02A4 ; }
02A4 L30:
02A4 ; }
02A4 L22:
02A4 L18:
02A4 2990 ld R2,y+
02A6 2FBE out 0x3f,R2
02A8 F991 ld R31,y+
02AA E991 ld R30,y+
02AC 9991 ld R25,y+
02AE 8991 ld R24,y+
02B0 3990 ld R3,y+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -