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

📄 source.lst

📁 一个直流信号源的全部开发资料,包括原理图,PCB,单片机程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  SOURCE                                                                 08/15/2004 20:14:19 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE SOURCE
OBJECT MODULE PLACED IN source.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE source.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include < stdio.h>
   2          #include < stdlib.h>
   3          #include <reg52.h>
   4          #include <math.h>
   5          sbit	DSP_LOAD=P1^2;
   6          sbit	DSP_DIN=P1^3;
   7          sbit	DSP_CLK=P1^1;
   8          
   9          sbit	X_CS=P0^0;
  10          sbit	X_SCK=P0^3;
  11          sbit	X_SI=P0^4;
  12          sbit	X_SO=P0^1;
  13          sbit	X_WP=P0^2;
  14          
  15          sbit	AD_BUSY=P3^3;
  16          
  17          sbit	DA_CS=P0^6;
  18          sbit	DA_CLK=P0^5;
  19          sbit	DA_D=P0^7;
  20          
  21          sbit	S_UP=P1^5;
  22          sbit	S_VI=P1^4;
  23          sbit	S_DOWN=P1^6;
  24          sbit	S_FAST=P1^7;
  25          
  26          sbit	VI_S=P2^0;
  27          
  28          #define ADI 0x80;
  29          #define ADU 0x40;
  30          #define ADH 0x20;
  31          #define ADL 0x10;
  32          #define SET_AD 0x08;
  33          
  34          
  35          
  36          
  37          unsigned char ad_cnt;
  38          unsigned int ad_vol;
  39          unsigned int set_vol;
  40          unsigned int adj_vol;
  41          unsigned int check_adj;
  42          
  43          bit ad_u;
  44          bit enable_ad;
  45          
  46          void x_write ( unsigned int x_address,unsigned char *psavedata,unsigned char amount) ;
  47          unsigned char  * x_read( unsigned int address ,unsigned char  amount) ;
  48          void x_wren_cmd (void);
  49          void init_watchdog(unsigned char ch);
  50          void x_outbyte( unsigned char ch);
  51          unsigned char x_inbyte( void );
  52          void wait(unsigned int time);
  53          void init_cpu(void);
  54          void disp_init(void);
  55          void disp_outbyte(int outbytes);
C51 COMPILER V6.12  SOURCE                                                                 08/15/2004 20:14:19 PAGE 2   

  56          void display(unsigned int pos,unsigned int disp_code);
  57          void disp_ad(unsigned int ad,unsigned char type);
  58          void da_outbyte(unsigned int outbytes);
  59          //void set_da(unsigned int vol);
  60          unsigned char send_buf[7];
  61          unsigned char rcv_buf[6];
  62          unsigned char rcv_cnt;
  63          unsigned char send_cnt;
  64          void main(void)
  65          {
  66   1      	unsigned char type,loop;
  67   1      	unsigned long is_power;
  68   1          init_cpu();
  69   1          disp_init();
  70   1          da_outbyte(0);
  71   1      	init_watchdog(0);
  72   1      	if( is_power != 0x12345678)
  73   1      	{
  74   2      		enable_ad=1;
  75   2      		check_adj=10125;
  76   2      		ad_u=1;
  77   2      	    set_vol=0;
  78   2      		adj_vol=0;
  79   2      		is_power = 0x12345678 ;
  80   2      	}
  81   1      	send_cnt=0;
  82   1      	rcv_cnt=0;
  83   1          while(1)
  84   1          {
  85   2      		if(S_VI == 0)
  86   2      		{
  87   3      			wait(100);
  88   3      			if(S_VI == 0)
  89   3      			{
  90   4      				ad_u=~ad_u;
  91   4      				if(ad_u) VI_S =1;
  92   4      				else VI_S=0;
  93   4                      set_vol=0;
  94   4                      adj_vol=0;
  95   4                      da_outbyte(0);
  96   4      				wait(400);
  97   4      			}
  98   3      		}
  99   2      		if((S_UP == 0) | (S_DOWN == 0))
 100   2      		{
 101   3      			wait(50);
 102   3      			if((S_UP == 0) | (S_DOWN == 0))
 103   3      			{
 104   4      				enable_ad=0;
 105   4      				type=SET_AD;
 106   4      				if(ad_u) { type=type | ADU; }
 107   4      				else { type=type | ADI; }
 108   4      				disp_ad(set_vol,type);
 109   4      				wait(400);
 110   4      				wait(400);
 111   4      				wait(200);
 112   4      
 113   4      				loop=0;
 114   4      				while(1)
 115   4      				{
 116   5      					type=SET_AD;
 117   5      					if(ad_u) { type=type | ADU; }
C51 COMPILER V6.12  SOURCE                                                                 08/15/2004 20:14:19 PAGE 3   

 118   5      					else { type=type | ADI; }
 119   5      					disp_ad(set_vol,type);
 120   5      					if(S_UP == 0)
 121   5      					{
 122   6      						wait(50);
 123   6      						if(S_UP== 0)
 124   6      						{
 125   7      							loop=0;
 126   7      							if(S_FAST== 0) { set_vol=set_vol+1000; }
 127   7      							else { set_vol=set_vol+100; }
 128   7      							if (( set_vol > 60000) & (ad_u)) set_vol = 60000;
 129   7      							if (( set_vol > 24000) & (!ad_u)) set_vol = 24000;
 130   7      						}
 131   6      					}
 132   5      					if(S_DOWN == 0)
 133   5      					{
 134   6      						wait(50);
 135   6      						if(S_DOWN == 0)
 136   6      						{
 137   7      							loop=0;
 138   7      							if(S_FAST== 0)
 139   7      							{
 140   8      								if(set_vol>1000) { set_vol=set_vol-1000;}
 141   8      								else { set_vol=0; }
 142   8      							}
 143   7      							else
 144   7      							{
 145   8      								if(set_vol>100) { set_vol=set_vol-100;}
 146   8      								else { set_vol=0; }
 147   8      							}
 148   7      						}
 149   6      					}
 150   5      					wait(50);
 151   5      					loop++;
 152   5      					if(loop > 50) break;
 153   5      					X_CS=0;
 154   5      					X_CS=1;
 155   5      				}
 156   4      				enable_ad=1;
 157   4      			}
 158   3      		}
 159   2      		X_CS=0;
 160   2      		X_CS=1;
 161   2        	}
 162   1      }
 163          //////////////////////////////
 164          //
 165          //NAME: init_com
 166          //DESCRIPTION: UART INTERRUPT SERVICE PROGRAM
 167          //CALL:
 168          //INPUT:
 169          //OUTPUT:NONE
 170          //
 171          //
 172          //send:H[L = ]U[I]XXXXX  7bytes  ad volue
 173          //receive:U[I]XXXXX 6bytes  set ad volue
 174          ///////////////////////////////
 175          void init_com() interrupt 4
 176          {
 177   1      	unsigned int i;
 178   1      	ES=0;
 179   1      	if(TI)
C51 COMPILER V6.12  SOURCE                                                                 08/15/2004 20:14:19 PAGE 4   

 180   1      	{
 181   2      		if(send_cnt<7)
 182   2      		{
 183   3      			SBUF=send_buf[send_cnt];
 184   3      			send_cnt++;
 185   3      		}
 186   2      		TI=0;
 187   2      	}
 188   1      	if(RI)
 189   1      	{
 190   2      		rcv_buf[rcv_cnt]=SBUF;
 191   2                      if((rcv_buf[rcv_cnt] == 'U') | ( rcv_buf[rcv_cnt] == 'I'))
 192   2                      {
 193   3                       rcv_buf[0]=rcv_buf[rcv_cnt];
 194   3                       rcv_cnt=0;
 195   3                       }
 196   2                      
 197   2      		rcv_cnt++;
 198   2      		if(rcv_cnt >= 6)
 199   2      		{
 200   3      			if((rcv_buf[0] == 'U' ) | (rcv_buf[0] == 'I' ))
 201   3      			{
 202   4      				if(rcv_buf[0] == 'U') ad_u=1;
 203   4      				else ad_u=0;
 204   4      				i=atoi(&rcv_buf[1]);
 205   4      				if((i > 60000) & (rcv_buf[0] == 'U')) i=60000;
 206   4      				if((i > 24000) & (rcv_buf[0] == 'I')) i=24000;
 207   4      				set_vol=i;
 208   4      				if(ad_u) VI_S =1;
 209   4      				else VI_S=0;
 210   4      			}
 211   3      			rcv_cnt=0;
 212   3      		}
 213   2      		RI=0;
 214   2      	}
 215   1      	ES=1;
 216   1      }
 217          
 218          //////////////////////////////
 219          //
 220          //NAME: da_outbyte(unsigned int outbytes)
 221          //DESCRIPTION: output a word to da max5541
 222          //CALL:
 223          //INPUT:  NONE
 224          //OUTPUT:NONE
 225          //
 226          ///////////////////////////////
 227          void da_outbyte(unsigned int outbytes)
 228          {
 229   1      	unsigned char loop;
 230   1      	unsigned int itemp;
 231   1      	DA_CS=0;
 232   1      	for(loop = 0 ; loop < 16 ; loop++)
 233   1      	{
 234   2      		DA_CLK=0;
 235   2      		itemp=outbytes & 0x8000;
 236   2      		if ( itemp == 0 ) DA_D = 0 ;
 237   2      		else DA_D = 1 ;
 238   2      		DA_CLK=1;
 239   2      		outbytes=outbytes<<1;
 240   2      	}
 241   1      	DA_CLK=0;
C51 COMPILER V6.12  SOURCE                                                                 08/15/2004 20:14:19 PAGE 5   

 242   1      	DA_CS=1;
 243   1      }
 244          //////////////////////////////
 245          //
 246          //NAME: init_cpu
 247          //DESCRIPTION: init cpu
 248          //CALL:
 249          //INPUT:  NONE
 250          //OUTPUT:NONE
 251          //
 252          ///////////////////////////////
 253          void init_cpu(void)
 254          {
 255   1      	X_CS=1;
 256   1      	X_SO=1;
 257   1      	X_SCK=0;
 258   1      	X_SI=0;
 259   1      	X_WP=0;
 260   1          DSP_LOAD=1;
 261   1          DSP_CLK=0;
 262   1          TL1=0;
 263   1          TH1=0;
 264   1          ad_cnt=0;
 265   1          TR1=1;
 266   1          TMOD=0x92;
 267   1      	ET1=1;
 268   1      	EX1=1;
 269   1      	IT1=1;
 270   1      	EA=1;
 271   1      
 272   1      	DA_CS=1;
 273   1      	DA_CLK=0;
 274   1      	DA_D=1;
 275   1      
 276   1      	SCON=0x50;
 277   1      	T2CON=0x30;//SET TIMER2 MODE FOR COM0
 278   1      	TH2=0xff;  // ffdc for 9600 fffd for 115200 for 11.0592MHz
 279   1      	TL2=0xdc;
 280   1      	RCAP2H=0xff;
 281   1      	RCAP2L=0xdc;
 282   1      	TR2=1;
 283   1      	ES=1;
 284   1      
 285   1      
 286   1      
 287   1      
 288   1      
 289   1      }
 290          ///////////////////////////////
 291          //
 292          //NAME: init_1
 293          //DESCRIPTION:  INTERRUPT 1 SERVICE PROGRAM FOR AD COUNTER
 294          //CALL:
 295          //INPUT:
 296          //OUTPUT:NONE
 297          //
 298          ///////////////////////////////
 299          void init_1() interrupt 2
 300          {
 301   1      	unsigned long vol;
 302   1      	unsigned char type;
 303   1      	unsigned long adj;
C51 COMPILER V6.12  SOURCE                                                                 08/15/2004 20:14:19 PAGE 6   

 304   1      	TR1=0;
 305   1      
 306   1      	vol=ad_cnt;
 307   1      	vol=vol<<8;
 308   1      	vol=vol | TH1 ;
 309   1      	vol=vol << 8;
 310   1      	vol=vol | TL1;
 311   1      	vol=vol>>3;
 312   1      	if (vol > 10001)
 313   1      	{
 314   2      		vol=vol-10000;
 315   2      		if( ad_u )
 316   2      		{
 317   3                  vol=vol * 60000;
 318   3                  vol=vol/20001;
 319   3      		}
 320   2      		else
 321   2      		{
 322   3      			vol=vol*48000;
 323   3      			vol=vol/20001;
 324   3      			vol=vol*check_adj;
 325   3      			vol=vol/10000;
 326   3      		}
 327   2              ad_vol=vol;
 328   2      	}
 329   1      	else
 330   1      	{
 331   2      		ad_vol=0;
 332   2      	}
 333   1      
 334   1      	if ( ad_u)
 335   1      	{
 336   2      		type = ADU;
 337   2      		send_buf[1]='U';
 338   2      	}
 339   1      	else
 340   1      	{
 341   2      		type = ADI;
 342   2      		send_buf[1]='I';
 343   2      	}
 344   1      	send_buf[0]='E';
 345   1      	if( abs(ad_vol - set_vol) > 0 )
 346   1      	{
 347   2      
 348   2      		if(ad_u)
 349   2      		{
 350   3      	        if( ad_vol > set_vol )
 351   3      			{
 352   4      				type=type | ADH ;
 353   4      				send_buf[0]='H';
 354   4      				adj=ad_vol-set_vol;
 355   4      				vol=adj*65535;
 356   4      				vol=vol/120000;
 357   4      				if ( adj_vol > vol) adj=adj_vol-(unsigned int)vol;
 358   4      				else adj=0;
 359   4      			}
 360   3      	        if( ad_vol < set_vol )
 361   3      			{
 362   4      				type=type | ADL ;
 363   4      				send_buf[0]='L';
 364   4      				adj=set_vol-ad_vol;

⌨️ 快捷键说明

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