📄 m16.lst
字号:
(0493) GIFR=(1<<INTF1)|(1<<INTF0);//GIFR=0x00;通用中断标志寄存器
037A EC80 LDI R24,0xC0
037B BF8A OUT 0x3A,R24
(0494) GICR=(1<<INT1)|(1<<INT0);
037C BF8B OUT 0x3B,R24
(0495) SEI();
037D 9478 BSET 7
037E 9508 RET
(0496) }
(0497) /*
(0498) #pragma interrupt_handler INT0_isr_m16:2
(0499) void INT0_isr_m16(void)
(0500) {
(0501) //中断程序
(0502) }
(0503) #pragma interrupt_handler INT1_isr_m16:3
(0504) void INT1_isr_m16(void)
(0505) {
(0506) //中断程序
(0507) }
(0508) */
(0509)
(0510)
(0511)
(0512) /******************************************************************************
(0513) 功能:串口发送
(0514) 函数:void USART_Transmit8( unsigned char data )
(0515) void USART_Transmit9( unsigned char data )
(0516) void USART_Transmit_2( void ) 发送Hello
(0517) 返回值:无
(0518) 备注:
(0519)
(0520)
(0521)
(0522) ******************************************************************************/
(0523) void USART_Transmit8( unsigned char data )
(0524) {
(0525) /*检空发送标志*/
(0526) while ( !( UCSRA & (1<<UDRE)) );
_USART_Transmit8:
data --> R16
037F 9B5D SBIS 0x0B,5
0380 CFFE RJMP _USART_Transmit8
(0527) /*发送数据*/
(0528) UDR = data;
0381 B90C OUT 0x0C,R16
0382 9508 RET
(0529) }
(0530)
(0531) void USART_Transmit9( unsigned int data )
(0532) {
(0533) /*检空发送标志 */
(0534) while ( !( UCSRA & (1<<UDRE)));
_USART_Transmit9:
data --> R16
0383 9B5D SBIS 0x0B,5
0384 CFFE RJMP _USART_Transmit9
(0535) /* 将第9位复制到TXB8 */
(0536) UCSRB &= ~(1<<TXB8);
0385 9850 CBI 0x0A,0
(0537) if ( data & 0x0100 )
0386 FD10 SBRC R17,0
(0538) UCSRB |= (1<<TXB8);
0387 9A50 SBI 0x0A,0
(0539) /*发送数据 */
(0540) UDR = data;
0388 B90C OUT 0x0C,R16
0389 9508 RET
(0541) }
(0542) void USART_Transmit_2( void )
(0543) {
(0544) while ( !( UCSRA & (1<<UDRE)) );
_USART_Transmit_2:
038A 9B5D SBIS 0x0B,5
038B CFFE RJMP _USART_Transmit_2
(0545) UDR = 'H';
038C E488 LDI R24,0x48
038D B98C OUT 0x0C,R24
(0546) while ( !( UCSRA & (1<<UDRE)) );
038E 9B5D SBIS 0x0B,5
038F CFFE RJMP 0x038E
(0547) UDR = 'e';
0390 E685 LDI R24,0x65
0391 B98C OUT 0x0C,R24
(0548) while ( !( UCSRA & (1<<UDRE)) );
0392 9B5D SBIS 0x0B,5
0393 CFFE RJMP 0x0392
(0549) UDR = 'l';
0394 E68C LDI R24,0x6C
0395 B98C OUT 0x0C,R24
(0550) while ( !( UCSRA & (1<<UDRE)) );
0396 9B5D SBIS 0x0B,5
0397 CFFE RJMP 0x0396
(0551) UDR = 'l';
0398 E68C LDI R24,0x6C
0399 B98C OUT 0x0C,R24
(0552) while ( !( UCSRA & (1<<UDRE)) );
039A 9B5D SBIS 0x0B,5
039B CFFE RJMP 0x039A
(0553) UDR = 'o';
039C E68F LDI R24,0x6F
039D B98C OUT 0x0C,R24
039E 9508 RET
(0554) }
(0555)
(0556) /******************************************************************************
(0557) 功能:串口接收
(0558) 函数:unsigned int USART_Receive8( void )
(0559) unsigned int USART_Receive9( void )
(0560) 返回值:无
(0561) 备注:
(0562)
(0563)
(0564)
(0565) ******************************************************************************/
(0566) unsigned int USART_Receive8( void )
(0567) {
(0568) /*等待 数据*/
(0569) while ( !(UCSRA & (1<<RXC)) );
_USART_Receive8:
039F 9B5F SBIS 0x0B,7
03A0 CFFE RJMP _USART_Receive8
(0570) return UDR;
03A1 B10C IN R16,0x0C
03A2 2711 CLR R17
03A3 9508 RET
_USART_Receive9:
resl --> R16
status --> R20
resh --> R18
03A4 940E046A CALL push_gset1
(0571) }
(0572)
(0573) unsigned int USART_Receive9( void )
(0574) {
(0575) unsigned char status, resh, resl;
(0576) /*等待 数据*/
(0577) while ( !(UCSRA & (1<<RXC)) );
03A6 9B5F SBIS 0x0B,7
03A7 CFFE RJMP 0x03A6
(0578) /*收到数据、状态及第9位*/
(0579) /* from buffer */
(0580) status = UCSRA;
03A8 B14B IN R20,0x0B
(0581) resh = UCSRB;
03A9 B12A IN R18,0x0A
(0582) resl = UDR;
03AA B10C IN R16,0x0C
(0583) /*如果出错返回1 */
(0584) if ( status & (1<<FE)|(1<<DOR)|(1<<PE) ){return -1;}
03AB 2F84 MOV R24,R20
03AC 7180 ANDI R24,0x10
03AD 608C ORI R24,0xC
03AE F019 BEQ 0x03B2
03AF EF0F LDI R16,0xFF
03B0 EF1F LDI R17,0xFF
03B1 C003 RJMP 0x03B5
(0585) /*过滤第9位然后返回*/
(0586) resh = (resh >> 1) & 0x01;
03B2 9526 LSR R18
03B3 7021 ANDI R18,1
(0587) return ((resh << 8) | resl);
03B4 2F12 MOV R17,R18
03B5 940E046D CALL pop_gset1
03B7 9508 RET
(0588) }
(0589)
(0590) /******************************************************************************
(0591) 功能:串口接收防止缓冲器FIFO被刷新
(0592) 函数:void USART_Flush( void )
(0593) 返回值:无
(0594) 备注:
(0595)
(0596)
(0597)
(0598) ******************************************************************************/
(0599)
(0600) void USART_Flush( void )
(0601) {
_USART_Flush:
dummy --> R16
03B8 C001 RJMP 0x03BA
(0602) unsigned char dummy;
(0603) while ( UCSRA & (1<<RXC) ) dummy = UDR;
03B9 B10C IN R16,0x0C
03BA 995F SBIC 0x0B,7
03BB CFFD RJMP 0x03B9
03BC 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\调试成功\M16-ISP串口通讯\m16.c
(0001) // Target : M16
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) //#include "avrinit.h"
(0005) #include "..\includeH\Init.h"
(0006) //const unsigned char buffer[]="http://www.avrvi.com";
(0007) const unsigned char buffer[]={0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};
(0008) void main(void)
(0009) {
(0010) unsigned char n=0,tmp=0;
_main:
tmp --> R20
n --> R22
03BD 2766 CLR R22
03BE 2744 CLR R20
(0011) USART_InitM1681(9600);
03BF E800 LDI R16,0x80
03C0 E215 LDI R17,0x25
03C1 DF3F RCALL _USART_InitM1681
(0012) // USART_Init_M1681(3686400,9600);
(0013) for(;n<20;n++){USART_Transmit8(buffer[n]);};
03C2 C009 RJMP 0x03CC
03C3 E584 LDI R24,0x54
03C4 E090 LDI R25,0
03C5 2FE6 MOV R30,R22
03C6 27FF CLR R31
03C7 0FE8 ADD R30,R24
03C8 1FF9 ADC R31,R25
03C9 9104 LPM R16,0(Z)
03CA DFB4 RCALL _USART_Transmit8
03CB 9563 INC R22
03CC 3164 CPI R22,0x14
03CD F3A8 BCS 0x03C3
03CE C01A RJMP 0x03E9
(0014) // USART_Transmit8(0x0d); //发送一个回车
(0015) // USART_Transmit8(0x0a); //发送一个换行
(0016) while(1)
(0017) {
(0018) if(UCSRA&(1<<RXC)) //如果接收缓存区有数据
03CF 9B5F SBIS 0x0B,7
03D0 C018 RJMP 0x03E9
(0019) {
(0020) tmp=USART_Receive8(); //接收数据
03D1 DFCD RCALL _USART_Receive8
03D2 2F40 MOV R20,R16
(0021) USART_Transmit8(tmp); //发送数据
03D3 DFAB RCALL _USART_Transmit8
(0022) USART_Transmit8(0x0d); //发送一个回车
03D4 E00D LDI R16,0xD
03D5 DFA9 RCALL _USART_Transmit8
(0023) USART_Transmit8(0x0a); //发送一个换行
03D6 E00A LDI R16,0xA
03D7 DFA7 RCALL _USART_Transmit8
(0024) if(tmp=='a') //对接收到的数据进行,如果是a,再发一个OK回来
03D8 3641 CPI R20,0x61
03D9 F441 BNE 0x03E2
(0025) {
(0026) USART_Transmit8('O');
03DA E40F LDI R16,0x4F
03DB DFA3 RCALL _USART_Transmit8
(0027) USART_Transmit8('K');
03DC E40B LDI R16,0x4B
03DD DFA1 RCALL _USART_Transmit8
(0028) USART_Transmit8(0x0d);
03DE E00D LDI R16,0xD
03DF DF9F RCALL _USART_Transmit8
(0029) USART_Transmit8(0x0a); //发送一个换行
03E0 E00A LDI R16,0xA
03E1 DF9D RCALL _USART_Transmit8
(0030) }
(0031) if(tmp=='A') //对接收到的数据进行,如果是A,再发一个Hello回来
03E2 3441 CPI R20,0x41
03E3 F429 BNE 0x03E9
(0032) {
(0033) USART_Transmit_2();
03E4 DFA5 RCALL _USART_Transmit_2
(0034) USART_Transmit8(0x0d);
03E5 E00D LDI R16,0xD
03E6 DF98 RCALL _USART_Transmit8
(0035) USART_Transmit8(0x0a); //发送一个换行
FILE: <library>
03E7 E00A LDI R16,0xA
03E8 DF96 RCALL _USART_Transmit8
03E9 CFE5 RJMP 0x03CF
03EA 9508 RET
div32u:
03EB 94E8 BCLR 6
03EC C001 RJMP 0x03EE
mod32u:
03ED 9468 BSET 6
03EE D02F RCALL long_div_prolog
03EF 24CC CLR R12
03F0 C008 RJMP 0x03F9
div32s:
03F1 94E8 BCLR 6
03F2 C001 RJMP 0x03F4
mod32s:
03F3 9468 BSET 6
03F4 D029 RCALL long_div_prolog
03F5 FD37 SBRC R19,7
03F6 D053 RCALL neg_R16_R19
03F7 FDB7 SBRC R27,7
03F8 D05A RCALL neg_R24_R27
03F9 2477 CLR R7
03FA 2488 CLR R8
03FB 2499 CLR R9
03FC 24AA CLR R10
03FD 24BB CLR R11
03FE D041 RCALL tst_R16_R19
03FF F0C1 BEQ 0x0418
0400 D044 RCALL tst_R24_R27
0401 F0B1 BEQ 0x0418
0402 E2E8 LDI R30,0x28
0403 0F00 LSL R16
0404 1F11 ROL R17
0405 1F22 ROL R18
0406 1F33 ROL R19
0407 1C77 ROL R7
0408 1C88 ROL R8
0409 1C99 ROL R9
040A 1CAA ROL R10
040B 1CBB ROL R11
040C 1688 CP R8,R24
040D 0699 CPC R9,R25
040E 06AA CPC R10,R26
040F 06BB CPC R11,R27
0410 F028 BCS 0x0416
0411 1A88 SUB R8,R24
0412 0A99 SBC R9,R25
0413 0AAA SBC R10,R26
0414 0ABB SBC R11,R27
0415 9503 INC R16
0416 95EA DEC R30
0417 F759 BNE 0x0403
0418 F426 BRTC 0x041D
0419 2D08 MOV R16,R8
041A 2D19 MOV R17,R9
041B 2D2A MOV R18,R10
041C 2D3B MOV R19,R11
041D C013 RJMP long_div_epilog
long_div_prolog:
041E 927A ST R7,-Y
041F 928A ST R8,-Y
0420 929A ST R9,-Y
0421 92AA ST R10,-Y
0422 92BA ST R11,-Y
0423 92CA ST R12,-Y
0424 93EA ST R30,-Y
0425 938A ST R24,-Y
0426 939A ST R25,-Y
0427 93AA ST R26,-Y
0428 93BA ST R27,-Y
0429 858B LDD R24,Y+11
042A 859C LDD R25,Y+12
042B 85AD LDD R26,Y+13
042C 85BE LDD R27,Y+14
042D 2EC3 MOV R12,R19
042E F00E BRTS 0x0430
042F 26CB EOR R12,R27
0430 9508 RET
long_div_epilog:
0431 FCC7 SBRC R12,7
0432 D017 RCALL neg_R16_R19
0433 91B9 LD R27,Y+
0434 91A9 LD R26,Y+
0435 9199 LD R25,Y+
0436 9189 LD R24,Y+
0437 91E9 LD R30,Y+
0438 90C9 LD R12,Y+
0439 90B9 LD R11,Y+
043A 90A9 LD R10,Y+
043B 9099 LD R9,Y+
043C 9089 LD R8,Y+
043D 9079 LD R7,Y+
043E 9624 ADIW R28,4
043F 9508 RET
tst_R16_R19:
0440 2FE0 MOV R30,R16
0441 2BE1 OR R30,R17
0442 2BE2 OR R30,R18
0443 2BE3 OR R30,R19
0444 9508 RET
tst_R24_R27:
0445 2FE8 MOV R30,R24
0446 2BE9 OR R30,R25
0447 2BEA OR R30,R26
0448 2BEB OR R30,R27
0449 9508 RET
neg_R16_R19:
044A 9500 COM R16
044B 9510 COM R17
044C 9520 COM R18
044D 9530 COM R19
044E 5F0F SUBI R16,0xFF
044F 4F1F SBCI R17,0xFF
0450 4F2F SBCI R18,0xFF
0451 4F3F SBCI R19,0xFF
0452 9508 RET
neg_R24_R27:
0453 9580 COM R24
0454 9590 COM R25
0455 95A0 COM R26
0456 95B0 COM R27
0457 5F8F SUBI R24,0xFF
0458 4F9F SBCI R25,0xFF
0459 4FAF SBCI R26,0xFF
045A 4FBF SBCI R27,0xFF
045B 9508 RET
pop_gset2:
045C E0E2 LDI R30,2
045D 940C046E JMP pop
pop_gset3:
045F E0E4 LDI R30,4
0460 940C046E JMP pop
push_gset5:
0462 92FA ST R15,-Y
0463 92EA ST R14,-Y
push_gset4:
0464 92DA ST R13,-Y
0465 92CA ST R12,-Y
push_gset3:
0466 92BA ST R11,-Y
0467 92AA ST R10,-Y
push_gset2:
0468 937A ST R23,-Y
0469 936A ST R22,-Y
push_gset1:
046A 935A ST R21,-Y
046B 934A ST R20,-Y
046C 9508 RET
pop_gset1:
046D E0E1 LDI R30,1
pop:
046E 9149 LD R20,Y+
046F 9159 LD R21,Y+
0470 FDE0 SBRC R30,0
0471 9508 RET
0472 9169 LD R22,Y+
0473 9179 LD R23,Y+
0474 FDE1 SBRC R30,1
0475 9508 RET
0476 90A9 LD R10,Y+
0477 90B9 LD R11,Y+
0478 FDE2 SBRC R30,2
0479 9508 RET
047A 90C9 LD R12,Y+
047B 90D9 LD R13,Y+
047C FDE3 SBRC R30,3
047D 9508 RET
047E 90E9 LD R14,Y+
047F 90F9 LD R15,Y+
0480 9508 RET
lsl8:
0481 2311 TST R17
0482 F019 BEQ 0x0486
0483 0F00 LSL R16
0484 951A DEC R17
0485 CFFB RJMP lsl8
0486 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -