久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PIC單片機(jī)PWM電機(jī)速度控制源碼

 共同成長(zhǎng)888 2020-02-08

單片機(jī)源程序如下:

#include

#include "16x2LCDDriver.h"

unsigned char LCDBuffer_0[]={"STOP 00% DIR +"};

unsigned char LCDBuffer_1[]={"Get Spd 0000 RPM"};

struct TMR1COUNTER_STRUCT

{

  unsigned char HighCounter;

  unsigned int LowCounter;        

  unsigned char ChangeFlag;

};

struct TMR1COUNTER_STRUCT MyTMR1,MyTMR3,GetTMR1,GetTMR3;

void OSCillator_Initize(void)

{

  OSCCON=0x70;//選擇內(nèi)部8MHz的主振蕩器

  OSCTUNE=0x40;//使能4xPLL--->Fosc=32MHz

}

void PIC_PortDir_Initize(void)

{

  ADCON1=0x0F;//RA和RE端口全為數(shù)字IO口

  TRISD=0x00;//RD端口置輸出方向

  TRISE=0x00;//RE端口置輸出方向

  TRISCbits.TRISC1=0;

  TRISCbits.TRISC2=0;

  TRISCbits.TRISC3=0;

}

void PIC_TMR0_Initize(void)

{

  T0CONbits.TMR0ON=0;//TMR0停止工作

  T0CONbits.T08BIT=0;//選擇16位的定時(shí)/計(jì)數(shù)器

  T0CONbits.T0CS=0;//選擇內(nèi)部CLKO時(shí)鐘源作為定時(shí)

  T0CONbits.PSA=0;//選擇預(yù)分頻器

  T0CONbits.T0PS2=1;//預(yù)分頻比為1:256

  T0CONbits.T0PS1=1;

  T0CONbits.T0PS0=1;

  TMR0H=(65536-31250)/256;//先寫高字節(jié)

  TMR0L=(65536-31250)%256;//再寫低字節(jié)

  T0CONbits.TMR0ON=1;//開始定時(shí)工作  

}

void PIC_TMR1_Initize(void)

{

  //此處TMR1的預(yù)分頻比為1:1

  T1CONbits.RD16=1;//允許一次性讀寫16位

  T1CONbits.TMR1CS=1;//選擇外部時(shí)鐘源,TMR1用作外部計(jì)數(shù)

  TMR1H=0;//TMR1數(shù)據(jù)寄存器清0

  TMR1L=0;

  T1CONbits.TMR1ON=1;//允許TMR1開始工作

}

void PIC_TMR3_Initize(void)

{

  //此處TMR1的預(yù)分頻比為1:8

  T3CONbits.T3CKPS1=1;

  T3CONbits.T3CKPS0=1;

  T3CONbits.RD16=1;//允許一次性讀寫16位

  T3CONbits.TMR3CS=0;//選擇內(nèi)部時(shí)鐘源,TMR3用作內(nèi)部計(jì)數(shù)

  TMR3H=0;//TMR3數(shù)據(jù)寄存器清0

  TMR3L=0;

  T3CONbits.TMR3ON=1;//允許TMR3開始工作

}

void PIC_Interrupt_Initize(void)

{

  INTCONbits.TMR0IF=0;//TMR0溢出標(biāo)志位清0

  INTCONbits.TMR0IE=1;//TMR0溢出中斷允許

  PIR1bits.TMR1IF=0;//TMR1溢出標(biāo)志位清0

  PIE1bits.TMR1IE=1;//TMR1溢出中斷允許

  IPR1bits.TMR1IP=0;//低優(yōu)先級(jí)

  PIR2bits.TMR3IF=0;//TMR1溢出標(biāo)志位清0

  PIE2bits.TMR3IE=1;//TMR1溢出中斷允許

  IPR2bits.TMR3IP=0;//低優(yōu)先級(jí)

  INTCONbits.INT0IF=0;//清INT0中斷標(biāo)志位

  //INTCONbits.INT0IE=1;//INT0中斷允許

  INTCON2bits.RBPU=0;//允許內(nèi)部弱上拉

  INTCON2bits.INTEDG0=1;//上邊沿觸發(fā)中斷

  RCONbits.IPEN=1;//允許中斷優(yōu)先級(jí)位

  INTCONbits.GIE=1;//CPU全局中斷使能允許

  INTCONbits.PEIE=1;//CPU第二梯隊(duì)中斷使能允許

}

