久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

STC12C5A60S2各模塊的應(yīng)用分享大家

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月01日   【字體:

/*****************串口應(yīng)用 ******************/
///////////////////串口一
//////////////                         
#include"12c5a60s2.h"
#include"uart.h"
unsigned   char   buf[3],g;
void   initUart()
{
 EA=1;   
 BRT=0XFD;  //獨立波特率發(fā)生器9600 
 AUXR=0X11;  //啟動獨立波特率發(fā)生器,12分頻
//  TMOD=0X20;  //用定時器1做波特率發(fā)生器
// TH1=0XFD;
// TL1=0XFD;
// TR1=1;
 REN=1;   
 SM1=1;
 ES=1;
 g=0;
}
void   sendDate(unsigned   char date)
{
 SBUF=date;
 while(!TI);
 TI=0;
}
void  work()
{
 sendDate(buf[0]);
 sendDate(buf[1]);
}
void   res()interrupt  4
{
 buf[g++]=SBUF;
 if(g>=2)
 {
  g=0;
  work();
 }
 while(!RI);
 RI=0;
}
 ////////////////////串口二////////////////
#include<12c5a60s2.h>
#include"uart2.h"
#define   S2TI  0X02    //不能位尋址
#define   S2RI  0X01    //不能位尋址
unsigned  char   shuzhi;
void   initUART2()
{
 BRT=0XFD; //定初值 9600
 AUXR=0X11; //使用波特率獨立發(fā)生器 12分頻  9600
// AUXR=0X19; //使用波特率獨立發(fā)生器 1分頻  19200
 EA=1;
 IE2=0X01;   //ES2=1;
 S2CON=0X50;//S2REN=1;S2SM1=1;
}
void   senddate(unsigned  char  date)
{
 S2BUF=date;       //判斷是否是一
 if(S2CON&S2TI)      //清零
 S2CON&=~S2TI; 
}
void  uart2r()interrupt  8
{
 if(S2CON&S2RI)    //判斷是否是一
 {
  S2CON&=~S2RI;   //清零
     shuzhi=S2BUF;
  senddate(0x40);
  
  }

 /******************AD轉(zhuǎn)換*************************/ 
 #include"12c5a60s2.h"
#include"12c5aad.h"
#include<intrins.h>
//寄存器地址聲明 ,有12c5a60s2  頭文件可省略
//sfr  ADC_CONTR  =0XBC;
//sfr  ADC_RES  =0XBD;
//sfr  ADC_ERSL  =0XBE;
//sfr  P1ASF =0X9D;
//宏定義
#define ADC_POWER  0X80    // ad電源控制位 
#define ADC_FLAG    0x10            //ad轉(zhuǎn)換結(jié)束標(biāo)志位
#define ADC_START   0x08            //ad轉(zhuǎn)換開始控制位
#define ADC_SPEEDLL 0x00            //540 轉(zhuǎn)換速率
#define ADC_SPEEDL  0x20            //360 轉(zhuǎn)換速率
#define ADC_SPEEDH  0x40            //180 轉(zhuǎn)換速率
#define ADC_SPEEDHH 0x60            //90 轉(zhuǎn)換速率

//ad轉(zhuǎn)換延時函數(shù)
void   delayad(unsigned   int  z)
{
 unsigned   int   x,y;
 for(x=5000;x>0;x--)
  for(y=z;y>0;y--);
 
}  
//ad初始化函數(shù)
void   initad()
{
 P1ASF=0XFF;//設(shè)置P1口為ad轉(zhuǎn)換模式
 ADC_RES=0;//ad轉(zhuǎn)換結(jié)果寄存器清零
 ADC_CONTR=ADC_POWER|ADC_SPEEDLL; //打開ad轉(zhuǎn)換電源  ,最慢頻率
 delayad(2);                      //延時待電源穩(wěn)定提高精確性
}
unsigned   char  getAD(unsigned  char  ch)  //ch通道選擇
{
  ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch ;
  _nop_(); _nop_();_nop_();_nop_();
  while(!(ADC_CONTR&ADC_FLAG));     //ad轉(zhuǎn)換完成 FALG 為1
  ADC_CONTR&=~ADC_FLAG;    //FALG置置零
  return  ADC_RES;  
}
 /********************PCA/PWM*****************/
 /////////////////////中斷模式/////////////////////
#include<12c5a60s2.h>
#include"pcaint.h"
unsigned  char miao;
void   initPCAint(void)
{
 CCON=0;   
 CL=0;
 CH=0;
 CMOD=0X00; //禁止CF中斷
 CCAPM0=0X11;// (CAPN0 負捕獲,CAPP0 正捕獲)本模塊負捕獲
 CCAPM1=0X21; // 模塊一正捕獲
 CR=1;  //開計數(shù)列陣
 EA=1;  //開總中斷
}
void   pca()interrupt   7
{
 if(CCF0==1)
 {
  CCF0=0;  //清零模塊中斷標(biāo)志位
  miao++;
 }
 if(CCF1==1)
 {
  CCF1=0;  //清零模塊中斷標(biāo)志位
  miao--;
 }
}
 //////////////////////////定時器模式////////////////////
#include<12c5a60s2.h>
#include"pcatime.h"
unsigned   int value;    //數(shù)組賦值
unsigned  char  ptime;
//ptime=0xb402; 50ms定時 0x2400 10ms
void   initPCATime()
{
 CCON=0X00;    //標(biāo)志位清零 
 CL=0;     //pca L列陣清零
 CH=0;     //PCA H列陣清零
 CMOD=0X00;    //選擇時鐘模式
 CCAP1L=value;    //先賦值高位
 CCAP1H=value>>8;  //賦值
 CCAPM1=0X49;  //允許比較器ECOM1,MAT1、ECCF1置位允許CCF1中斷
 CR=1;     //允許列陣
 EA=1;     //開總中斷
}
void   pcatime()interrupt  7//兩個PCA模塊都是中斷7
{
 unsigned   int  i;
  CL=0;     //清零不然是溢出時鐘,定時無效
  CH=0;     //清零不然是溢出時鐘,定時無效
  CCF1=0;
  CCAP1L=value;
  CCAP1H=value>>8;   
  i++;
  if(i>=20)
  {
   i=0;
   ptime++;
  }

}
///////////////////////PWM模式//////////////////////
#include"12c5a60s2.h"
#include"12c5apwm.h"
void   initPWM(void )
{
 CCON=0;       //關(guān)閉PCA計數(shù)及標(biāo)志位清零
 CL=0;      // 清空pca計數(shù)低位
 CH=0;      // 清空pca計數(shù)高位
 CMOD=0X08;      // 用系統(tǒng)時鐘 不分頻
// CCAP0H=CCAP0L=0x01; // 模塊0復(fù)初值
 CCAPM0=0X42;     //允許模塊0比較器工作,脈寬調(diào)制模式
// CCAP1H=CCAP1L=0X01; //模塊1復(fù)初值
 CCAPM1=0X42;  //允許模塊1比較器工作,脈寬調(diào)制模式
 CR=1;    //啟動pca計數(shù)
}
void  tiaoj(unsigned   char pwmH,unsigned  char pwmL)
{
  CCAP0H=CCAP0L=pwmH;// 模塊0復(fù)值
  CCAP1H=CCAP1L=pwmL;// 模塊1復(fù)值
}
 /**********************EEPROM*************************/
#include<12c5a60s2.h>
#include<intrins.h>
#include"eeporm.h"
#define   Rdeeprom 0x01
#define   Wreeprom 0x02
#define   ERSeeprom 0x03
#define   WTime     0x01  // 0x02  0x03 0x00 
sfr ISP_DATA=0Xc2;
sfr ISP_ADDRH=0Xc3;
sfr ISP_ADDRL=0Xc4;
sfr ISP_CMD=0Xc5;
sfr ISP_TRIG=0Xc6;
sfr ISP_CONTR=0Xc7;
unsigned  char  miao,miao2,miao3;
bit  int0flag;
void  ISP_Open(void)
{
 EA=0;      //關(guān)中斷
 ISP_CONTR=ISP_CONTR&0X18; //清零
 ISP_CONTR=ISP_CONTR|WTime; //等待時間
 ISP_CONTR=ISP_CONTR|0x80; //使能ISP
}
void  ISP_Close(void)
{
 ISP_CONTR=ISP_CONTR&0X7F;  //停止ISP使能
 ISP_TRIG=0X00;      //命令觸發(fā)寄存器清零
 EA=1;        //開中斷
}
void  ISP_Goon(void)
{          //打開ISP
 ISP_Open();
 ISP_TRIG=0x5a;     //寫觸發(fā)命令
 ISP_TRIG=0xa5;     //寫觸發(fā)命令
 _nop_();
//等待
}
void   byte_write(unsigned  int add,unsigned  char dat)  //寫某地址數(shù)據(jù)
{
 ISP_ADDRH=(unsigned   char)(add>>8);    //地址高位
 ISP_ADDRL=(unsigned   char)(add&0x00ff);   //地址低位
 ISP_CMD=ISP_CMD&0XF8;        //命令模式復(fù)位
 ISP_CMD=ISP_CMD|Wreeprom;       //寫命令
 ISP_DATA=dat;          //讀寫寄存器賦值
 ISP_Goon();           //打開、觸發(fā)
 ISP_Close();
 _nop_();          //關(guān)閉
}
void   sector(unsigned  int add)
{
 ISP_ADDRH=(unsigned   char)(add>>8);    //地址高位
 ISP_ADDRL=0x00;   //地址低位
 ISP_CMD=ISP_CMD&0XF8;        //命令模式復(fù)位
 ISP_CMD=ISP_CMD|ERSeeprom;       //刪命令
 ISP_Goon();           //打開、觸發(fā)
 ISP_Close();
 _nop_(); 
}
unsigned   char byte_read(unsigned  int  add)
{
 ISP_ADDRH=(unsigned   char)(add>>8);    //地址高位
 ISP_ADDRL=(unsigned   char)(add&0x00ff);   //地址低位
 ISP_CMD=ISP_CMD&0XF8;        //命令模式復(fù)位
 ISP_CMD=ISP_CMD|Rdeeprom;       //讀命令
 ISP_Goon();           //打開、觸發(fā)
 ISP_Close();
 _nop_();
 return (ISP_DATA);
}
void   initc()
{
 IT0=1;
 EX0=1;
 EA=1;
}
void    int0()interrupt 0
{  
 if(int0flag==1)
 {      
  EA=0;
  sector(0x00ff);   //0000h-03ffh
  byte_write(0X00ff,miao3);
  EA=1;     
 } 
}
/////////////////////////////////////////////////////////
寫的一般,不足之處還望包涵,均測試通過,歡迎提好的建議。
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 欧美精品在线播放 | 国产 欧美 日韩 一区 | 精品国产91乱码一区二区三区 | 日日夜夜免费精品视频 | 91精品国产一区二区三区 | 欧美精品国产精品 | 91天堂网| 精品一区二区三区91 | 亚洲国产精品久久 | 久色网| 中文字幕一区二区三区乱码图片 | 天天天操 | 成人一级片在线观看 | 国产区在线免费观看 | 久久国产精品一区二区三区 | 成人在线精品 | av片在线观看 | 国产精品精品视频一区二区三区 | 国产一卡二卡三卡 | 国产精品不卡一区 | 国产成人精品免费视频大全最热 | 最新国产精品精品视频 | 日韩国产中文字幕 | 黄色一级在线播放 | 91一区二区在线观看 | a黄视频| 国产精品高潮呻吟久久 | 男女免费视频网站 | 日本三级在线网站 | 一区二区三区视频免费看 | 91久久国产综合久久 | 欧美日韩在线观看一区二区三区 | 久久久久久久一区二区三区 | 欧美一级久久 | 亚洲a视频 | 日本午夜一区二区三区 | 一级免费看片 | 精品久久久久久久久久久久久久 | 成人做爰999 | 18gay男同69亚洲网站 | 亚洲色欲色欲www |