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

📄 datest.c

📁 C8051控制DA void OSCILLATOR_Init (void) void PORT_Init (void) void Delay (int) void init_da (vo
💻 C
字号:
#include <c8051f340.h>                 // SFR declarations

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

//sfr16 TMR2RL   = 0xca;                 // Timer2 reload value
//sfr16 TMR2     = 0xcc;                 // Timer2 counter

//-----------------------------------------------------------------------------
// Global Constants
//-----------------------------------------------------------------------------

//#define SYSCLK       12000000 / 8      // SYSCLK frequency in Hz

//#define BLINK_RATE   10                // Timer2 Interrupts per second

sbit P1_0 = P0^0;//cs
sbit P1_1 = P0^1;//                     // LED='1' means ON
sbit P1_2 = P0^2;//data
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------

void OSCILLATOR_Init (void);
void PORT_Init (void);
void Delay (int);
void init_da (void);
void da_conv();
//void Timer2_Init (int counts);
//void Timer2_ISR (void);

//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------
void main (void) 
{  unsigned int mm;
   long int m,n,temp=0;
   
   PCA0MD &= ~0x40;                         // WDTE = 0 (clear watchdog timer 
                                          // enable)
   mm=24;
   n=0x00001111;
   m=n;
   OSCILLATOR_Init ();                      // Initialize system clock 
   PORT_Init (); 
   init_da ();                           // Initialize crossbar and GPIO

   
   //Timer2_Init (SYSCLK / 12 / BLINK_RATE);  // Init Timer2 to generate 
                                            // interrupts at a 10Hz rate.

   //EA = 1;									// Enable global interrupts

   while (1)
{
    if(mm!=0)   	
	{
	  P1_0=0;
	  P1_1=1;

	  temp=m>>(mm-1);
	  temp=temp&0x00000001;
	  if(temp==0)P1_2=0;
	  else P1_2=1;
	  	  	 
	  Delay(1);
	  P1_1=0;
	  Delay(1);
	  mm--;
	  m=n;
     }
	 else 
	   {
	     init_da();
		 Delay(5); 
		 mm=24;
	    }                          // Spin forever
}
}
//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// OSCILLATOR_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// This function initializes the system clock to (12 Mhz / 8)
//
//-----------------------------------------------------------------------------
void OSCILLATOR_Init (void)
{
   OSCICN = 0x83;                      // Configure internal oscillator for
                                       // its lowest frequency
}

//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// This function configures the crossbar and GPIO ports.
//
// P2.2   digital   push-pull     LED1
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
   XBR0     = 0x00;                    // No digital peripherals selected
   XBR1     = 0x40;                    // Enable crossbar and weak pull-ups
   P2MDOUT |= 0x04;                    // Enable LED as a push-pull output
}
void Delay(int count)
{
    int i,j;
	  for (i=0;i<count;i++)
	    for(j=0;j<120;j++)
		;
}
void init_da(void)
{
    P1_0=1;
	P1_1=0;
	P1_2=0;
}
//-----------------------------------------------------------------------------
// Timer2_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 
//   1)  int counts - calculated Timer overflow rate
//                    range is postive range of integer: 0 to 32767
//
// Configure Timer2 to 16-bit auto-reload and generate an interrupt at 
// interval specified by <counts> using SYSCLK/48 as its time base.
//
//-----------------------------------------------------------------------------
//void Timer2_Init (int counts)
//{
//   TMR2CN  = 0x00;                     // Stop Timer2; Clear TF2;
                                       // Use SYSCLK/12 as timebase
//   CKCON  &= ~0x60;                    // Timer2 clocked based on T2XCLK;

//   TMR2RL  = -counts;                  // Init reload values
//   TMR2    = 0xffff;                   // Set to reload immediately
//   ET2     = 1;                        // Enable Timer2 interrupts
//   TR2     = 1;                        // Start Timer2
//}

//-----------------------------------------------------------------------------
// Interrupt Service Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Timer2_ISR
//-----------------------------------------------------------------------------
//
// This routine changes the state of the LED whenever Timer2 overflows.
//
//-----------------------------------------------------------------------------
//void Timer2_ISR (void) interrupt 5
//{
//   TF2H = 0;                           // Clear Timer2 interrupt flag
//   LED1 = ~LED1;                       // Change state of LED
//}


//-----------------------------------------------------------------------------
// End Of File
//--------------------------------

⌨️ 快捷键说明

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