久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STC8G1K08單片機(jī)驅(qū)動(dòng)的HM2503控制直流電機(jī)程序原理圖PCB文件
[打印本頁]
作者:
libinstm32
時(shí)間:
2021-9-9 11:26
標(biāo)題:
STC8G1K08單片機(jī)驅(qū)動(dòng)的HM2503控制直流電機(jī)程序原理圖PCB文件
1.使用國產(chǎn)STC81K小芯片的工程,可供相關(guān)學(xué)習(xí)研究的人員學(xué)習(xí)交流;
2.使用國產(chǎn)直流電機(jī)正反轉(zhuǎn)控制芯片,控制方案簡單,體積小,電流在3A左右;
3.調(diào)速使用外接撥碼開關(guān)設(shè)置速度;
4.本工程中有,原理圖,PCB圖,原代碼,設(shè)置速度的表 HM2503的PDFU資料;
5.全部資料,在壓縮包中;
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png
(58.5 KB, 下載次數(shù): 55)
下載附件
2021-9-9 16:12 上傳
單片機(jī)源程序如下:
/************* 功能說明 *********************************************
1.檢測撥碼開關(guān)狀態(tài),以確定IO口輸出方波的時(shí)間長短
程序工作流:
1.上電IO產(chǎn)生方波,
2.檢測撥碼開關(guān)狀態(tài),自動(dòng)調(diào)節(jié)方波時(shí)間,最長1000MS為固定;調(diào)節(jié)范圍:1ms--119ms
適用:用于ATQ229繼電器老化
*************************************************************************/
//#include "reg51.h" //包含此頭文件后,里面聲明的寄存器不需要再手動(dòng)輸入,避免重復(fù)定義
#include "STC8GXX.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define Baudrate1 115200UL
#define UART1_BUF_LENGTH 12
unsigned char TX1_Cnt; //發(fā)送計(jì)數(shù)
unsigned char RX1_Cnt; //接收計(jì)數(shù)
unsigned long MAIN_Fosc=11059200; //22118400L //定義主時(shí)鐘(精確計(jì)算115200波特率)
bit B_TX1_Busy; //發(fā)送忙標(biāo)志
bit sign_usart1_receive12char=0; //串口1接收標(biāo)志量
sbit DIP1_port =P1^7; //撥碼開關(guān)8個(gè)位
sbit DIP2_port =P5^5;
sbit DIP3_port =P3^7;
sbit DIP4_port =P3^6;
sbit DIP5_port =P3^5;
sbit DIP6_port =P3^4;
sbit DIP7_port =P3^3;
sbit DIP8_port =P3^2;
sbit C_BI_port =P1^0; //方波B向口
sbit C_FI_port =P1^1; //方波F向口
#define Timer0_Reload (MAIN_Fosc / 1000) //Timer 0 中斷頻率, 1000次/秒
unsigned char ch=0; //1----16 CHANNEL1 2:CHANEL16
unsigned char RX1_Buffer[UART1_BUF_LENGTH],r=0; //接收緩沖
unsigned char DIP_8SW_H=0,DIP_8SW_L=0,TH_MS_VAL=0;
unsigned char Xms_cnt=100;
unsigned char DELAY_CNT=5,delay_cnt=0; //B向 F向關(guān)閉后延時(shí)MS數(shù) 固定
//函數(shù)說明
void Timer0_init(void);
void delay_X100MS(unsigned char ts); //@11.0592MHz
void UART1_config(u8 brt); //選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
void PrintString1(u8 *puts);
void sendData(unsigned char dat);
void do_task(unsigned char x);
void execute_cmd(void);
void scan_dip_8SW();
//=================================================================================================================
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: g_delay(unsigned int times)
// 入口參數(shù):
// 函數(shù)功能: 幾個(gè)100MS時(shí)
//--------------------------------------------------------------------------------------------------
void delay_X100MS(unsigned char ts) //@11.0592MHz
{
unsigned char i, j, k;
for(;ts>0;ts--)
{
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱:void Delay10ms() //@11.0592MHz
// 入口參數(shù):
// 函數(shù)功能: 幾個(gè)100MS時(shí)
//--------------------------------------------------------------------------------------------------
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱:void Delay1ms() //@11.0592MHz
// 入口參數(shù):
// 函數(shù)功能: 幾個(gè)100MS時(shí)
//--------------------------------------------------------------------------------------------------
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
i = 15;
j = 90;
do
{
while (--j);
} while (--i);
}
//========================================================================
// 函數(shù): void scan_dip_8SW()
// 描述: 串口1發(fā)送字節(jié)函數(shù)。
// 參數(shù): dat: 字節(jié)
// 返回: none.
// 版本:
// 日期:
// 備注:
//========================================================================
void scan_dip_8SW() //檢測撥碼開關(guān)的值
{
unsigned char w_h, w_l;
DIP_8SW_H=0,DIP_8SW_L=0;
if(DIP1_port==0) w_l|=0x01;
else w_l&=0x0E;
if(DIP2_port==0) w_l|=0x02;
else w_l&=0x0D;
if(DIP3_port==0) w_l|=0x04;
else w_l&=0x0B;
if(DIP4_port==0) w_l|=0x08;
else w_l&=0x07;
if(DIP5_port==0) w_h|=0x01;
else w_h&=0x0E;
if(DIP6_port==0) w_h|=0x02;
else w_h&=0x0D;
if(DIP7_port==0) w_h|=0x04;
else w_h&=0x0B;
if(DIP8_port==0) w_h|=0x08;
else w_h&=0x07;
if(DIP_8SW_H==0xff &&DIP_8SW_L==0xff) //1秒鐘方波
{
TH_MS_VAL=1000;//1000MS
}
else //1MS到119MS方波
{
DIP_8SW_H=w_h&0x0F; //ms數(shù)的十位:0--11
if(DIP_8SW_H>11) DIP_8SW_H=11;
DIP_8SW_L=w_l&0x0f; //ms數(shù)的個(gè)位:0--9
if(DIP_8SW_L>9) DIP_8SW_L=9;
TH_MS_VAL=DIP_8SW_H*10+DIP_8SW_L; //1--119MS
}
//sendData(10*DIP_8SW_H); //通過串口檢測設(shè)置值
//sendData(DIP_8SW_L);
}
//========================================================================
// 函數(shù): void sendData(unsigned char dat)
// 描述: 串口1發(fā)送字節(jié)函數(shù)。
// 參數(shù): dat: 字節(jié)
// 返回: none.
// 版本:
// 日期:
// 備注:
//========================================================================
void sendData(unsigned char dat)
{
while (B_TX1_Busy); //等待前面的數(shù)據(jù)發(fā)送完成
B_TX1_Busy= 1;
SBUF = dat;//ACC; //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
}
//========================================================================
// 函數(shù): void execute_cmd(void)
// 描述: 執(zhí)行通道切換 返回OK字符
// 參數(shù): none.
// 返回: none.
// 版本:
// 日期:
// 備注:
//========================================================================
void execute_cmd(void)
{
if(sign_usart1_receive12char==1) //
{
//do_task(ch);ch=0XFF; //切到通道x //通道x的LED亮 //應(yīng)答OK字符 //清除標(biāo)志
}
scan_dip_8SW(); //檢測撥碼開關(guān)的狀態(tài)
}
//========================================================================
// 函數(shù): void PrintString1(u8 *puts)
// 描述: 串口1發(fā)送字符串函數(shù)。
// 參數(shù): puts: 字符串指針.
// 返回: none.
// 版本:
// 日期:
// 備注:
//========================================================================
void PrintString1(u8 *puts)
{
for (; *puts != 0; puts++) //遇到停止符0結(jié)束
{
SBUF = *puts;
B_TX1_Busy = 1;
while(B_TX1_Busy);
}
}
//========================================================================
// 函數(shù): void UART1_config(u8 brt)
// 描述: UART1初始化函數(shù)。
// 參數(shù): brt: 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
// 返回: none.
// 版本:
// 日期:
// 備注:
//========================================================================
void UART1_config(u8 brt)
{
/*********** 波特率使用定時(shí)器1 *****************/
TR1 = 0;
AUXR &= ~0x01; //S1 BRT Use Timer1;
AUXR |= (1<<6); //Timer1 set as 1T mode
TMOD &= ~(1<<6); //Timer1 set As Timer
TMOD &= ~0x30; //Timer1_16bitAutoReload;
//TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);
//TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);
TL1 = 0xE8; //
TH1 = 0xFF; //
ET1 = 0; //禁止中斷
//INT_CLKO &= ~0x02; //不輸出時(shí)鐘
INTCLKO&= ~0x02; //不輸出時(shí)鐘
TR1 = 1;
/*************************************************/
SCON = (SCON & 0x3f) | 0x40; //UART1模式, 0x00: 同步移位輸出, 0x40: 8位數(shù)據(jù),可變波特率, 0x80: 9位數(shù)據(jù),固定波特率, 0xc0: 9位數(shù)據(jù),可變波特率
// PS = 1; //高優(yōu)先級(jí)中斷
ES = 1; //允許中斷
REN = 1; //允許接收
P_SW1 &= 0x3f; //串口1使用P3.0 P3.1
// P_SW1 |= 0x00; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
// PCON2 |= (1<<4); //內(nèi)部短路RXD與TXD, 做中繼, ENABLE,DISABLE
// IPH|=0X10; //0X11 串口1中斷級(jí)為最高第3級(jí)
// PS=1;
IPH|=0X10; //0X11 串口1中斷級(jí)為最高第2級(jí)
PS=0;
B_TX1_Busy = 0;
TX1_Cnt = 0;
RX1_Cnt = 0;
}
//========================================================================
// 函數(shù): void UART1_int (void) interrupt UART1_VECTOR
// 描述: UART1中斷函數(shù)。
// 參數(shù): nine.
// 返回: none.
// 版本:
// 日期:
// 備注:
//========================================================================
void UART1_int (void) interrupt 4
{
// if(RI)
// {
// RI = 0;
// RX1_Buffer[RX1_Cnt] = SBUF;
// if(++RX1_Cnt >= UART1_BUF_LENGTH) RX1_Cnt = 0;
// }
// if(TI)
// {
// TI = 0;
// B_TX1_Busy = 0;
// }
if(RI)
{
RI = 0;
r= SBUF;
if(r==0xaa) RX1_Cnt=0;
RX1_Buffer[RX1_Cnt] = r;
//------
sign_usart1_receive12char=1; //收到了字節(jié) 標(biāo)志位置1
//------
if(++RX1_Cnt >= UART1_BUF_LENGTH) RX1_Cnt = 0; //防溢出
}
if(TI)
{
TI = 0;
B_TX1_Busy = 0;
}
}
//========================================================================
// 函數(shù): void Timer0_init(void)
// 描述: timer0初始化函數(shù).
// 參數(shù): none.
// 返回: none.
// 版本: V1.0, 2015-1-12
//========================================================================
void Timer0_init(void)
{
TR0 = 0; //停止計(jì)數(shù)
ET0 = 1; //允許中斷
INTCLKO &= ~0x01; //不輸出時(shí)鐘
AUXR |= 0x80; //1T
TMOD &= 0xF0; //定時(shí)器模式
TL0 = 0xCD; //初值 1ms
TH0 = 0xD4; //
TF0 = 0; //清除TF0
TR0 = 1; //開起 T0
}
//========================================================================
// 函數(shù): void timer0_int (void) interrupt TIMER0_VECTOR
// 描述: timer0中斷函數(shù).
// 參數(shù): none.
// 返回: none.
// 版本: V1.0, 2015-1-12
//========================================================================
void timer0_int (void) interrupt 1
{
if(Xms_cnt) Xms_cnt--;
if(Xms_cnt==0)
{
Xms_cnt=TH_MS_VAL;
if(C_FI_port==1) //F向口切換,產(chǎn)生方波 //B向口切換,產(chǎn)生方波
{
C_BI_port=1;
//最好加1MS到幾MS延時(shí)
C_FI_port=0;
}
else
{
C_FI_port=1;
//最好加1MS到幾MS延時(shí)
C_BI_port=0;
}
}
}
//========================================================================
// 函數(shù): void main(void)
// 描述: 主函數(shù)。
// 參數(shù): none.
// 返回: none.
// 版本:
// 日期:
// 備注:
//========================================================================
void main(void)
{
//IO初始說明
//sfr PXM1 = 0xYY; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull
//sfr PXM0 = 0xYY; // =10--->pure input, 11--->open drain
start:
P1M1 = 0x00;
P1M0 = 0x03; //P1.1 1.0強(qiáng)輸出 其它口雙向口
// P3M1 = 0x00;
// P3M0 = 0xFC; //3.1 3.0 雙向口 其它口強(qiáng)輸出
P3M1 = 0x00;
P3M0 = 0x00; //3.1 3.0 雙向口 其它口雙向口
// P5M1 = 0x00;
// P5M0 = 0x30; //P5.5 5.4強(qiáng)輸出 其它口雙向口
P5M1 = 0x00;
P5M0 = 0x00; //P5.5 5.4雙向口 其它口雙向口
DIP1_port=1; //開關(guān)口置高
DIP2_port=1;
DIP3_port=1;
DIP4_port=1;
DIP5_port=1;
DIP6_port=1;
DIP7_port=1;
DIP8_port=1;
C_BI_port=0; //初始B向口一直為低,控制繼電器的通斷由F向口控制接通或 斷開
EA = 0; //關(guān)全局中斷
delay_X100MS(5); //delay_X100MS(5);
Timer0_init();
UART1_config(1); // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
//UART2_config(2); // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無效.
delay_X100MS(1);
RX1_Cnt=0; RX1_Buffer[0]=0; RX1_Buffer[1]=0;RX1_Buffer[2]=0;RX1_Buffer[3]=0;
EA = 1; //允許全局中斷
while (1)
{
execute_cmd();
}
}
復(fù)制代碼
所有資料51hei附件下載:
STC8G1K08 HM2503_2.7z
(2.89 MB, 下載次數(shù): 61)
2021-9-9 11:16 上傳
點(diǎn)擊文件名下載附件
壓縮包文檔
下載積分: 黑幣 -5
作者:
yanghgc
時(shí)間:
2024-1-11 23:05
感謝感謝。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲精品不卡
|
国产视频久久
|
在线观看av网站永久
|
99re在线播放
|
欧美成人二区
|
亚洲精品久久久蜜桃网站
|
中文字幕第一页在线
|
97国产在线观看
|
中文字幕男人的天堂
|
久久久久久久久久爱
|
国产精品123区
|
黄色av网站在线观看
|
亚洲 中文 欧美 日韩 在线观看
|
久久一区二区三区四区
|
亚洲欧美一区二区三区1000
|
蜜桃视频麻豆
|
亚洲黄色成人网
|
国产福利观看
|
亚州精品成人
|
色婷婷国产精品综合在线观看
|
www.日韩欧美
|
午夜婷婷激情
|
一区二区三区在线观看视频
|
亚洲性人人天天夜夜摸
|
精品一级
|
国产综合久久久
|
成人国产综合
|
黄色片免费在线观看
|
国产视频2021
|
日韩不卡一区二区三区
|
九色av
|
狠狠的干狠狠的操
|
伊人免费在线观看
|
日本三级精品
|
欧美一级在线观看
|
超碰人人91
|
91在线视频观看免费
|
中文字幕精品视频
|
国产亚洲网站
|
久久久免费观看视频
|
国产一级毛片精品完整视频版
|