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

📄 340_ad.lst

📁 c8051f340 silcon lab
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   340_AD                                                                10/23/2006 13:29:41 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 340_AD
OBJECT MODULE PLACED IN 340_ad.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 340_ad.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          例程说明,本程序是对电位器产生的电压值进行采样,可以在寄存器观察AD的
   3          也可以通过LCD将值显示出来,由于LV595芯片片选引脚与以太网控制芯片CP2200
   4          中断引脚复用因些在此例程中加入了将CP2200芯片中断关闭的代码。还要在建立
   5          工程文件时将CP220X_REG.C文件包含到工程中.
   6          ********************************************************************/
   7          
   8          #include "C8051F340.h"
   9          #include "cp220x_reg.h"
  10          
  11          #define uchar unsigned char
  12          #define uint  unsigned int 
  13          #define  BASE_ADDRESS   0x10
  14          #define EMIF_TIMING     0x9E 
  15          
  16          sfr16 TMR2RL   = 0xca;                 
  17          sfr16 TMR2     = 0xcc;                 
  18          sbit LcdCs=P0^3;
  19          sbit led=P2^4;
  20          bit SPI_BUSY;
  21          
  22          
  23          uchar xdata virt_port;
  24          uchar xdata discode;//开关显示、光标、闪烁的命令字暂存单元
  25          uint Count1ms;                                                                  
  26          uint temp,ams,temp_l;                                              // 存储ADC的变量
  27          uchar xdata tab1[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44
  28                                      ,0x45,0x46};
  29          void ADC0_Init(void);                  //ADC初始化
  30          void Timer2_Init(void);                            //定时器初始化
  31          void Delay(void);                                          //延时程序
  32          void PORT_Init(void);                              //端口初始化
  33          void delay(uint timer);
  34          void writelcd(uchar spi_data);
  35          void writecode(uchar ins);
  36          void writedata(uchar d);
  37          void lcdinit();
  38          void lcdchar (void);
  39          void lcdaddr(uchar DDRAM);
  40          void cursoropen(uchar position);//开光标,关闪烁
  41          void displayopen(void);                 //开显示,光标、闪烁不变
  42          void ether_reset_low();
  43          void ether_reset_high (void);
  44          void Delay1ms(uint T);
  45          void EMIF_Init (void);
  46          void SPI_Init();
  47          /*********************************************************************/
  48          // 主程序
  49          /*********************************************************************/
  50          void main()
  51          {        
  52   1          uint j;
  53   1              PCA0MD   &= ~0x40;                 //关闭看门狗
  54   1          OSCICN |= 0x03;                    //使用内部12M晶振                           
  55   1              ADC0_Init();                                       //ADC初始化
C51 COMPILER V7.50   340_AD                                                                10/23/2006 13:29:41 PAGE 2   

  56   1          Timer2_Init();                                         //定时器初始化
  57   1          PORT_Init();                                           //端口初始化
  58   1              EMIF_Init ();
  59   1          ether_reset_low();
  60   1          for(j=0;j<5000;j++);
  61   1          ether_reset_high ();
  62   1          INT0EN = 0x00;                         
  63   1          INT1EN = 0x00;
  64   1          SPI_Init();
  65   1              lcdinit();
  66   1          IE = 0x40;
  67   1          EA=1;                                                          //开中断
  68   1        while(1)
  69   1        {     lcdinit();
  70   2              lcdchar();
  71   2        }                                   //取值此处加显示
  72   1      
  73   1      }
  74          /*********************************************************************/
  75          // 延时程序
  76          /*********************************************************************
  77          void Delay(void)
  78          {
  79             int x;
  80             for(x = 0;x < 500;x)
  81                x++;
  82          }
  83          /*********************************************************************/
  84          // 定时器2中断程序
  85          /*********************************************************************/
  86          void Timer2_ISR(void) interrupt 5
  87          {
  88   1        
  89   1         TF2H = 0;                           // 清除定时器2的中断标志
  90   1      }
  91          /*********************************************************************/
  92          // ADC初始化程序
  93          /*********************************************************************/
  94          void ADC0_Init(void)
  95          {
  96   1         REF0CN  = 0x0F;                     //使用内部参考电压VREF
  97   1         AMX0P = 0x04;                       // P2.5为输入端
  98   1         AMX0N = 0x1F;                       // 单端输入
  99   1      
 100   1         ADC0CF  = 0xFC;                     // 采样值右对齐,如左对齐其值为FC
 101   1      
 102   1         ADC0CN  = 0xC2;                     //采用定时器2溢出后3个SAR时钟开转换
 103   1                                             // 这时MCU功耗比较低
 104   1      
 105   1         EIE1   |= 0x08;                     //使能ADC中断
 106   1      }
 107          
 108           /*********************************************************************/
 109          // ADC中断程序
 110          /*********************************************************************/
 111          void ADC0_ConvComplete_ISR(void) interrupt 10
 112          {
 113   1            temp= ADC0H;                                                //高字节
 114   1            ams=ADC0L;                                                  //低字节
 115   1              //  temp_l=temp<<8+ams;
 116   1            AD0INT = 0;                                                 //清中断
 117   1      }
C51 COMPILER V7.50   340_AD                                                                10/23/2006 13:29:41 PAGE 3   

 118          /*********************************************************************/
 119          // 端口初始化程序
 120          /*********************************************************************/
 121          void PORT_Init(void)
 122          {
 123   1         P2MDIN   = 0xDF;                    // P2.5 为模拟输入
 124   1         P2SKIP   = 0x20;                    // P2.5 跳过
 125   1         XBR0     = 0x02;
 126   1         XBR1     = 0x40;                    // 允许交叉开关
 127   1         P0MDOUT  =0xff;
 128   1         P1MDOUT |= 0xD8;                    // /WR and /RD are push-pull
 129   1         P3MDOUT |= 0xFF;
 130   1         P4MDOUT |= 0xFF;
 131   1      }
 132          
 133          /*********************************************************************/
 134          // 定时器2初始化程序
 135          /*********************************************************************/
 136          void Timer2_Init(void)
 137          {
 138   1         TMR2CN  = 0x00;                     //清定时器2标志
 139   1      
 140   1         CKCON  &= ~0xF0;                    //选择时基
 141   1         TMR2RL  = 0;                        // 重载值
 142   1         TMR2    = 0xffff;                   // 
 143   1      
 144   1         ET2     = 1;                        // 使能定时器2 中断
 145   1         TR2     = 1;                        // 开启定时器2
 146   1      }
 147                       
 148          void delay1us(void)
 149          {
 150   1              uchar xdata i;
 151   1              for(i=10;i>0;i--);
 152   1      } 
 153          
 154          void SPI_Init()
 155          {
 156   1          SPI0CFG   = 0x70;
 157   1          SPI0CN    = 0x01;
 158   1          SPI0CKR   = 0x3B;
 159   1        
 160   1      
 161   1      } 
 162          
 163          void writelcd(uchar spi_data)      //向LV595写数据以SPI方式
 164          {
 165   1      
 166   1              uint xdata i,j;
 167   1              for(i=0;i<3;i++)
 168   1              LcdCs=0;
 169   1              SPI_BUSY=1;
 170   1              delay1us();
 171   1              SPI0DAT=spi_data;
 172   1              
 173   1           for(j=0;j<500;j++)
 174   1                      {
 175   2                 if(!SPI_BUSY)break;
 176   2                      } 
 177   1              delay1us();
 178   1              LcdCs=1;
 179   1              delay1us();
C51 COMPILER V7.50   340_AD                                                                10/23/2006 13:29:41 PAGE 4   

⌨️ 快捷键说明

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