標(biāo)題: 采用STC8G1K08A單片機(jī)模擬量采集電位器控制舵機(jī)同步轉(zhuǎn)動(dòng)程序分享 [打印本頁(yè)]

作者: 電子愛(ài)好者999    時(shí)間: 2023-8-23 16:14
標(biāo)題: 采用STC8G1K08A單片機(jī)模擬量采集電位器控制舵機(jī)同步轉(zhuǎn)動(dòng)程序分享
【聲明】此程序僅用于學(xué)習(xí)與參考,引用請(qǐng)注明版權(quán)和作者信息!
*********************************************************************


*********************************************************************/
#include "STC8G1K08A.h"
#include <intrins.H>
#define uchar unsigned char //宏定義字符型變量
#define uint  unsigned int        //宏定義整型變量

#define ADC_POWER   0x80            //ADC 電源控制位
#define ADC_FLAG    0x10            //ADC 轉(zhuǎn)換結(jié)束標(biāo)志位
#define ADC_START   0x08            //ADC 開(kāi)始轉(zhuǎn)換控制位
#define ADC_SPEEDLL 0x00            //210 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
#define ADC_SPEEDL  0x20            //420 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
#define ADC_SPEEDH  0x40            //630 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
#define ADC_SPEEDHH 0x60            //840 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
/********************************************************************
                                        初始定義
*********************************************************************/
uint tcnt=0;
uint sec=0;
uint dat=0;
uint dat1=0;
uint dat2=0;
/********************************************************************
                                        I/O定義
*********************************************************************/
sbit PWM1=P3^2; //PWM輸出端
sbit PWM2=P3^3; //PWM輸出端

uchar CLK=0;//脈沖計(jì)數(shù)
/********************************************************************
                                定時(shí)器T0初始化
*********************************************************************/
void timer0_init()
{
AUXR &= 0x7F;                //定時(shí)器時(shí)鐘12T模式       
TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
TMOD |= 0x02;                //設(shè)置定時(shí)器模式       
//TL0 = 0x9D;                //設(shè)置定時(shí)初始值
//TH0 = 0x9D;                //設(shè)置定時(shí)重載值
        TL0 = 0xF6;                //設(shè)置定時(shí)初始值
        TH0 = 0xF6;                //設(shè)置定時(shí)重載值
TR0=1; //開(kāi)始定時(shí)
ET0=1;
EA=1;
}
void InitADC()
{
ADC_RES = 0;                   //AD數(shù)據(jù)寄存器清空
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打開(kāi)AD電源,轉(zhuǎn)換周期210
_nop_();                        //延時(shí)一個(gè)機(jī)器周期
_nop_();
_nop_();                        //延時(shí)一個(gè)機(jī)器周期
}
/********************************************************************
                                        主函數(shù)
*********************************************************************/
void main()
{
P3M0 = 0x0c; P3M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x10;
InitADC();           //AD初始化
ADCCFG = 0x0f;                              //設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16/16
ADC_CONTR = 0x80;                           //使能ADC模塊
timer0_init();
while(1)
{
ADC_CONTR |= 0x44;                      //啟動(dòng)AD轉(zhuǎn)換 選擇P5.4口
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20));            //查詢ADC完成標(biāo)志
ADC_CONTR &= ~0x20;                     //清完成標(biāo)志
dat = ADC_RES;                           //讀取ADC結(jié)果高8位
//dat1=ADC_RESL;       
dat1=ADC_RES/2.5;  
//if(dat1<=1){dat1=1;}       
if(dat1>=100){dat1=100;}
dat2=dat1+100;
}

}

/********************************************************************
                                                定時(shí)器T0中斷服務(wù)函數(shù)
*********************************************************************/
void t0(void) interrupt 1 using 0 //定時(shí)中斷服務(wù)函數(shù)
{
tcnt++; //每過(guò)250ust tcnt 加一
if(tcnt==1000) //數(shù)值越大閃爍越慢 數(shù)值越小閃爍越快
{
tcnt=0;
P30=!P30;       
}       
sec++;
if(sec==100){PWM1=0;}
if(sec==dat2){PWM2=0;}
if(sec==2000){PWM1=1;PWM2=1;sec=0;}

}
//}

/********************************************************************
                                                結(jié)束
*********************************************************************/

接線圖.JPG (287.49 KB, 下載次數(shù): 99)

接線圖.JPG

STC8G1K08A PWM輸出控制舵機(jī) 模擬量調(diào)節(jié).rar

285.74 KB, 下載次數(shù): 38, 下載積分: 黑幣 -5






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1