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

📄 wspilm74.lst

📁 C8051F系列单片机外围电路功能模块程序
💻 LST
字号:
C51 COMPILER V7.05   WSPILM74                                                              02/16/2006 21:22:22 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE WSPILM74
OBJECT MODULE PLACED IN WSPILM74.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe WSPILM74.c DB OE

stmt level    source

   1          //参考程序A  :  SPI调试程序  :WSPILM74.c
   2          //SPI调试程序  :WSPILM74.c
   3          #include <C8051F020.h>  
   4          #include <intrins.h>
   5          #define PORTA           0x8000         /*8255的A口*/
   6          #define PORTB           0x8001     /*8255的B口*/
   7          #define PORTC           0x8002     /*8255的C口*/
   8          #define PORTCON         0x8003     /*8255的控制口*/
   9          typedef unsigned char uchar;
  10          typedef unsigned int uint;
  11          uint h;
  12          uchar xdata  *idata Pointm;     
  13          uchar HMS[6],rr[3],h1,h2,h3,h4,i,j,k0,k1;
  14          uchar WE[6]={1,2,4,8,0x10,0x20};   //位选
  15          uchar ZI[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
  16          0x7c,0x39,0x5e,0x79,0x71,0x40};/*字选:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,-*/
  17          void PORT_Init (void);
  18          void displayled(void);
  19          void delay1ms(uint time){//延迟1ms
  20   1              uint ii;
  21   1              uint jj;
  22   1              for (ii=0;ii<time;ii++){
  23   2                      for(jj=0;jj<300;jj++);
  24   2              }
  25   1              }
  26          exch();    //数据转换
  27          void PORT_Init ();
  28          void spi_cfg(uchar spicfg,uchar spickr,uchar spicn)//SPI配置函数
  29          {
  30   1               SPI0CFG = spicfg;      //设定寄存器SPI0CFG=0C7H
  31   1               SPI0CKR = spickr;      //设定寄存器SPI9CKR=27H
  32   1           SPI0CN = spicn;    //设定寄存器SPI0CN =03 
  33   1           EIE1|= 0x01;
  34   1      }
  35          void config (void)  //config function
  36          {
  37   1          WDTCN = 0xDE;       //看门狗禁止
  38   1          WDTCN = 0xAD;
  39   1              XBR0 = 0x02;/*交叉开关配置,SPI总线SCK配置到P0.0口,
  40   1                          MOSI为P0.2口, NSS为P0.3,MISO配置到P0.1口*/
  41   1              XBR1 = 0x00;    
  42   1              XBR2 = 0x40;   /*允许功能选择开关有效*/
  43   1          P0MDOUT = 0x0D;/*SCK、MOSI和NSS为推拉式输出,MISO为开漏式.*/
  44   1      }  
  45          void main()   //主程序
  46          {
  47   1          PORT_Init ();
  48   1              config();
  49   1              spi_cfg(0x0C7,0x27,0x03);//设定寄存器SPI0CFG,SPI0CKR和SPI0CN 
  50   1              while(1)
  51   1              {
  52   2              P0=0xff;
  53   2              EA=1;
  54   2              i=0;
  55   2              P0&=0x7f;
C51 COMPILER V7.05   WSPILM74                                                              02/16/2006 21:22:22 PAGE 2   

  56   2              delay1ms(1);//延时
  57   2         SPI0DAT=0x00;
  58   2      //当对SPI0SAT写数据时,产生时钟信号,读入从LM74发来的高8位数据
  59   2          delay1ms(2);
  60   2              SPI0DAT=0x00;
  61   2      //当对SPI0SAT写数据时,产生时钟信号,读入从LM74发来的低8位数据
  62   2          delay1ms(2);
  63   2              if(i==2){       //已收到16位数据,就将1-->/CS并转入显示温度值的函数.
  64   3              P0|=0x80;
  65   3              delay1ms(5);
  66   3          EA=0;        //关中断
  67   3          exch();      //数据处理函数
  68   3          displayled();//显示温度值的函数.
  69   3              };
  70   2          }
  71   1      }
  72          exch() //数据格式转换,将二进制转换为十进制.
  73          {  HMS[0]=0;
  74   1       h=(256*rr[0]+rr[1])/128;//rr[0]中存放高8位数,rr[1]中存放低8位数
  75   1      if(h>=128)    //判别符号位
  76   1        {
  77   2        h=-h;      //若为负号,先求补码 
  78   2        HMS[0]=0x10;//"-"号(字形码:  40H)
  79   2        };
  80   1       
  81   1        h1=h/100;
  82   1        h2=(h-h1*100)/10;
  83   1        h3=(h-h1*100-h2*10);
  84   1        HMS[1]=h1;
  85   1        HMS[2]=h2;
  86   1        HMS[3]=h3;
  87   1        HMS[4]=0;
  88   1        h1=rr[1]&0x40;//判别0.5度
  89   1        if(h1!=0)
  90   1        HMS[4]=5;
  91   1        HMS[5]=0x0c;   //显示"C"
  92   1        }
  93          
  94          void spi_ISR() interrupt 6//SPI中断
  95          {  EA=0;
  96   1         while(TXBSY);        
  97   1          SPIF=0;
  98   1              rr[i]=SPI0DAT;//由于是全双工总线,在发送完一个字节时,
  99   1                            //主机也收到从机所发的数据
 100   1              i++;
 101   1      EA=1;
 102   1      }
 103          void PORT_Init (void)
 104          {
 105   1         OSCICN=0x05   ;/*选择内部振荡器,内部振荡器按IFCN指定的频率运行,
 106   1                                                     ;频率为8MHz*/
 107   1         OSCXCN = 0x67;       //外部为11.0592MHZ(未采用)      
 108   1         P74OUT  = 0x0ff;      /*P7为推拉方式,P4,P5,P6漏极开路*/
 109   1         EMI0CF |= 0x2c;              /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
 110   1         EMI0TC |= 0x6d;              /*地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
 111   1         Pointm=PORTCON;      /*8255初始化*/
 112   1         *Pointm=0x80;                
 113   1      }
 114          void displayled(void) //显示六位温度数据:-020.5C
 115          {unsigned  int  p;
 116   1      unsigned  char  pp;
 117   1      for(j=0;j<6;j++)
C51 COMPILER V7.05   WSPILM74                                                              02/16/2006 21:22:22 PAGE 3   

 118   1                  { 
 119   2                              pp=(HMS[j]);    /*转化成数码管数字显示码*/
 120   2                              k0=ZI[pp];        /*查表*/
 121   2                              Pointm=PORTB;   //动态驱动6数码管
 122   2                  k1=WE[j];       /*查表*/
 123   2                              *Pointm=k1; 
 124   2                              Pointm=PORTC; 
 125   2                              *Pointm=k0+0x80;        /*加小数点*/
 126   2                      if(k1!=8)
 127   2                  (*Pointm=k0);       /*送显示码*/
 128   2                  for(p=0;p<=1000;p++);
 129   2                      _nop_();
 130   2                      }
 131   1              }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    434    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     45    ----
   IDATA SIZE       =      2    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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