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

📄 canmonitor.lst

📁 AT90CAN128的CAN通信源码测试成功
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
      56 E5CF      LDI	R28,0x5F
      57 E0D4      LDI	R29,4
      58 BFCD      OUT	0x3D,R28
      59 BFDE      OUT	0x3E,R29
      5A 51C0      SUBI	R28,0x10
      5B 40D0      SBCI	R29,0
      5C EA0A      LDI	R16,0xAA
      5D 8308      STD	Y+0,R16
      5E 2400      CLR	R0
      5F EAEA      LDI	R30,0xAA
      60 E0F0      LDI	R31,0
      61 E010      LDI	R17,0
      62 3CE8      CPI	R30,0xC8
      63 07F1      CPC	R31,R17
      64 F011      BEQ	0x0067
      65 9201      ST	R0,Z+
      66 CFFB      RJMP	0x0062
      67 8300      STD	Z+0,R16
      68 E6E2      LDI	R30,0x62
      69 E0F0      LDI	R31,0
      6A E6A0      LDI	R26,0x60
      6B E0B0      LDI	R27,0
      6C E010      LDI	R17,0
      6D E000      LDI	R16,0
      6E BF0B      OUT	0x3B,R16
      6F 3AEC      CPI	R30,0xAC
      70 07F1      CPC	R31,R17
      71 F021      BEQ	0x0076
      72 95C8      LPM
      73 9631      ADIW	R30,1
      74 920D      ST	R0,X+
      75 CFF9      RJMP	0x006F
      76 940E 053F CALL	_main
_exit:
      78 CFFF      RJMP	_exit
_shortdelay:
  tt                   --> Y,+0
      79 931A      ST	R17,-Y
      7A 930A      ST	R16,-Y
FILE: E:\li\liliang\can-232\CAN-232\delay.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:16M
(0004) -----------------------------------------------------------------------*/
(0005) /*====================================== 
(0006)  微秒级精确延时函数,晶振16M:            
(0007)  Delay = 0.0625 *((tt*4-1)+9)微秒 
(0008)  其中9包括了调用方的 r16 赋值 1t 
(0009)  rcall 3t    nop 1t   ret 4t 
(0010)  brne指令在当判断条件不成立时是单周期 
(0011)  最后一次判断只有1个周期,补一个nop 
(0012)  简化计算 = 0.5tt + 1 (us) 
(0013) ======================================*/ 
(0014) void shortdelay(unsigned char tt) 
(0015) { 
(0016)         asm("_L2: subi R16,1");    // 1t 
      7B 5001      SUBI	R16,1
(0017)         asm(" nop") ;   // 1t 
      7C 0000      NOP
(0018)         asm(" brne _L2"); // 2t/1t 
      7D F7E9      BNE	0x007B
(0019)         asm(" nop"); // 1t 
      7E 0000      NOP
(0020)         asm(" ret"); // 4t 
      7F 9508      RET
      80 9622      ADIW	R28,2
      81 9508      RET
(0021) }
(0022) 
(0023) //#define delay_us()  shortdelay(2)
(0024) void delay_us(void)                 //1us延时函数
(0025)   {
(0026)    shortdelay(2);
_delay_us:
      82 E002      LDI	R16,2
      83 DFF5      RCALL	_shortdelay
      84 9508      RET
_delay_nus:
  i                    --> R10
  n                    --> R12
      85 940E 0671 CALL	push_xgset003C
      87 0168      MOVW	R12,R16
(0027)   }
(0028) 
(0029) void delay_nus(unsigned int n)       //N us延时函数
(0030)   {
(0031)    unsigned int i=0;
      88 24AA      CLR	R10
      89 24BB      CLR	R11
(0032)    for (i=0;i<n;i++)
      8A C004      RJMP	0x008F
(0033)    delay_us();
      8B DFF6      RCALL	_delay_us
      8C 01C5      MOVW	R24,R10
      8D 9601      ADIW	R24,1
      8E 015C      MOVW	R10,R24
      8F 14AC      CP	R10,R12
      90 04BD      CPC	R11,R13
      91 F3C8      BCS	0x008B
      92 940C 065F JMP	pop_xgset003C
(0034)   }
(0035)   
(0036) void delay_ms(void)                 //1ms延时函数
(0037)   {
(0038)    unsigned int i;
(0039)    for (i=0;i<1140;i++);
_delay_ms:
  i                    --> R16
      94 2700      CLR	R16
      95 2711      CLR	R17
      96 C002      RJMP	0x0099
      97 5F0F      SUBI	R16,0xFF
      98 4F1F      SBCI	R17,0xFF
      99 3704      CPI	R16,0x74
      9A E0E4      LDI	R30,4
      9B 071E      CPC	R17,R30
      9C F3D0      BCS	0x0097
      9D 9508      RET
_delay_nms:
  i                    --> R10
  n                    --> R12
      9E 940E 0671 CALL	push_xgset003C
      A0 0168      MOVW	R12,R16
(0040)   }
(0041)   
(0042) void delay_nms(unsigned int n)       //N ms延时函数
(0043)   {
(0044)    unsigned int i=0;
      A1 24AA      CLR	R10
      A2 24BB      CLR	R11
(0045)    for (i=0;i<n;i++)
      A3 C004      RJMP	0x00A8
(0046)    delay_ms();
      A4 DFEF      RCALL	_delay_ms
      A5 01C5      MOVW	R24,R10
      A6 9601      ADIW	R24,1
      A7 015C      MOVW	R10,R24
      A8 14AC      CP	R10,R12
      A9 04BD      CPC	R11,R13
      AA F3C8      BCS	0x00A4
      AB 940C 065F JMP	pop_xgset003C
FILE: E:\li\liliang\can-232\CAN-232\rprint.c
(0001) /******************************************************************** 
(0002) *  版本说明:1.0                                                    * 
(0003) *  作者:    andylee                                                * 
(0004) *  日期:    2006年10月                                              * 
(0005) *  平台:    mega16  16M                                            * 
(0006) *  说明:    通用的显示驱动功能函数库                               * 
(0007) ********************************************************************/ 
(0008) #include "rprint.h"
(0009) #define RPRINTF_FLOAT
(0010) //-----------------------------------------------------------------------------
(0011) #ifdef RPRINTF_COMPLEX
(0012)     static unsigned char buf[128];
(0013) #endif
(0014) //-----------------------------------------------------------------------------
(0015) #define pgm_read_byte(char_ptr)  *(const char *) char_ptr
(0016) #define READMEMBYTE(a,char_ptr) ((a)?(pgm_read_byte(char_ptr)):(*char_ptr))
(0017) //-----------------------------------------------------------------------------
(0018) static char HexChars[] = "0123456789ABCDEF";
(0019) //const static char HexChars[]="123456789ABCDEF"; 
(0020) 
(0021) // function pointer to single character output routine
(0022) static void (*rputchar)(unsigned char c);
(0023) //-----------------------------------------------------------------------------
(0024) 
(0025) //******************************************************************************
(0026) // *** rprintf initialization ***
(0027) //*****************************************************************************
(0028) //=============================================================================
(0029) void rprintfInit(void (*putchar_func)(unsigned char c))
(0030) //=============================================================================
(0031) {
(0032)     rputchar = putchar_func;
_rprintfInit:
  putchar_func         --> R16
      AD 9310 00C7 STS	rprint.c:rputchar+1,R17
      AF 9300 00C6 STS	rprint.c:rputchar,R16
      B1 9508      RET
_rprintfChar:
  c                    --> R10
      B2 92AA      ST	R10,-Y
      B3 2EA0      MOV	R10,R16
(0033) }
(0034) 
(0035) //==============================================================================
(0036)  void rprintfChar(unsigned char c)
(0037) //==============================================================================
(0038) {
(0039)     // send character
(0040)     rputchar(c);
      B4 2D0A      MOV	R16,R10
      B5 91E0 00C6 LDS	R30,rprint.c:rputchar
      B7 91F0 00C7 LDS	R31,rprint.c:rputchar+1
      B9 940E 0676 CALL	xicall
      BB 90A9      LD	R10,Y+
      BC 9508      RET
_rprintfStr:
  str                  --> R10
      BD 92AA      ST	R10,-Y
      BE 92BA      ST	R11,-Y
      BF 0158      MOVW	R10,R16
(0041) }
(0042) 
(0043) //=============================================================================
(0044) void rprintfStr(char str[])
(0045) //=============================================================================
(0046) {
(0047)     // send a string stored in RAM
(0048)     // check to make sure we have a good pointer
(0049)     if (!str) return;
      C0 20AA      TST	R10
      C1 F439      BNE	0x00C9
      C2 20BB      TST	R11
      C3 F429      BNE	0x00C9
      C4 C008      RJMP	0x00CD
(0050)               
(0051)     // print the string until a null-terminator
(0052)     while (*str)
(0053)         rprintfChar(*str++);
      C5 01F5      MOVW	R30,R10
      C6 9101      LD	R16,Z+
      C7 015F      MOVW	R10,R30
      C8 DFE9      RCALL	_rprintfChar
      C9 01F5      MOVW	R30,R10
      CA 8020      LDD	R2,Z+0
      CB 2022      TST	R2
      CC F7C1      BNE	0x00C5
      CD 90B9      LD	R11,Y+
      CE 90A9      LD	R10,Y+
      CF 9508      RET
_rprintfStrLen:
  i                    --> R10
  len                  --> Y,+6
  start                --> R14
  str                  --> R12
      D0 940E 066F CALL	push_xgset00FC
      D2 0179      MOVW	R14,R18
      D3 0168      MOVW	R12,R16
(0054) }
(0055) 
(0056) //=============================================================================
(0057) void rprintfStrLen(char str[], unsigned int start, unsigned int len)
(0058) //=============================================================================
(0059) {
(0060)     register int i=0;
      D4 24AA      CLR	R10
      D5 24BB      CLR	R11
(0061) 
(0062)     // check to make sure we have a good pointer
(0063)     if (!str) return;
      D6 20CC      TST	R12
      D7 F419      BNE	0x00DB
      D8 20DD      TST	R13
      D9 F409      BNE	0x00DB
      DA C021      RJMP	0x00FC
(0064)     // spin through characters up to requested start
(0065)     // keep going as long as there's no null
(0066)     while((i++<start) && (*str++));
      DB 0115      MOVW	R2,R10
      DC 01C1      MOVW	R24,R2
      DD 9601      ADIW	R24,1
      DE 015C      MOVW	R10,R24
      DF 142E      CP	R2,R14
      E0 043F      CPC	R3,R15
      E1 F428      BCC	0x00E7
      E2 01F6      MOVW	R30,R12
      E3 9021      LD	R2,Z+
      E4 016F      MOVW	R12,R30
      E5 2022      TST	R2
      E6 F7A1      BNE	0x00DB
(0067) 
(0068)     // then print exactly len characters
(0069)     for(i=0; i<len; i++)
      E7 24AA      CLR	R10
      E8 24BB      CLR	R11
      E9 C00D      RJMP	0x00F7
(0070)     {
(0071)         // print data out of the string as long as we haven't reached a null yet
(0072)         // at the null, start printing spaces
(0073)         if(*str)
      EA 01F6      MOVW	R30,R12
      EB 8020      LDD	R2,Z+0
      EC 2022      TST	R2
      ED F021      BEQ	0x00F2
(0074)             rprintfChar(*str++);
      EE 9101      LD	R16,Z+
      EF 016F      MOVW	R12,R30
      F0 DFC1      RCALL	_rprintfChar
      F1 C002      RJMP	0x00F4
(0075)         else
(0076)             rprintfChar(' ');
      F2 E200      LDI	R16,0x20
      F3 DFBE      RCALL	_rprintfChar
      F4 01C5      MOVW	R24,R10
      F5 9601      ADIW	R24,1
      F6 015C      MOVW	R10,R24
      F7 800E      LDD	R0,Y+6
      F8 801F      LDD	R1,Y+7
      F9 14A0      CP	R10,R0
      FA 04B1      CPC	R11,R1
      FB F370      BCS	0x00EA
      FC 940C 0664 JMP	pop_xgset00FC
_rprintfProgStr:
  c                    --> R12
  str                  --> R10
      FE 940E 0671 CALL	push_xgset003C
     100 0158      MOVW	R10,R16
(0077)     }
(0078) 
(0079) }
(0080) 
(0081) //*****************************************************************************
(0082) // *** rprintfProgStr ***
(0083) // prints a null-terminated string stored in program ROM
(0084) //*****************************************************************************
(0085) //=============================================================================
(0086) void rprintfProgStr(const char *str)
(0087) //=============================================================================
(0088) {
(0089)     // print a string stored in program memory
(0090)     register char c;
(0091) 
(0092)     // check to make sure we have a good pointer
(0093)     if (!str) return;
     101 20AA      TST	R10
     102 F429      BNE	0x0108
     103 20BB      TST	R11
     104 F419      BNE	0x0108
     105 C00B      RJMP	0x0111
(0094)     
(0095)     // print the string until the null-terminator
(0096)     while((c =*str++))
(0097)         rprintfChar(c);
     106 2D0C      MOV	R16,R12
     107 DFAA      RCALL	_rprintfChar
     108 0115      MOVW	R2,R10
     109 01C1      MOVW	R24,R2
     10A 9601      ADIW	R24,1
     10B 015C      MOVW	R10,R24
     10C 01F1      MOVW	R30,R2
     10D 9024      LPM	R2,1(Z)
     10E 2CC2      MOV	R12,R2
     10F 20CC      TST	R12
     110 F7A9      BNE	0x0106
     111 940C 065F JMP	pop_xgset003C
(0098) }
(0099) 
(0100) //******************************************************************************
(0101) // *** rprintfCRLF ***
(0102) // prints carriage return and line feed
(0103) //******************************************************************************
(0104) //==============================================================================
(0105) void rprintfCRLF(void)
(0106) //==============================================================================
(0107) {
(0108)     // print CR/LF
(0109)     rprintfChar('\r');
_rprintfCRLF:
     113 E00D      LDI	R16,0xD
     114 DF9D      RCALL	_rprintfChar
(0110)     rprintfChar('\n');
     115 E00A      LDI	R16,0xA
     116 DF9B      RCALL	_rprintfChar
     117 9508      RET
_rprintfu04:
  data                 --> R10
     118 92AA      ST	R10,-Y

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -