⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m16.lst

📁 M16-ISP串口通讯,新手可以参考本例子进行通讯实验
💻 LST
📖 第 1 页 / 共 4 页
字号:
(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 + -