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

📄 main.lst

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.50a,  main                                                                 25/04/06  04:24:57  PAGE 1   


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

stmt  level    source

    1          /**********************************************************************************************
    2          main.c file
    3          
    4          ADuC7027的第九个实验——定时计数器
    5          
    6          作者:Computer-lov
    7          建立日期:2006-4-25
    8          修改日期:2006-4-25
    9          版本:V1.0
   10          版权所有,盗版必究。
   11          任何技术问题可到我的博客上留言:    http://computer00.21ic.org
   12          Copyright(C) Computer-lov 2006-2016
   13          All rights reserved
   14          **********************************************************************************************/
   15          
   16          
   17          #include <ADuC7027.H>
   18          #include <../my_type.h>
   19          #include "LED.H"
   20          #include "interrupt.h"
   21          #include "Timer.h"
   22          #include "UART.H"
   23          
   24          /*********************************************************************************************/
   25          void SysClkInit(void)
   26          {
   27   1       PLLKEY1=0xAA;
   28   1       PLLCON=0x01;   //PLL配置  
   29   1       PLLKEY2=0x55;
   30   1       POWKEY1=0x01;
   31   1       POWCON=0x00;  //CPU时钟配置为41.78MHz
   32   1       POWKEY2=0xF4;
   33   1      // while(!(PLLSTA & 0x01));
   34   1      }
   35          ///////////////////////////////////////////////////////////////////////////////////////////////
   36          
   37          
   38          /*********************************************************************************************/
   39          void IRQ_Handler(void) __irq    //IRQ中断服务程序
   40          {
   41   1         
   42   1       if(IRQSTA & TIMER1)   //Timer0中断.每24小时中断一次
   43   1        {
   44   2         T1CLRI=0;          //清中断
   45   2      //   RealDate.Day++;
   46   2         return;
   47   2        }
   48   1      
   49   1      
   50   1       if(IRQSTA & TIMER2)       //读取IRQ中断状态,判断IRQ中断源
   51   1        {                        //Timer2中断
   52   2         T2CLRI=0;               //清中断
   53   2         if(LED6STAT)
   54   2          {
   55   3           ON_LED6();             //如果LED6灭的,则点亮它
   56   3          }
   57   2         else
   58   2          {
   59   3           OFF_LED6();          //如果LED6亮的,则熄灭它
ARM COMPILER V2.50a,  main                                                                 25/04/06  04:24:57  PAGE 2   

   60   3          }                  
   61   2         return;
   62   2        }
   63   1      
   64   1      
   65   1       if(IRQSTA & TIMER3)       //读取IRQ中断状态,判断IRQ中断源
   66   1        {                        //Timer2中断
   67   2         T3CLRI=0;
   68   2         if(LED7STAT)
   69   2          {
   70   3           ON_LED7();             //如果LED7灭的,则点亮它
   71   3          }
   72   2         else
   73   2          {
   74   3           OFF_LED7();            //如果LED7亮的,则熄灭它
   75   3          }                  
   76   2         return;
   77   2        }
   78   1      }
   79          ///////////////////////////////////////////////////////////////////////////////////////////////
   80          
   81          
   82          /*********************************************************************************************/
   83          void FIQ_Handler(void) __fiq   //FIQ中断服务程序
   84          {
   85   1       if(FIQSTA & TIMER0)       //读取FIQ中断状态,判断FIQ中断源
   86   1        {                        //Timer0中断
   87   2         GP0CLR=(1<<(6+16));     //在P0.6上产生一个上升沿,给Timer1提供1/128秒的时钟信号
   88   2         GP0SET=(1<<(6+16));
   89   2         T0CLRI=0;                //清Timer0中断
   90   2         if(LED4STAT)
   91   2          {
   92   3           ON_LED4(); //如果LED4灭的,则点亮它
   93   3          }
   94   2         else
   95   2          {
   96   3           OFF_LED4();            //如果LED4亮的,则熄灭它
   97   3          }
   98   2         return;
   99   2        }
  100   1      }
  101          ///////////////////////////////////////////////////////////////////////////////////////////////
  102          
  103          
  104          union 
  105          {
  106           uint32 TimeData;
  107           time_type Time;
  108          }RealTime;
  109          
  110          /*********************************************************************************************/
  111          void DisplayTime(void)
  112          {
  113   1       static uint32 OldSecond;   //用来判断是否需要更新显示
  114   1      
  115   1       if(OldSecond==RealTime.Time.Second)  //如果秒值没有变化,则不用刷新时间
  116   1        {
  117   2         return;
  118   2        }
  119   1      
  120   1       OldSecond=RealTime.Time.Second;     //如果秒值发生了变化,则需要刷新,并保存当前秒值
  121   1      
  122   1       if(LED5STAT)    //控制LED5每秒闪烁一次
  123   1        {
  124   2         ON_LED5();
  125   2        }
ARM COMPILER V2.50a,  main                                                                 25/04/06  04:24:57  PAGE 3   

  126   1       else
  127   1        {
  128   2         OFF_LED5();
  129   2        }
  130   1      
  131   1       send_a_byte(RealTime.Time.Hour/10+'0');     //显示小时
  132   1       send_a_byte(RealTime.Time.Hour%10+'0');
  133   1       send_a_byte(':');
  134   1       send_a_byte(RealTime.Time.Minute/10+'0');    //显示分
  135   1       send_a_byte(RealTime.Time.Minute%10+'0');
  136   1       send_a_byte(':');
  137   1       send_a_byte(RealTime.Time.Second/10+'0');    //显示秒
  138   1       send_a_byte(RealTime.Time.Second%10+'0');
  139   1      // send_a_byte(':');
  140   1      // send_a_byte(RealTime.Time.Hundredths/10+'0');
  141   1      // send_a_byte(RealTime.Time.Hundredths%10+'0');
  142   1       prints("",1);
  143   1      }
  144          ///////////////////////////////////////////////////////////////////////////////////////////////
  145          
  146          /*********************************************************************************************/
  147          void main(void)
  148          {
  149   1       SysClkInit();
  150   1       UART_init();
  151   1       cls();
  152   1      
  153   1       EN_LED4();
  154   1       EN_LED5();
  155   1       EN_LED6();
  156   1       EN_LED7();
  157   1       OFF_LED4();
  158   1       OFF_LED5();
  159   1       OFF_LED6();
  160   1       OFF_LED7();
  161   1       
  162   1       Timer0Init();
  163   1       Timer1Init();
  164   1       Timer2Init();
  165   1       Timer3Init();
  166   1      
  167   1      
  168   1       prints("System Start......",1);
  169   1      
  170   1       while(1)
  171   1        {
  172   2         RealTime.TimeData=T1VAL;  //读回定时器1的值
  173   2         DisplayTime();            //显示时间
  174   2        }
  175   1      }
  176          ///////////////////////////////////////////////////////////////////////////////////////////////
ARM COMPILER V2.50a,  main                                                                 25/04/06  04:24:57  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE32 (Timer0Init?A)
 EXTERN CODE32 (Timer1Init?A)
 EXTERN CODE32 (Timer2Init?A)
 EXTERN CODE32 (Timer3Init?A)
 EXTERN CODE32 (UART_init?A)
 EXTERN CODE32 (send_a_byte?A)
 EXTERN CODE32 (prints?A)
 EXTERN CODE32 (cls?A)
 EXTERN CODE32 (?C?SDIV?A)
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         SysClkInit?A
 PUBLIC         IRQ_Handler?A
 PUBLIC         FIQ_Handler?A
 PUBLIC         DisplayTime?A
 PUBLIC         main
 PUBLIC         RealTime



*** DATA SEGMENT '?CON?main':
 00000000          ??S_2:
 00000000            DB          'System Start......',0x00
 00000013          ??S_1:
 00000013            DB          0x00

*** DATA SEGMENT '?DT0?main':
 00000000          RealTime:
 00000000            DS          8
 00000008          OldSecond:
 00000008            DS          4



*** CODE SEGMENT '?PR?SysClkInit?A?main':
   27:  PLLKEY1=0xAA;
 00000000  E3A010AA  MOV         R1,#0xAA
 00000004  E5100000  LDR         R0,=0xFFFF0410
 00000008  E5801000  STR         R1,[R0,#0x0]
   28:  PLLCON=0x01;   //PLL配置  
 0000000C  E3A01001  MOV         R1,#0x1
 00000010  E5100000  LDR         R0,=0xFFFF0414
 00000014  E5801000  STR         R1,[R0,#0x0]
   29:  PLLKEY2=0x55;
 00000018  E3A02055  MOV         R2,#0x55
 0000001C  E5100000  LDR         R0,=0xFFFF0418
 00000020  E5802000  STR         R2,[R0,#0x0]
   30:  POWKEY1=0x01;
 00000024  E5100000  LDR         R0,=0xFFFF0404
 00000028  E5801000  STR         R1,[R0,#0x0]
   31:  POWCON=0x00;  //CPU时钟配置为41.78MHz
 0000002C  E3A01000  MOV         R1,#0x0
 00000030  E5100000  LDR         R0,=0xFFFF0408
 00000034  E5801000  STR         R1,[R0,#0x0]
   32:  POWKEY2=0xF4;
 00000038  E3A010F4  MOV         R1,#0xF4
 0000003C  E5100000  LDR         R0,=0xFFFF040C
 00000040  E5801000  STR         R1,[R0,#0x0]
   34: }
 00000044  E12FFF1E  BX          R14
 00000048          ENDP ; 'SysClkInit?A'


*** CODE SEGMENT '?PR?IRQ_Handler?A?main':
   39: void IRQ_Handler(void) __irq    //IRQ中断服务程序
 00000000  E92D0003  STMDB       R13!,{R0-R1}
   42:  if(IRQSTA & TIMER1)   //Timer0中断.每24小时中断一次
 00000004  E5100000  LDR         R0,=0xFFFF0000
ARM COMPILER V2.50a,  main                                                                 25/04/06  04:24:57  PAGE 5   

 00000008  E5900000  LDR         R0,[R0,#0x0]
 0000000C  E3100008  TST         R0,#0x0008
 00000010  0A000003  BEQ         L_1  ; Targ=0x24
   44:    T1CLRI=0;          //清中断
 00000014  E3A01000  MOV         R1,#0x0
 00000018  E5100000  LDR         R0,=0xFFFF032C
 0000001C  E5801000  STR         R1,[R0,#0x0]
   46:    return;
 00000020  EA000024  B           L_2  ; Targ=0xB8
   47:   }
 00000024          L_1:
   50:  if(IRQSTA & TIMER2)       //读取IRQ中断状态,判断IRQ中断源
 00000024  E5100000  LDR         R0,=0xFFFF0000
 00000028  E5900000  LDR         R0,[R0,#0x0]
 0000002C  E3100010  TST         R0,#0x0010
 00000030  0A00000E  BEQ         L_3  ; Targ=0x70
   52:    T2CLRI=0;               //清中断
 00000034  E3A01000  MOV         R1,#0x0
 00000038  E5100000  LDR         R0,=0xFFFF034C
 0000003C  E5801000  STR         R1,[R0,#0x0]
   53:    if(LED6STAT)
 00000040  E5100000  LDR         R0,=0xFFFFF450
 00000044  E5900000  LDR         R0,[R0,#0x0]
 00000048  E3100701  TST         R0,#0x40000

⌨️ 快捷键说明

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