📄 main.lis
字号:
00E2 2CB0 in R2,0xc
00E4 20920D00 sts _RxBuffer,R2
00E8 .dbline 80
00E8 80910C00 lds R24,_n
00EC 8F5F subi R24,255 ; addi 1
00EE 80930C00 sts _n,R24
00F2 .dbline 80
00F2 22C0 xjmp L7
00F4 L19:
00F4 .dbline 81
00F4 ; case 4: RxBuffer[1] = UDR; n++; break;
00F4 2CB0 in R2,0xc
00F6 20920E00 sts _RxBuffer+1,R2
00FA .dbline 81
00FA 80910C00 lds R24,_n
00FE 8F5F subi R24,255 ; addi 1
0100 80930C00 sts _n,R24
0104 .dbline 81
0104 19C0 xjmp L7
0106 L21:
0106 .dbline 82
0106 ; case 5: RxBuffer[2] = UDR; n++; break;
0106 2CB0 in R2,0xc
0108 20920F00 sts _RxBuffer+2,R2
010C .dbline 82
010C 80910C00 lds R24,_n
0110 8F5F subi R24,255 ; addi 1
0112 80930C00 sts _n,R24
0116 .dbline 82
0116 10C0 xjmp L7
0118 L23:
0118 .dbline 83
0118 ; case 6: RxBuffer[3] = UDR; n++; //data
0118 2CB0 in R2,0xc
011A 20921000 sts _RxBuffer+3,R2
011E .dbline 83
011E 80910C00 lds R24,_n
0122 8F5F subi R24,255 ; addi 1
0124 80930C00 sts _n,R24
0128 .dbline 87
0128 ; // break;
0128 ; /* case 7: temp = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16 +len;
0128 ; if (UDR == temp) { //校验*/
0128 ; flag = OK;
0128 81E0 ldi R24,1
012A 80930500 sts _flag,R24
012E .dbline 88
012E ; PORTA = 0xff;
012E 8FEF ldi R24,255
0130 8BBB out 0x1b,R24
0132 .dbline 93
0132 ; //CLI();
0132 ; // UCSRB = 0xC8; //关接受中断
0132 ; // SEI();
0132 ; // }
0132 ; n = 0;
0132 2224 clr R2
0134 20920C00 sts _n,R2
0138 .dbline 94
0138 ; break;
0138 .dbline 95
0138 ; default: break;
0138 L7:
0138 .dbline 97
0138 L4:
0138 .dbline -2
0138 L3:
0138 2990 ld R2,y+
013A 2FBE out 0x3f,R2
013C E991 ld R30,y+
013E 9991 ld R25,y+
0140 8991 ld R24,y+
0142 1991 ld R17,y+
0144 0991 ld R16,y+
0146 2990 ld R2,y+
0148 .dbline 0 ; func end
0148 1895 reti
014A .dbsym l temp 1 c
014A .dbend
.area vector(rom, abs)
.org 52
0034 0C94A500 jmp _uart0_tx_isr
.area text(rom, con, rel)
014A .dbfile G:\ly\mega\m16rs\main.c
014A .dbfunc e uart0_tx_isr _uart0_tx_isr fV
.even
014A _uart0_tx_isr::
014A 2A92 st -y,R2
014C 3A92 st -y,R3
014E 0A93 st -y,R16
0150 1A93 st -y,R17
0152 8A93 st -y,R24
0154 9A93 st -y,R25
0156 EA93 st -y,R30
0158 2FB6 in R2,0x3f
015A 2A92 st -y,R2
015C .dbline -1
015C .dbline 103
015C ; }
015C ; }
015C ;
015C ; }
015C ;
015C ; #pragma interrupt_handler uart0_tx_isr:14
015C ; void uart0_tx_isr(void)
015C ; {
015C .dbline 104
015C ; if (flag == OK){
015C 80910500 lds R24,_flag
0160 8130 cpi R24,1
0162 09F0 breq X9
0164 57C0 xjmp L26
0166 X9:
0166 .dbline 104
0166 .dbline 105
0166 ; PORTC = 0xff;
0166 8FEF ldi R24,255
0168 85BB out 0x15,R24
016A .dbline 106
016A 00910C00 lds R16,_n
016E 1127 clr R17
0170 0130 cpi R16,1
0172 E0E0 ldi R30,0
0174 1E07 cpc R17,R30
0176 A9F0 breq L31
0178 0230 cpi R16,2
017A E0E0 ldi R30,0
017C 1E07 cpc R17,R30
017E C9F0 breq L32
0180 0330 cpi R16,3
0182 E0E0 ldi R30,0
0184 1E07 cpc R17,R30
0186 19F1 breq L33
0188 0430 cpi R16,4
018A E0E0 ldi R30,0
018C 1E07 cpc R17,R30
018E 41F1 breq L34
0190 0530 cpi R16,5
0192 E0E0 ldi R30,0
0194 1E07 cpc R17,R30
0196 69F1 breq L36
0198 0630 cpi R16,6
019A E0E0 ldi R30,0
019C 1E07 cpc R17,R30
019E 91F1 breq L38
01A0 39C0 xjmp L29
01A2 X8:
01A2 .dbline 106
01A2 ; switch (n){
01A2 L31:
01A2 .dbline 107
01A2 ; case 1: n++;UDR = TSTA2; break; //头2
01A2 80910C00 lds R24,_n
01A6 8F5F subi R24,255 ; addi 1
01A8 80930C00 sts _n,R24
01AC .dbline 107
01AC 8CE4 ldi R24,76
01AE 8CB9 out 0xc,R24
01B0 .dbline 107
01B0 31C0 xjmp L29
01B2 L32:
01B2 .dbline 108
01B2 ; case 2: n++;UDR = DataT - len; break; //长度
01B2 80910C00 lds R24,_n
01B6 8F5F subi R24,255 ; addi 1
01B8 80930C00 sts _n,R24
01BC .dbline 108
01BC 20900600 lds R2,_len
01C0 3324 clr R3
01C2 8FEA ldi R24,175
01C4 90E0 ldi R25,0
01C6 8219 sub R24,R2
01C8 9309 sbc R25,R3
01CA 8CB9 out 0xc,R24
01CC .dbline 108
01CC 23C0 xjmp L29
01CE L33:
01CE .dbline 109
01CE ; case 3: n++;UDR = RxBuffer[0]; break;
01CE 80910C00 lds R24,_n
01D2 8F5F subi R24,255 ; addi 1
01D4 80930C00 sts _n,R24
01D8 .dbline 109
01D8 20900D00 lds R2,_RxBuffer
01DC 2CB8 out 0xc,R2
01DE .dbline 109
01DE 1AC0 xjmp L29
01E0 L34:
01E0 .dbline 110
01E0 ; case 4: n++; UDR = RxBuffer[1]; break;
01E0 80910C00 lds R24,_n
01E4 8F5F subi R24,255 ; addi 1
01E6 80930C00 sts _n,R24
01EA .dbline 110
01EA 20900E00 lds R2,_RxBuffer+1
01EE 2CB8 out 0xc,R2
01F0 .dbline 110
01F0 11C0 xjmp L29
01F2 L36:
01F2 .dbline 111
01F2 ; case 5: n++;UDR = RxBuffer[2]; break;
01F2 80910C00 lds R24,_n
01F6 8F5F subi R24,255 ; addi 1
01F8 80930C00 sts _n,R24
01FC .dbline 111
01FC 20900F00 lds R2,_RxBuffer+2
0200 2CB8 out 0xc,R2
0202 .dbline 111
0202 08C0 xjmp L29
0204 L38:
0204 .dbline 112
0204 ; case 6: n=0; flag = NG;UDR = RxBuffer[3]; break; //data
0204 2224 clr R2
0206 20920C00 sts _n,R2
020A .dbline 112
020A 20920500 sts _flag,R2
020E .dbline 112
020E 20901000 lds R2,_RxBuffer+3
0212 2CB8 out 0xc,R2
0214 .dbline 112
0214 .dbline 114
0214 ; // case 6: UDR = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16 + DataT - len; n = 0; break;//校验
0214 ; default:break;
0214 L29:
0214 .dbline 116
0214 L26:
0214 .dbline -2
0214 L25:
0214 2990 ld R2,y+
0216 2FBE out 0x3f,R2
0218 E991 ld R30,y+
021A 9991 ld R25,y+
021C 8991 ld R24,y+
021E 1991 ld R17,y+
0220 0991 ld R16,y+
0222 3990 ld R3,y+
0224 2990 ld R2,y+
0226 .dbline 0 ; func end
0226 1895 reti
0228 .dbend
0228 .dbfunc e init_devices _init_devices fV
.even
0228 _init_devices::
0228 .dbline -1
0228 .dbline 121
0228 ; }
0228 ; }
0228 ; }
0228 ;
0228 ; //call this routine to initialize all peripherals
0228 ; void init_devices(void)
0228 ; {
0228 .dbline 123
0228 ; //stop errant interrupts until set up
0228 ; CLI(); //disable all interrupts
0228 F894 cli
022A .dbline 124
022A ; port_init();
022A EADE xcall _port_init
022C .dbline 125
022C ; uart0_init();
022C F4DE xcall _uart0_init
022E .dbline 127
022E ;
022E ; MCUCR = 0x00;
022E 2224 clr R2
0230 25BE out 0x35,R2
0232 .dbline 128
0232 ; GICR = 0x00;
0232 2BBE out 0x3b,R2
0234 .dbline 129
0234 ; TIMSK = 0x00; //timer interrupt sources
0234 29BE out 0x39,R2
0236 .dbline 130
0236 ; SEI(); //re-enable interrupts
0236 7894 sei
0238 .dbline -2
0238 L40:
0238 .dbline 0 ; func end
0238 0895 ret
023A .dbend
023A .dbfunc e check_buf _check_buf fc
023A ; i -> R20
023A ; num -> R18
023A ; CheckBuffer -> R16,R17
.even
023A _check_buf::
023A 0E940000 xcall push_gset1
023E .dbline -1
023E .dbline 139
023E ; //all peripherals are now initialized
023E ; }
023E ; /*****************************************************
023E ; unsigned char check_buf( unsigned char *CheckBuffer)
023E ; 检测命令是否符合要求
023E ;
023E ; *****************************************************/
023E ;
023E ; unsigned char check_buf( unsigned char *CheckBuffer,unsigned char num){
023E .dbline 141
023E 4427 clr R20
0240 10C0 xjmp L45
0242 L42:
0242 .dbline 141
0242 ; unsigned char i;
0242 ; for (i = 0;i < num; i++){
0242 .dbline 142
0242 ; if (CheckBuffer[i] != RxBuffer[i])
0242 80E0 ldi R24,<_RxBuffer
0244 90E0 ldi R25,>_RxBuffer
0246 E42F mov R30,R20
0248 FF27 clr R31
024A E80F add R30,R24
024C F91F adc R31,R25
024E 2080 ldd R2,z+0
0250 E42F mov R30,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -