SRTP源代码与硬件框架图 粉尘检测仪

来源:互联网 发布:笔记本如何卸载软件 编辑:程序博客网 时间:2024/04/28 02:31

前面有些代码找不到了。。。 

void Timer0Configuration(void);   //设置定时器0
void Port_Init (void);  // 端口初始化
void UART0_Init (void); // 串口通信初始化
void ADC0_Init (void); //ADC0寄存器初始化,输入为AIN0.0,输出为TX0和RX0
void PCA0_Init (void);         //PCA0寄存器初始化,输出为CEX0,PWM
void Delay(int);
void Interrupts_Init(void); //中断设置

void main(void)
{
PCA0MD &= ~0x40;       //关闭看门狗定时器

    Oscillator_Init();
Timer0Configuration();
Port_Init();
UART0_Init();              
ADC0_Init(); 
PCA0_Init(); 
Interrupts_Init();

ADC0MD = 0x83;    //开始连续转换    
EA=1; //中断开启

while(1)
    {
if(Byte=='$')
TI0=1;

    }
}

void IN_OUT_PUT() interrupt 4
{
 if (RI0 == 1)
   {
      if( UART_Buffer_Size == 0)  {      
         UART_Input_First = 0;    }

      RI0 = 0;                           

      Byte = SBUF0;                     

      if (UART_Buffer_Size < UART_BUFFERSIZE)
      {
         UART_Buffer[UART_Input_First] = Byte; 

         UART_Buffer_Size++;            

         UART_Input_First++;           
      }
     
   }

   if (TI0 == 1)                  
   {
      TI0 = 0;                          
      if (UART_Buffer_Size != 0)        
      {
         if ( UART_Buffer_Size == UART_Input_First ) {
              UART_Output_First = 0;  }

         Byte = UART_Buffer[UART_Output_First];

if(UART_Buffer_Size==6)
{

Byte='$';
}

 else if(UART_Buffer_Size==5)
 {
Byte=mV/1000+48;
}
else if(UART_Buffer_Size==4)
{

Byte=(mV/100)%10+48;
}
else if(UART_Buffer_Size==3)
{
Byte=(mV/10)%10+48;


}
else if(UART_Buffer_Size==2)
{
Byte=mV%10+48;
}



         SBUF0 = Byte;                  



         UART_Output_First++;          

         UART_Buffer_Size--; 

      }
 
   }


}


void ADC0_ISR (void) interrupt 10
{
   while(!AD0INT);                     // Wait till conversion complete
   AD0INT = 0;                         // Clear ADC0 conversion complete flag


   // Copy the output value of the ADC
   rawValue.Byte[Byte3] = 0x00;
   rawValue.Byte[Byte2] = (unsigned char)ADC0H;
   rawValue.Byte[Byte1] = (unsigned char)ADC0M;
   rawValue.Byte[Byte0] = (unsigned char)ADC0L;


   mV = rawValue.result / 34;      




}






void Oscillator_Init ()
{
   OSCICN = 0x83;                      // 使内部可编程振荡器频率最低,禁止分频
   CLKSEL = 0x00;                      // 选择内部振荡器                                   
   RSTSRC = 0x04;                      // RSTSRC中的PORSF位=1,使用VDD监视器作为复位源
}


void Timer0Configuration()
{


   TH0 = 0xEC;          
   TL0 = 0x0F;           //60431
   TMOD = 0x01;                        // 选择16位定时模式(方式1)
   CKCON = 0x02;                       // 选择使用分频时钟 = 系统时钟 / 48 = 510417Hz
    //65535 + 1 - 60431 = 5105
//5105 * 1 / 510417 = 10  (ms)
   ET0 = 1;                            // 允许TF0标志位的中断请求
   TCON = 0x10;                        // 打开定时器0


}


void Port_Init ()
{


XBR0 = 0x01;                     // UART TX0, RX0 连到端口 P0.4(引脚17) 和 P0.5(引脚18)  
XBR1 = 0x41;                    // 交叉开关使能,弱上拉使能,CEX0连到端口P0.0(引脚13)
P0MDOUT |= 0x11;                // TX0 (P0.4)和CEX0(P0.0)为推挽方式 ,推挽方式可以产生高低电平,RX(P0.5)为漏极开路
//或为0xD1
}


void UART0_Init ()
{
SCON0 = 0x10;             //选择8位波特率可编程uart
if (SYSCLK/BAUDRATE/2/256 < 1) {
TH1 = 256-(SYSCLK/BAUDRATE/2);
CKCON &= ~0x0B; 
CKCON |= 0x08; // T1M = 1; SCA1:0 = xx
}  
else if (SYSCLK/BAUDRATE/2/256 < 4) { 
TH1 = 256-(SYSCLK/BAUDRATE/2/4); 
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01 
CKCON |= 0x01; 
}
else if (SYSCLK/BAUDRATE/2/256 < 12) {
TH1 = 256-(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
    } 
else if (SYSCLK/BAUDRATE/2/256 < 48) {
TH1 = 256-(SYSCLK/BAUDRATE/2/48);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
CKCON |= 0x02;
}
else {
while (1); // Error. Unsupported baud rate
}
TL1 = TH1; // Init Timer1
TMOD &= ~0xf0; // TMOD: timer1 8位自动重装
TMOD |= 0x20;
TR1 = 1; // 启动 Timer1
RI0 =0;
IP |= 0x10;
ES0 = 1;
}




void ADC0_Init ()
{
    ADC0CN    = 0x00;
    ADC0MD    = 0x80;
    ADC0CLK   = 0x09;
    ADC0DECL  = 0x79; //????
    ADC0MUX   = 0x08;
}


void PCA0_Init ()
{
    PCA0CN    = 0x40;
    PCA0MD    &= ~0x40;
    PCA0MD    = 0x08;
    PCA0CPM0  = 0xC2;
    PCA0CPL0  = 0xCE;
    PCA0CPH0  = 0xF7;
}


void Interrupts_Init()
{
   
    IP        = 0x10;
    EIE1      = 0x08;
    IE        = 0x10;
}




void Delay(int i)                 // 延迟函数
{
int j;
for(j=0; j<i; j++);
}




0 0
原创粉丝点击