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

📄 blinky.c

📁 260 ad采样
💻 C
字号:
//------------------------------------------------------------------------------------
// Blinky.c
//------------------------------------------------------------------------------------
// Copyright (C) 2004 Silicon Laboratories, Inc.
//
// AUTH: BW
// DATE: 10 OCT 01
//
// This program flashes the green LED on the C8051F2xx target board about five times
// a second using the interrupt handler for Timer2.
//
// Target: C8051F2xx
//
// Tool chain: KEIL Eval 'c'
//

//------------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------------
#include <c8051f200.h>                    // SFR declarations

//------------------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F2xx
//------------------------------------------------------------------------------------

sfr16 DP       = 0x82;                    // data pointer
sfr16 ADC0     = 0xbe;                    // ADC0 data
sfr16 ADC0GT   = 0xc4;                    // ADC0 greater than window
sfr16 ADC0LT   = 0xc6;                    // ADC0 less than window
sfr16 RCAP2    = 0xca;                    // Timer2 capture/reload
sfr16 T2       = 0xcc;                    // Timer2

//------------------------------------------------------------------------------------
// Global CONSTANTS
//------------------------------------------------------------------------------------
#define SLEEP 0x01    //PCON POWER SLEEP
#define ADCCH 30000   // ADC
                     
unsigned int data  adcbuf[30];              // ad 
unsigned int idata adcxsh[30];
unsigned int idata ubat[30];
 
sbit  T485  = P3^7;                        //TX RX CHANGE 

//------------------------------------------------------------------------------------
// Function PROTOTYPES
//------------------------------------------------------------------------------------
void  port_init (void);
void  timer2_init (void);
void  timer0_init (void);
void  timer0_isr (void);
void  uart_isr (void);
void  dog_init (void);
void  uart_init (void);
void  adcl (void);
void  txcl (void);
void  loadxsh (void);
void  savexsh (void);
unsigned char data  m=0;
unsigned char bdata bz;
sbit bz_ad = bz^0;
sbit bz_tx = bz^1;



void main (void) 
{   loadxsh();
	port_init ();
    timer0_init();
    timer2_init();
    uart_init();
    dog_init();          //watch dog
    EA = 1;              // enable global interrupts
    while (1) 
   	 { PCON = SLEEP;                //SLEEP
	  if(bz_ad==1) adcl();          //ad chu li                  
   	  if(bz_tx==1) txcl();	       //tongxin chu li
     
   	 }
}

//////////////////////////////
// load xishu
/////////////////////////////
void loadxsh(void)
{	unsigned int code *pread;
    unsigned char data i;
    pread  = 0x2000;
	for(i=0;i<30;i++)
		{ adcxsh[i] = *pread ;
		  pread++;
        }

}
////////////////////////////////////
//gen huan xi shi
////////////////////////////////////
void savexsh(void)
{ 	unsigned int xdata *pwrite;
	unsigned char data i;
	//WDTCN = 0xde;
    //WDTCN = 0xad;
    // 擦除128 字节的信息页位于0x2000
	EA    = 0;
    FLSCL = 0x89;   // 设置FLASH 标度寄存器对16MHz 系统时钟
    PSCTL = 0x03;   // 将PSWE 和PSEE 置1 MOVX 指令对应
                     // 的FLASH 页
    pwrite = 0x2000; // 将指针指向待擦除页
    *pwrite = 0;     // 启动擦除过程
    PSCTL = 0x01;    // 清除PSEE PSWE 仍然置1
    for(i=0;i<30;i++)
		{ *pwrite = adcxsh[i];
		  pwrite++;
		 }

    PSCTL = 0; // 禁止FLASH 写
    FLSCL = 0x8f; //
	EA    = 1;

}
//////////////////////////////
//ad  chu li
/////////////////////////////
void adcl(void)            //ad chul
{	unsigned char data m;
	unsigned long data linshi1,linshi2;
	bz_ad = 0;
	ET0   = 0;         //DISABLE TIME0 INTERRUPT
	TR0   = 0;         //STOP  TIME0
    for(m=0;m<30;m++)
		{   linshi1 = adcbuf[m];
			linshi2 = adcxsh[m];
			ubat[m]= (linshi1*linshi2)/(long)ADCCH ;
		}
	TR0   = 1;      //START TIME0
	ET0   = 1;         //ENABLE TIME0 INTERRUPT
}
	
//------------------------------------------------------------------------------------
// PORT_Init
//------------------------------------------------------------------------------------


   void port_init (void)
{  OSCICN = 0x17;                       //SYSCLK 16M
   PRT0MX = 0x01;                      //enable uart i/o
   PRT0CF = 0x01;                      //tx push-pull
   PRT3CF = 0x80;                      //p3.7 push_pull
   P0MODE = 0xfc;                      // p0.2-p0.7 adc mode
   P1MODE = 0x00;                      //P1-P3          adc   mode
   P2MODE = 0x00;
   P3MODE = 0x80;
   AMX0SL = 0x20;                      //ENABLE   AMUX
   ADC0CF = 0x80;                       //SAR=16
   ADC0CN = 0xc0;                      //1100 0000
   REF0CN = 0x03;                      //vref=vdd
   PCON   = 0x00;                      //POWER
   
}
void  dog_init (void)
{
}

///////////////////////////////
//timer0 init
//////////////////////////////
void  timer0_init(void)
{
	TCON  = 0x20;                     //0001 0000 STOP TIME1
 	TMOD  = 0x01;                     //
	CKCON = 0x20;                     //T2=16M   T0,T1=16/12M
    TL0   = 0xca;                    //1ms out
	TH0   = 0xfa;
	ET0   = 1;                      // enable Timer0 interrupts
    TR0   = 1;                      //start timer0
	                    
}
//------------------------------------------------------------------------------------
// Timer2_Init
//------------------------------------------------------------------------------------
void timer2_init (int counts)
{
   T2CON  = 0x34;                         // timer2 uart timer
   T2     = 0xff30;                       // 4800bp/s
   ET2    = 1;                            // enable Timer2 interrupts
   TR2    = 1;                            // start Timer2
}
////////////////////////////////////
//
////////////////////////////////////

//------------------------------------------------------------------------------------
// Interrupt Service Routines
//------------------------------------------------------------------------------------
void  uart_init (void)
{
	SCON  = 0xf0    ;   //MODE 1
	ES    = 1       ;   //ENABLE INT
	T485  = 0       ;   //RECIEW STATE
}

//------------------------------------------------------------------------------------
// Timer2_ISR
//------------------------------------------------------------------------------------
// This routine changes the state of the LED whenever Timer2 overflows.
//
void timer0_isr (void) interrupt 1
{
   T485 = 1 ;
}

void uart_isr (void) interrupt 3
{


}









⌨️ 快捷键说明

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