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

📄 myuart.lst

📁 单片机CAN总线接口通讯程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
ARM COMPILER V2.42,  myuart                                                                16/09/08  08:08:57  PAGE 1   


ARM COMPILER V2.42, COMPILATION OF MODULE myuart
OBJECT MODULE PLACED IN myuart.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe myuart.c THUMB BROWSE DEBUG TABS(4) 

stmt  level    source

    1          
    2          #include <ADuC7026.h>
    3          #include <sja1000.h>
    4          
    5          
    6          #define uchar   unsigned char
    7          
    8          
    9          uchar   iRecData[10];
   10          uchar   flagdata=0; 
   11          uchar   dlc;
   12          
   13          
   14          
   15          void Delay(int);
   16          void Reset();
   17          void rsvmessage();
   18          void sendmessage(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);
   19          
   20          
   21          void Init()
   22          {
   23   1          
   24   1          GP1CON=0x11;
   25   1          GP2CON=0x22222222;
   26   1          GP3CON=0x22222222;
   27   1          GP4CON=0x22222222;
   28   1      
   29   1      
   30   1          XMCFG = 0x01;
   31   1          XM0CON = 0x01;
   32   1          XM0PAR = 0x70FF;
   33   1      
   34   1          COMCON0=0x080;
   35   1          COMDIV0=0x088;
   36   1          COMDIV1=0x000;
   37   1          COMCON0=0x007;
   38   1      
   39   1          
   40   1          Reset();
   41   1      
   42   1          Delay(2000);
   43   1      
   44   1          while((reg_CR&0x01)==0x00)      //进入复位模式
   45   1          {   
   46   2              reg_CR=reg_CR|0x01;
   47   2      
   48   2          }
   49   1      
   50   1          reg_CDR=0x41;                    //时钟分频寄存器,控制CLKOUT的输出频率,BASIC模式,CLKOUT输出fosc/2
   51   1          reg_AMR=0xF0;                    //验收屏蔽寄存器,全部屏蔽
   52   1          reg_ACR=0x07;                    //验收代码寄存器,与报文标志码的高8位相等
   53   1          reg_BTR0=0x80;                   //总线时序寄存器0,系统的时钟周期Tscl是2Tclk同步跳转宽度3Tscl
   54   1          reg_BTR1=0xFA;                   //总线时序寄存器1,总线采样3次,时间段1=11Tscl,时间段2=8Tscl
   55   1          reg_OCR=0x1A;
   56   1              
   57   1          
   58   1          while((reg_CR&0x01)==0x01)
   59   1          {
ARM COMPILER V2.42,  myuart                                                                16/09/08  08:08:57  PAGE 2   

   60   2              reg_CR=reg_CR&0x00;
   61   2              reg_CR=reg_CR|0x1E;     
   62   2      
   63   2          }
   64   1          
   65   1      
   66   1      }
   67          
   68                        
   69          void Delay(int dly)
   70              {   
   71   1              int j;
   72   1              for(;dly>0;dly--)
   73   1                  for(j=0;j<50;j++){};
   74   1          } 
   75          
   76          /****************************************sja1000软件复位************************************/
   77          
   78          void Reset()
   79          {
   80   1          GP0DAT=0x02000000;
   81   1          Delay(2000);
   82   1          GP0DAT=0x02020000;
   83   1      }
   84          
   85          
   86          void sendmessage(uchar a0,uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6,uchar a7,uchar a8,uchar a
             -9)
   87          {
   88   1          uchar   len=0;
   89   1          while(reg_SR&0X10);
   90   1          while((reg_SR&0X08)==0);
   91   1          while((reg_SR&0X04)==0);
   92   1          reg_Sendone=a0;
   93   1          reg_Sendtwo=a1;
   94   1          len=a1&0x0f;
   95   1          switch(len)
   96   1          {
   97   2              case 0x00: break;
   98   2              case 0x01: reg_Senddata1=a2;break;
   99   2              case 0x02: reg_Senddata1=a2;reg_Senddata2=a3;break;
  100   2              case 0x03: reg_Senddata1=a2;reg_Senddata2=a3;reg_Senddata3=a4;break;
  101   2              case 0x04: reg_Senddata1=a2;reg_Senddata2=a3;reg_Senddata3=a4;reg_Senddata4=a5;break;
  102   2              case 0x05: reg_Senddata1=a2;reg_Senddata2=a3;reg_Senddata3=a4;reg_Senddata4=a5;reg_Senddata5=a6;break;
  103   2              case 0x06: reg_Senddata1=a2;reg_Senddata2=a3;reg_Senddata3=a4;reg_Senddata4=a5;reg_Senddata5=a6;reg_Sen
             -ddata6=a7;break;
  104   2              case 0x07: reg_Senddata1=a2;reg_Senddata2=a3;reg_Senddata3=a4;reg_Senddata4=a5;reg_Senddata5=a6;reg_Sen
             -ddata6=a7;reg_Senddata7=a8;break;
  105   2              case 0x08: reg_Senddata1=a2;reg_Senddata2=a3;reg_Senddata3=a4;reg_Senddata4=a5;reg_Senddata5=a6;reg_Sen
             -ddata6=a7;reg_Senddata7=a8;reg_Senddata8=a9;break;
  106   2              default: reg_Sendtwo=reg_Sendtwo&0xe8;reg_Senddata1=a2;reg_Senddata2=a3;reg_Senddata3=a4;reg_Senddata4=
             -a5;reg_Senddata5=a6;reg_Senddata6=a7;reg_Senddata7=a8;reg_Senddata8=a9;break;
  107   2          }
  108   1          reg_CMR=0X01;
  109   1      }
  110          
  111          void rsvmessage()
  112          {
  113   1          uchar   i;
  114   1          uchar   flag_IR;
  115   1          if(reg_SR&0x03)
  116   1          {
  117   2              flag_IR=reg_IR;
  118   2              if(flag_IR&0x01)
  119   2              {
  120   3                  do{}while(reg_SR&0x10);
ARM COMPILER V2.42,  myuart                                                                16/09/08  08:08:57  PAGE 3   

  121   3                  iRecData[0]=reg_Rsvone;
  122   3                  iRecData[1]=reg_Rsvtwo;
  123   3                  dlc=iRecData[1]&0x0f;
  124   3                  for(i=0;i<dlc;i++)
  125   3                  {
  126   4                      iRecData[i+2]=*(&reg_Rsvdata1+i);
  127   4                  }
  128   3                  reg_CMR=0x04;
  129   3                  flagdata=1;
  130   3              }
  131   2              else
  132   2              {
  133   3                  if(reg_SR&0x02) reg_CMR=0x0c;
  134   3              }
  135   2          }
  136   1      }
  137          
  138          
  139          uchar hex2ascii(uchar toconv) 
  140          {
  141   1          if (toconv<0x0A)                            
  142   1          {                                           
  143   2              toconv += 0x30;                         
  144   2          }                                      
  145   1          else                                    
  146   1          {                               
  147   2              toconv += 0x37;
  148   2          }
  149   1          
  150   1          return (toconv);
  151   1      }
  152          
  153          
  154          void senddata(uchar to_send) {
  155   1          while(!(0x020==(COMSTA0 & 0x020))){}
  156   1              COMTX = 0x0A;                           //Output LF 
  157   1          while(!(0x020==(COMSTA0 & 0x020))){}
  158   1              COMTX = 0x0D;                           //Output CR 
  159   1          while(!(0x020==(COMSTA0 & 0x020))){}
  160   1              COMTX = hex2ascii ((to_send >> 4) & 0x0F);                      
  161   1          while(!(0x020==(COMSTA0 & 0x020))){}
  162   1              COMTX = hex2ascii (to_send & 0x0F);
  163   1      }
  164          
  165          
  166          void main()
  167          {   
  168   1          int k=1;
  169   1          uchar temp1=1;
  170   1          Init();
  171   1      
  172   1          sendmessage(0x39,0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x08);
  173   1          Delay(1);
  174   1          while(temp1)
  175   1          {
  176   2          sendmessage(0x37,0x08,k,0x02,0x03,0x05,0x05,0x06,0x06,0x08);
  177   2          Delay(100000);
  178   2          Delay(100000);
  179   2          Delay(100000);
  180   2          k++;
  181   2          if(k==100)k=1;
  182   2      }
  183   1      
  184   1      }
  185          
ARM COMPILER V2.42,  myuart                                                                16/09/08  08:08:57  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         Delay?T
 PUBLIC         Reset?T
 PUBLIC         rsvmessage?T
 PUBLIC         sendmessage?T
 PUBLIC         Init?T
 PUBLIC         hex2ascii?T
 PUBLIC         senddata?T
 PUBLIC         main
 PUBLIC         iRecData
 PUBLIC         flagdata
 PUBLIC         dlc



*** DATA SEGMENT '?DT0?myuart':
 00000000          iRecData:
 00000000            DS          10
 0000000A          flagdata:
 0000000A           BEGIN_INIT
 0000000A  00        DB          0x0
 0000000B           END_INIT
 0000000B          dlc:
 0000000B            DS          1



*** CODE SEGMENT '?PR?Init?T?myuart':
   21: void Init()
 00000000  B500      PUSH        {LR}
   24:     GP1CON=0x11;
 00000002  2111      MOV         R1,#0x11
 00000004  4800      LDR         R0,=0xFFFFF404
 00000006  6001      STR         R1,[R0,#0x0]
   25:     GP2CON=0x22222222;
 00000008  4800      LDR         R1,=0x22222222
 0000000A  4800      LDR         R0,=0xFFFFF408
 0000000C  6001      STR         R1,[R0,#0x0]
   26:     GP3CON=0x22222222;
 0000000E  4800      LDR         R0,=0xFFFFF40C
 00000010  6001      STR         R1,[R0,#0x0]
   27:     GP4CON=0x22222222;
 00000012  4800      LDR         R0,=0xFFFFF410
 00000014  6001      STR         R1,[R0,#0x0]
   30:     XMCFG = 0x01;
 00000016  2101      MOV         R1,#0x1
 00000018  4800      LDR         R0,=0xFFFFF000
 0000001A  6001      STR         R1,[R0,#0x0]
   31:     XM0CON = 0x01;
 0000001C  4800      LDR         R0,=0xFFFFF010
 0000001E  6001      STR         R1,[R0,#0x0]
   32:     XM0PAR = 0x70FF;
 00000020  4800      LDR         R1,=0x70FF
 00000022  4800      LDR         R0,=0xFFFFF020
 00000024  6001      STR         R1,[R0,#0x0]
   34:     COMCON0=0x080;
 00000026  2180      MOV         R1,#0x80
 00000028  4800      LDR         R0,=0xFFFF070C
 0000002A  6001      STR         R1,[R0,#0x0]
   35:      COMDIV0=0x088;
 0000002C  2188      MOV         R1,#0x88
 0000002E  4800      LDR         R0,=0xFFFF0700
 00000030  6001      STR         R1,[R0,#0x0]
   36:      COMDIV1=0x000;
ARM COMPILER V2.42,  myuart                                                                16/09/08  08:08:57  PAGE 5   

 00000032  2100      MOV         R1,#0x0
 00000034  4800      LDR         R0,=0xFFFF0704
 00000036  6001      STR         R1,[R0,#0x0]
   37:      COMCON0=0x007;
 00000038  2107      MOV         R1,#0x7
 0000003A  4800      LDR         R0,=0xFFFF070C
 0000003C  6001      STR         R1,[R0,#0x0]
   40:     Reset();
 0000003E  F7FF      BL          Reset?T  ; T=0x0001  (1)
 00000040  FFDF      BL          Reset?T  ; T=0x0001  (2)
   42:     Delay(2000);
 00000042  4800      LDR         R0,=0x7D0
 00000044  F7FF      BL          Delay?T  ; T=0x0001  (1)
 00000046  FFDC      BL          Delay?T  ; T=0x0001  (2)
   44:        while((reg_CR&0x01)==0x00)       //进入复位模式
 00000048  E008      B           L_1  ; T=0x0000005C
 0000004A          L_3:
   46:         reg_CR=reg_CR|0x01;
 0000004A  4800      LDR         R0,=0x10000000
 0000004C  7800      LDRB        R0,[R0,#0x0]
 0000004E  1C01      MOV         R1,R0
 00000050  2001      MOV         R0,#0x1
 00000052  4301      ORR         R1,R0
 00000054  0609      LSL         R1,R1,#0x18
 00000056  0E09      LSR         R1,R1,#0x18
 00000058  4800      LDR         R0,=0x10000000
 0000005A  7001      STRB        R1,[R0,#0x0]
   48:     }
 0000005C          L_1:
 0000005C  4800      LDR         R0,=0x10000000
 0000005E  7800      LDRB        R0,[R0,#0x0]
 00000060  2101      MOV         R1,#0x1
 00000062  4208      TST         R0,R1
 00000064  D0F1      BEQ         L_3  ; T=0x0000004A
   50:     reg_CDR=0x41;                    //时钟分频寄存器,控制CLKOUT的输出频率,BASIC模式,CLKOUT输出fosc/2
 00000066  2141      MOV         R1,#0x41
 00000068  4800      LDR         R0,=0x1000001F
 0000006A  7001      STRB        R1,[R0,#0x0]
   51:     reg_AMR=0xF0;                    //验收屏蔽寄存器,全部屏蔽
 0000006C  21F0      MOV         R1,#0xF0
 0000006E  4800      LDR         R0,=0x10000005
 00000070  7001      STRB        R1,[R0,#0x0]
   52:     reg_ACR=0x07;                    //验收代码寄存器,与报文标志码的高8位相等
 00000072  2107      MOV         R1,#0x7
 00000074  4800      LDR         R0,=0x10000004
 00000076  7001      STRB        R1,[R0,#0x0]
   53:     reg_BTR0=0x80;                   //总线时序寄存器0,系统的时钟周期Tscl是2Tclk同步跳转宽度3Tscl
 00000078  2180      MOV         R1,#0x80
 0000007A  4800      LDR         R0,=0x10000006
 0000007C  7001      STRB        R1,[R0,#0x0]
   54:     reg_BTR1=0xFA;                   //总线时序寄存器1,总线采样3次,时间段1=11Tscl,时间段2=8Tscl
 0000007E  21FA      MOV         R1,#0xFA
 00000080  4800      LDR         R0,=0x10000007
 00000082  7001      STRB        R1,[R0,#0x0]
   55:     reg_OCR=0x1A;
 00000084  211A      MOV         R1,#0x1A
 00000086  4800      LDR         R0,=0x10000008
 00000088  7001      STRB        R1,[R0,#0x0]
   58:     while((reg_CR&0x01)==0x01)
 0000008A  E00B      B           L_5  ; T=0x000000A4
 0000008C          L_7:
   60:         reg_CR=reg_CR&0x00;
 0000008C  2100      MOV         R1,#0x0

⌨️ 快捷键说明

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