怎么讀出51單片機里面的程序 arduino的程序如何下載到51單片機嗎?
arduino的程序如何下載到51單片機嗎?這應該是不能不能下吧,ardiino和51單片機的硬件結構都差不多,arduino程序可是能轉成hex文件,但燒寫給自己51單片機,肯定用不了,或者達不了程
arduino的程序如何下載到51單片機嗎?
這應該是不能不能下吧,ardiino和51單片機的硬件結構都差不多,arduino程序可是能轉成hex文件,但燒寫給自己51單片機,肯定用不了,或者達不了程序要想的結果,ardnuio建議使用的是avr芯片,和51有不大的區別的,它們所在用的頭文件都不一樣。所以才應該不要用。
51單片機程序,怎么把幾個程序合并在一起,講解思路和程序合并的方法?
把幾段程序放到同一工程下的有所不同文件,然后把在主函數的那個文件寫清楚程序處文件名,也可以放到主函數的文件里,改子函數,然后把在前面函數聲明。
51單片機pwm程序詳解?
51單片機的pwm調速頻率要注意通過一個定時器和一個IO口來實現程序PWM的輸出。在一個周期里面,簡單讓IO口輸出高電平,并定時一定會的時間然后再將IO口輸出低電平,設置定時肯定會的時間。然后再在while里面循環輸出即可。必須變動占空比的話就變化高電平的時間與低電平的時間比。我們來看一下51單片機的PWM調速程序。
51單片機PWM調速程序
/*******************************************************************//*程序名:PWM直流電機調速*/
/*晶振:11.00592MHzCPU型號:AT89C51*/
/*直流電機的PWM波控制,可以就的調速從0到20級的調速*/
/*****************************************************************/#include《reg51.h》
#defineTH0_TL0(65536-1000)//設置中斷的間隔時長
unsignedcharcount050//低電平的占空比unsignedcharcount10//高電平的占空比
24-bitFlag1//電機正反轉標志位,1正轉,0反轉
sbitKey_addP2^0//電機減速時sbitKey_decP2^1//電機瞬間加速sbitKey_turnP2^2//電機換向
sbitPWM1P2^6//PWM通道1,反轉驅動信號sbitPWM2P2^7//PWM通道2,正轉脈沖序列
unsignedcharTime_delay
/************函數一般聲明**************/voidDelay(unsignedcharx)voidMotor_speed_high(void)voidMotor_speed_low(void)voidMotor_turn(void)voidTimer0_init(void)
/****************顯示延時處理**********************/voidDelay(unsignedcharx)
{
Time_delayx
while(Time_delay!0)//等待自動,可降低PWM輸出時間間隔
}
/*******按鍵一次性處理加pwm占空比,電機速度**********/voidMotor_speed_high(void)//
{
if(Key_add0)
{
Delay(10)if(Key_omit0)
{
count05
if(count0》100)
{
count0100
}
}
while(!Key_add)//在等待鍵放開
}
}
/******按鍵處理減pwm占空比,電機減速時*****/voidMotor_speed_low(void)
{
}
}
/************電機正反向完全控制**************/voidMotor_turn(void)
{
if(Key_turn0)
{
Delay(10)if(Key_turn0)
{
Flag~Flag
if(Key_dec0)
{
Delay(10)if(Key_dec0)
{
count0-5
if(count0《0)
{
count00
}
}
while(!Key_dec)
}
while(!Key_turn)
}
}
/***********定時器0系統初始化***********/voidTimer0_init(void)
{
TMOD0x01//定時器0工作于/256TL0TH0_TL0%6TR01ET01EA1}
/*********主函數********************/voidmain(void)
{
Timer0_init()while(1)
{
Motor_turn()Motor_speed_很high()Motor_speed_low()
}
}
/**************設置定時0關閉全面處理******************/voidTimer0_int(void)interrupt1using1
{
TR00//系統設置定時器初值期間,直接關閉定時器TL0TH0_TL0%6
TH0TH0_TL0/256//定時器裝初值TR01
if(Time_delay!0)//顯示延時函數用
{
Time_delay--
}
if(Flag1)//電機正轉
{
PWM10
if(count1《count0)
{
PWM21}catchPWM20
if(count1》100){count10}}
catch//電機反轉
{
PWM20
if(count1《count0){PWM11}existsPWM10
if(count1》100)
{
count10
}
}
}