void PIC_CCPForPWM_Initize(void)

{

  TRISCbits.TRISC1=0;//RC1置輸出方向

  TRISCbits.TRISC2=0;//RC2置輸出方向

  LATCbits.LATC1=0;//RC1引腳輸出為0

  LATCbits.LATC2=0;//RC2引腳輸出為0

  CCP1CON=0x0F;//CCP1設(shè)置為PWM模式

  CCP2CON=0x0F;//CCP2設(shè)置為PWM模式

  T2CON=0x03;//TMR2的預(yù)分頻為1:16

  T2CONbits.TMR2ON=1;//TMR2開始工作

  PR2=249;//PWM周期為2000Hz,FOSC=32MHz

  CCPR1L=0;//PWM1的占空比為0

  CCPR2L=0;//PWM2的占空比為0          

}

unsigned char CycleFlag;

unsigned char FreqFlag;

#define RUNSTOPKEY PORTBbits.RB3

#define PWMKEY PORTBbits.RB4

#define DIRKEY PORTBbits.RB5

unsigned char MotorRunStatus;

unsigned char MotorDirection;

unsigned char MotorPWMData;

unsigned char RunStopKeyFlag;

unsigned int RunStopKeyCounter;

unsigned char DirKeyFlag;

unsigned int DirKeyCounter;

unsigned char PWMKeyFlag;

unsigned int PWMKeyCounter;

void SystemVariant_Initize(void)

{

  MotorPWMData=0;          

}

void Motor_Control(unsigned char Direction,

                   unsigned char Speed)

{

  switch(Direction)

    {

          case 0:

            CCPR1L=0;

            CCPR2L=0;

            CCPR1L=Speed;

            break;

          case 1:

            CCPR2L=0;

            CCPR1L=0;

            CCPR2L=Speed;

            break;

        }        

}

//-------------------------------------------------------------------

void PIC18F_High_isr(void);//高優(yōu)先級(jí)中斷函數(shù)聲明

#pragma code high_vector_section=0x8

void high_vector (void)

{

  _asm goto PIC18F_High_isr _endasm

}

void SystemInterruptISR(void);//低優(yōu)先級(jí)中斷函數(shù)聲明

#pragma code low_vector=0x18//低中斷優(yōu)先級(jí)

void low_interrupt(void)

{

  _asm goto SystemInterruptISR _endasm        

}

#pragma code

//-------------------------------------------------------------------

void main(void)

{

  unsigned long temp;

  unsigned char i;

  OSCillator_Initize();//CPU系統(tǒng)時(shí)鐘初始化內(nèi)部時(shí)鐘源8MHz,經(jīng)過(guò)4xPLL

  PIC_PortDir_Initize();//PIC單片機(jī)的使用到的I/O口方向初始化

  PIC_TMR0_Initize();//PIC單片機(jī)的TMR0定時(shí)器初始化為內(nèi)部定時(shí)方式

  PIC_TMR1_Initize();//PIC單片機(jī)的TMR1定時(shí)器初始化為外部計(jì)數(shù)方式

  PIC_TMR3_Initize();

  PIC_CCPForPWM_Initize();

  PIC_Interrupt_Initize();

  initize_lcd();

  while(1)

    {

          if(0==RUNSTOPKEY)//判斷啟動(dòng)按鍵是否按下

            {

                  if(0==RunStopKeyFlag)//檢測(cè)啟動(dòng)按鍵是否成功按下標(biāo)志

                    {

                          RunStopKeyCounter++;//軟件計(jì)數(shù)器,用于按鍵去抖動(dòng)

                          if(4000==RunStopKeyCounter)//按鍵去抖動(dòng)延時(shí)到

                            {

                                  RunStopKeyCounter=0;//清軟計(jì)數(shù)器為0

                                  if(0==RUNSTOPKEY)//再判斷啟動(dòng)按鍵是否真得按下

                                    {

                                          RunStopKeyFlag=1;//置啟動(dòng)按鍵成功按下標(biāo)志為1

                                          if(0==MotorRunStatus)//如果電機(jī)是處理停止?fàn)顟B(tài)

                                            {//則啟動(dòng)電機(jī)運(yùn)轉(zhuǎn)

                                                    MotorRunStatus=1;//同時(shí)置電機(jī)狀態(tài)為1                                                  

                                                LCDBuffer_0[0]='R';//LCD顯示屏上顯示"RUN"

                                          LCDBuffer_0[1]='U';

                                          LCDBuffer_0[2]='N';

                                          LCDBuffer_0[3]=' ';

                                          LCDBuffer_0[4]=' ';

                                              temp=MotorPWMData;//讀取設(shè)置電機(jī)速度的變量

                                              temp<<=1;//轉(zhuǎn)換成占空比送到LCD上顯示

                                              temp/=5;

                                              LCDBuffer_0[5]=(temp/10)+0x30;

                                              LCDBuffer_0[6]=(temp%10)+0x30;

                                              LCDBuffer_0[7]='%';

LCDBuffer_0

[1] [2] [3] [4] [5]
關(guān)鍵字:PIC單片機(jī)  PWM電機(jī)  速度控制 編輯:什么魚 引用地址:http://news./mcu/ic478293.html 本網(wǎng)站轉(zhuǎn)載的所有的文章、圖片,、音頻視頻文件等資料的版權(quán)歸版權(quán)所有人所有,,本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如果本網(wǎng)所選內(nèi)容的文章作者及編輯認(rèn)為其作品不宜公開自由傳播,,或不應(yīng)無(wú)償使用,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。

上一篇:pic單片機(jī)控制cc1101實(shí)現(xiàn)loral無(wú)線傳輸?shù)脑闯绦?/a>
下一篇:
P1C16F73單片機(jī)spwm逆變器源程序與PCB原理圖

  • 關(guān)注eeworld公眾號(hào)
    快捷獲取更多信息

  • 關(guān)注eeworld服務(wù)號(hào)
    享受更多官方福利

0

推薦閱讀

PIC單片機(jī)之定時(shí)器(TMR0)
什么是定時(shí)器?定時(shí)器顧名思義就是用來(lái)定時(shí)的,。在單片機(jī)應(yīng)用中常常用于各種各樣的定時(shí),。比如讓LED燈每隔 1S 亮一次。 這個(gè)1S 就是由定時(shí)器做到的,。指令周期 指令周期就是單片機(jī)執(zhí)行一個(gè)指令所花費(fèi)的時(shí)間,。這也是定時(shí)器定時(shí)的最小時(shí)間單位。時(shí)鐘頻率/4=指令頻率,。1/指令頻率=指令周期,。假設(shè)現(xiàn)在的時(shí)鐘是4MHZ  ,4MHz的時(shí)鐘經(jīng)過(guò)4分頻后變成了 1MHz 其周期為0.0000001s也就是1us,這個(gè)1us就是指令周期,,這1us也就是定時(shí)器定時(shí)的最小單位,。定時(shí)器與預(yù)分頻器假設(shè)在沒(méi)有預(yù)分頻器情況下。開啟定時(shí)器 每隔一個(gè)指令周期定時(shí)器就加一,。假設(shè)時(shí)鐘是4MHz  也就是每隔 1us 定時(shí)器加一,。如果有
發(fā)表于 2020-01-30
PIC單片機(jī)之定時(shí)器(TMR0)
關(guān)于PIC單片機(jī)SLEEP指令
之前一直沒(méi)有真正理解sleep指令,最近在做智能水表的產(chǎn)品的時(shí)候,,用了一款8位的單片機(jī)PIC16F690,,當(dāng)看到程序中的sleep指令時(shí)以為執(zhí)行后cpu還會(huì)工作,導(dǎo)致一些認(rèn)識(shí)上的錯(cuò)誤,在網(wǎng)上搜索了一下,,找到了一篇關(guān)于sleep的詳細(xì)說(shuō)明文章,,現(xiàn)收集下來(lái)以便以后查詢!在執(zhí)行SLEEP指令后進(jìn)入睡眠省電模式,。進(jìn)入SLEEP模式后,,主振蕩停止,如果看門狗在燒寫時(shí)打開了,,看門狗定時(shí)器將被清并保持運(yùn)行,。I/O 口,周邊模塊和內(nèi)部RAM將保持原來(lái)狀態(tài),,所以如果要求睡眠后有很低功耗,,應(yīng)該在進(jìn)入SLEEP前把IO口置為高阻抗的輸入狀態(tài),不用的模塊也要關(guān)閉,。另有些周邊模塊與主時(shí)鐘有關(guān),,如在異步模式下的USART,將不工作,。喚醒SLEEP的條件
發(fā)表于 2020-01-30
如何在ATE中集成對(duì)PIC單片機(jī)的編程燒寫功能
做ATE,,要對(duì)DUT內(nèi)部的PIC單片機(jī)進(jìn)行在線燒寫,在網(wǎng)上看到別人的一個(gè)說(shuō)法(作者 Claud Zhang),,內(nèi)容如下:---------------------------------------------------------一種簡(jiǎn)單高效低成本的Microchip MCU編程方法                                   Claud Zhang對(duì)于一些研發(fā)工程師來(lái)說(shuō),,工廠的的MCU編程有時(shí)候是個(gè)比較頭疼的問(wèn)題.在研發(fā)
發(fā)表于 2020-01-30
PIC單片機(jī)型號(hào)命名規(guī)則
PICXXXXXXXX(X)-XXX/XX12345678  1.前綴: PIC MICROCHIP 公司產(chǎn)品代號(hào),特別地:dsPIC為集成DSP功能的新型PIC單片機(jī)   2.系列號(hào):10,、12,、16、18,、24,、30、33,、32,,其中  PIC10、PIC12,、PIC16,、PIC18為8位單片機(jī)  PIC24、dsPIC30,、dsPIC33為16位單片機(jī)  PIC32為32位單片機(jī)  3.器件型號(hào)(類型):  C CMOS 電路  CR CMOS ROM  LC 小功率CMOS 電路  LCS 小功率保護(hù)  AA 1.8V  LCR 小功率CMOS ROM  LV 低電壓  F 快閃可編程存儲(chǔ)器  HC 高速CMOS
發(fā)表于 2020-01-30
PIC單片機(jī)與AM2302溫濕度傳感器通信優(yōu)化
,。 如果在系統(tǒng)時(shí)鐘很低的情況,指令周期就成為需要考慮的關(guān)鍵因素。這里拿PIC單片機(jī)舉例,,如果系統(tǒng)時(shí)鐘為1M Hz,,則它的指令周期為4微妙, (指令周期為系統(tǒng)時(shí)鐘的4倍)。 這個(gè)時(shí)候如果使用上面提到的函數(shù)調(diào)用的方法,將無(wú)法得到正確的數(shù)據(jù),。 因?yàn)榧由虾瘮?shù)調(diào)用的開銷,,當(dāng)am2302_read_byte()進(jìn)行電平判斷的時(shí)候, 很可能已經(jīng)錯(cuò)過(guò)了起始電平,,導(dǎo)致解析不正確,。另外當(dāng)判斷是數(shù)據(jù)位1的時(shí)候,    data += (0x80U >> i);    while (1 == data_port)    { 
發(fā)表于 2020-01-29
使用PIC單片機(jī)連接旋轉(zhuǎn)編碼器的方法
旋轉(zhuǎn)編碼器(Rotary Encoder)是一種幫助用戶與系統(tǒng)交互的輸入設(shè)備,。它看起來(lái)更像是一個(gè)無(wú)線電電位器,,但它輸出一系列脈沖,使其應(yīng)用獨(dú)特,。當(dāng)旋轉(zhuǎn)編碼器的旋鈕時(shí),,它以小步進(jìn)的形式旋轉(zhuǎn),這有助于它用于步進(jìn)/伺服電機(jī)控制,、導(dǎo)航菜單序列和增加/減少數(shù)字的值等等。在本篇文章中,,我們將了解不同類型的旋轉(zhuǎn)編碼器及其工作原理,。我們還將它連接到PIC單片機(jī)PIC16F877A,并通過(guò)旋轉(zhuǎn)編碼器控制整數(shù)值,,然后在LCD液晶屏1602顯示其值,。在本文結(jié)束時(shí),您將熟悉為項(xiàng)目使用旋轉(zhuǎn)編碼器,。讓我們開始吧…旋轉(zhuǎn)編碼器及其類型旋轉(zhuǎn)編碼器通常稱為軸編碼器,。它是一種機(jī)電換能器,意味著它將機(jī)械運(yùn)動(dòng)轉(zhuǎn)換為電子脈沖,,或者換句話說(shuō),,它將角位置或運(yùn)動(dòng)或軸位置轉(zhuǎn)換為
發(fā)表于 2020-01-29
使用PIC單片機(jī)連接旋轉(zhuǎn)編碼器的方法

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多