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

📄 driver.lst

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE DRIVER
OBJECT MODULE PLACED IN Driver.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Driver.C LARGE OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND CODE

line level    source

   1          /*
   2          * Copyright (c) 2004,成都港顺科技发展有限公司
   3          * All rights reserved.
   4          *
   5          * 编 译 器:Keil:C Compiler:7.20;Assembler:7.10
   6          * 工程名称:POS-Test.UV2
   7          * 文件名称:Common.C
   8          /******************************************************************
   9          * 摘    要:硬件驱动函数   硬件设备相关变量宏定义  
  10          *************************************************************************8
  11          * 单 片 机:uPSD3254
  12          * 当前版本:0.4
  13          * 作    者:李凯、雍继兵
  14          * 完成日期:2004-12-7 14:45
  15          *
  16          * LCD显示字库采用16×16 GBK字库,纵向取模
  17          * VFD为10位9段显示
  18          * 键盘8×8矩阵+键盘锁8档=8×9矩阵
  19          */
  20          /****************************************************************************
  21           45行--- 130行  硬件设备相关变量宏 定义
  22           
  23            135-----204    中断interrupt driver 驱动程序
  24          
  25            211-----408    串口uart driver
  26          
  27            416-----915    I2C总线  和 24C64 Driver
  28          
  29          
  30           922--键盘----998-lock---1015-beep--1027- box--1035     key  driver
  31          
  32          1042----1576      lcd driver
  33          
  34          1588---1865         SPI 总线 和 Flash driver
  35          
  36          ////1872---1989       vfd  driver
  37          
  38          ///1999---2370                  MU110 printer  driver
  39          
  40          *******************************************************************************/
  41          #include "Main.h"
  42          
  43          
  44          ///////////////////////////////////////////////////////////////////////////////
  45          //      KEY Control
  46          #define KeyEnable     P47 = 0
  47          #define KeyDisable    P47 = 1
  48          #define KeyAdr      0xe00c
  49          
  50          
  51          
  52          
  53          ///////////////////////////////////////////////////////////////////////////////
  54          
  55          #define NandFalshE    0x800D
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 2   

  56          
  57          #define PrintAdr    0x800E
  58          
  59          ///////////////////////////////////////////////////////////////////////////////
  60          //              Serial Flash Control
  61          
  62          #define FlashDisable    P4|=0X0F,P47=1
  63          #define FlashEnable   P47=0
  64          
  65          #define Mcs1_Enable   P4=(P4&0xF0)|0X03
  66          #define Mcs2_Enable     P4=(P4&0xF0)|0X04
  67          #define Mcs3_Enable     P4=(P4&0xF0)|0X0a
  68          #define Mcs4_Enable     P4=(P4&0xF0)|0X06
  69          
  70          //        M25P80 and M45PE80 and M25P16 Instruction   
  71          //
  72          
  73          #define FlashWE         0x06      //Write Enable
  74          #define FlashWD         0x04      //Write Disable
  75          #define FlashRSR        0x05      //Read Status Register
  76          #define FlashWSR        0x01      //Write Status Register
  77          #define FlashRD         0x03      //FlashRD Data Bytes
  78          #define FlashFRD        0x0B      //FlashRD Data Bytes at Higher Speed
  79          #define FlashPW         0x0A      //Page Write
  80          #define FlashPP         0x02      //Page Program
  81          #define FlashPE         0xDB      //Page Erase
  82          #define FlashSE         0xD8      //Sector Erase
  83          #define FlashBE         0xC7      //Bulk Erase
  84          #define FlashDP         0xB9      //Deep Power-down
  85          #define FlashRDP        0xAB      //Release form Deep Power-down
  86          
  87          
  88          
  89          
  90          
  91          ///////////////////////////////////////////////////////////////////////////////
  92          
  93          //#define VFD_Enable    P47=0,P4=(P4&0xF0)|0x02
  94          //#define VFD_Forbid    P4|=0X0F,P47=1
  95          #define VFD_Enable    P4=0x07
  96          #define VFD_Forbid    P4=0
  97          
  98          
  99          ////////////////////////////////////////////////////////////////////////////
 100          
 101          #define OpenCashbox   P47=0,P4=(P4&0xF0)|0x01
 102          #define CloseCashbox  P4|=0X0F,P47=1
 103          
 104          
 105          ////////////////////////////////////////////////////////////////////////////
 106          #define BeepOn    P47=0,P4&=0xF0
 107          #define BeepOff   P4|=0X0F,P47=1
 108          
 109          ////////////////////////////////////////////////////////////////////////////
 110          sbit  VFDCLK=P4^4;   //P4.1
 111          sbit  VFDSDA=P4^6;   //p4.0                spi总线驱动
 112          
 113           ////////////////////////////////////////////////////////////////////////////
 114          
 115          sbit  I2CSDA=P3^6;
 116          sbit  I2CSCK=P3^7;
 117          
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 3   

 118          ////////////////////////////////////////////////////////////////////////////
 119          
 120          volatile uchar xdata SerialFlash[5] _at_ 0x6DFB;
 121          volatile uchar xdata TxdBuf [256] _at_ 0x6F00; //Data Buffer for UART1、2 Transmitter
 122          volatile uchar xdata RxdBuf [256] _at_ 0x6E00; //Data Buffer for UART1、2 Receiver
 123          uint xdata TxdLen;      //no. of data to FlashBE transimitted
 124          uint xdata TxdNum;      //no. of data transmitted
 125          uint xdata RxdLen;      //no. of data to FlashBE received
 126          uint xdata RxdNum;      //no. of data received
 127          uchar xdata PwrFlg;
 128          uchar xdata TxdFlg;
 129          uchar xdata RxdFlg;
 130          /****************************************************************************************************/
 131          
 132          
 133          
 134            //---------------------------INT Begin--------------------------------------------------------------
 135          
 136          void PowerInt(void) interrupt IE0_VECTOR           //power interrupt
 137          {
 138   1              PwrFlg=1;
 139   1      //      LcdDisplay(0,16,"进入掉电中断!",3);     
 140   1      }
 141          
 142          
 143          void SimInt (void) interrupt    IE1_VECTOR         //sim  interrupt
 144          {
 145   1      
 146   1      }
 147          
 148          /*-----------------------------------------------------------*/
 149          //             UART 0 Interrupt service routine
 150          /* ----------------------------------------------------- */
 151          void Uart0Int (void) interrupt SIO_VECTOR 
 152          {
 153   1              if (RI)
 154   1              {               
 155   2                      if (RxdLen > RxdNum)
 156   2                  {
 157   3                      RxdBuf [RxdNum] = SBUF;
 158   3                              RxdNum++;
 159   3                      }
 160   2                      RI = 0;
 161   2                      if (RxdLen <= RxdNum)RxdFlg=1;
 162   2              }
 163   1              else
 164   1              {               
 165   2                      if (TxdLen > TxdNum)
 166   2                  {
 167   3                      SBUF = TxdBuf [TxdNum];
 168   3                      TxdNum++;
 169   3                  }
 170   2                  TI = 0;
 171   2                  if (TxdLen <= TxdNum)TxdFlg=1;
 172   2              }
 173   1      }
 174          
 175          /*--------------------------------------------------------*/
 176          //             UART 1 Interrupt service routine
 177          /* ------------------------------------------------------ */
 178          
 179          void Uart1Int (void) interrupt SIO1_VECTOR 
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 4   

 180          {
 181   1              if ( SCON2 & 0x01)
 182   1              {
 183   2                      SCON2 &= 0xFE;                          //RI = 0;
 184   2                      if (RxdNum<RxdLen)
 185   2                  {
 186   3                      RxdBuf [RxdNum] = SBUF2;
 187   3                      RxdNum+=1;
 188   3                  }
 189   2                  if (RxdLen <= RxdNum)RxdFlg=1;
 190   2              }
 191   1              else
 192   1              {
 193   2                      SCON2 &= 0xFD;
 194   2                      if (TxdNum<TxdLen)
 195   2                  {
 196   3                      SBUF2 = TxdBuf [TxdNum];
 197   3                              TxdNum+=1;                                                      //TI = 0;
 198   3                      }
 199   2                      if (TxdLen <= TxdNum)TxdFlg=1;
 200   2              }
 201   1      }
 202          
 203          //---------------------------INT End----------------------------------------------------
 204          
 205          
 206          
 207          
 208          
 209          
 210          //---------------------------Uart Begin----------------------------------------------------------------
 211          /*
 212          Timer1:
 213          模式1、3波特率= 2SMOD/32 × fosc/12×[256 - (TH1)]
 214          timer_reg_value = (unsigned char)(256 - (OSC * baud_ratio)/ (32 * 12 * baudrate));
 215          
 216          Timer2:
 217          模式1、3波特率=fosc/(32×[65536-(RC2H,RC2L)])
 218          timer_reg_value = (unsigned int) (65536 - (OSC / (32 * baudrate)));
 219          */
 220          void UartSet(uchar ch,uchar timer,uchar mode,uchar net,uint baudrate)
 221          {
 222   1              unsigned char ratio,sconx;
 223   1              unsigned int value;
 224   1      //      unsigned long tp;
 225   1      
 226   1              sconx=0;
 227   1              switch(mode)
 228   1              {
 229   2                      case    0:      break;
 230   2                      case    1:      sconx |= 0x40;  break;
 231   2                      case    2:      sconx |= 0x80;  break;
 232   2                      case    3:      sconx |= 0xC0;  break;
 233   2                      default :       sconx |= 0x40;  break;
 234   2              }
 235   1              if(net==1)sconx |= 0x20;                //如果允许多机通信
 236   1      
 237   1              RCLK=0;
 238   1              TCLK=0;
 239   1              PCON &= 0xF3;           //RCLK1,TCLK1=0
 240   1      
 241   1              if(ch==0)
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 5   

 242   1              {
 243   2                      REN=0;                                          //禁止UART0接收
 244   2                      ES = 0;                                         //关UART0中断
 245   2                      if(timer==2){RCLK=1;TCLK=1;}//TCLK和RCLK=1,使用Timer2 for UART1
 246   2              }
 247   1              else
 248   1              {
 249   2                      SCON2 &= 0xEF;                          //禁止UART1接收,REN2=0
 250   2                      IEA &= 0xEF;                            //关UART1中断,ES2 = 0;
 251   2                      if(timer==2)PCON |= 0x0C;       //TCLK1和RCLK1=1,使用Timer2 for UART2
 252   2              }
 253   1      
 254   1              if(timer==1)
 255   1              {//timer 1:24MHz时钟时,最好不用Timer1做波特率时钟,误差太大
 256   2                      ET1=0;                  //关定时器1中断
 257   2              TR1=0;
 258   2              TMOD &= 0x0F;                   // clear timer 1 mode bits
 259   2                      TMOD |= 0x20;                   //Set timer1 自动重载模式,按定时器操作来配置
 260   2                      if(baudrate==9600 || baudrate==38400)
 261   2                      {
 262   3                              ratio=2;
 263   3                              if(ch==0)PCON |= 0x80;          //SMOD=1;
 264   3                              else     PCON |= 0x40;          //SMOD1=1;
 265   3                      }
 266   2                      else
 267   2                      {//baudrate==19200 or 4800,19200误差比较大
 268   3                              ratio=1;
 269   3                              if(ch==0)PCON &= 0x7F;          //SMOD=0;
 270   3                              else     PCON &= 0xBF;          //SMOD1=0;
 271   3                      }
 272   2                      if(mode==1 || mode==3)
 273   2                      {//Mode 1 or Mode 3
 274   3      //                      tp = OSC/384;           //12*32=384
 275   3      //                      TH1 = 256 - (unsigned char)(tp*ratio/baudrate);
 276   3                              TH1 = 256 - (unsigned char)(Timer1Baudrate*ratio/baudrate);
 277   3                              TL1 = TH1;

⌨️ 快捷键说明

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