Ⅰ STC12C5A60S2製作呼吸燈C語言程序怎麼寫
呼吸燈的程序:
/****************************************************************************
功能:LED燈慢慢變暗,再慢慢變亮。
用定時器模擬的PWM調制。
單片機:AT89S52
******************************************************************************/
#include<reg52.h>
#defineV_TH00XFF//設定定時器0,高8位的初值
#defineV_TL00XF6//設定定時器0,低8位的初值
#defineV_TMOD0X01//設定定時器0的工作方式為:方式1(計數位數是16位//,由TL0作為低8位、TH0作為高8位)
#defineucharunsignedchar
#defineuintunsignedint
voidinit_sys();//系統初始化函數
voiddelay(uint);//延時函數
unsignedcharZKB;//占空比
voidmain(void)
{
init_sys();//初始化
while(1)
{
for(ZKB=5;ZKB<40;ZKB=ZKB+2)//每調節一次占空比,就延時大概8ms左右,這使得LED現象更明顯
{
delay(8);
}
for(ZKB=40;ZKB>5;ZKB=ZKB-2)
{
delay(8);
}
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
voidinit_sys()/*系統初始化函數*/
{
/*定時器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}
voidtimer0(void)interrupt1using2
{
staticucharclick=0;//中斷次數計數器變數
TH0=V_TH0;//重新恢復定時器初始值
TL0=V_TL0;
++click;//每計數10次,產生一個中斷,並且click增加一個
if(click>=100)
click=0;//計滿一百次,這重新計數。
/*因為計一次數的時間是1us,10次產生一個中斷,也就是一個中斷10us。100個中斷為1ms。
則,可以在這100個數中隨便取值,用於表示占空比的多少,占空比的范圍為(1~100)*/
if(click<=ZKB)//當小於占空比值時輸出低電平,高於時是高電平,從而實現占空比的調整
P1=0x00;//P1口接的是LED燈
else
P1=0xff;
}
此程序的總中斷時間為100ms,即頻率為:100KHZ,占空比從5變為40(即5%~25%)。
Ⅱ STC12C5A32S2-35I-LQPF44 單片機怎麼燒錄程序
STC單片機燒寫程序步驟
找一個下載器,下載器的GND、TXD、RXD三條線跟單片機的三條線接好之後,把下載器插上電腦,然後打開這個軟體,下圖的紅色地方要設置好,
1,MCU是STC89C52或是STC12C5A60S2之類。
2,COM口要設置好
3,波特率先設最最9600,如果下載不成功,就再調低,如果下載成功,可以再往上調,如果115200都成功,就一直用這個就行。(下載器的線如果太長,波特率無法比較高,這是下載程序的速度,越高,下載程序速度越快。)
Ⅲ 單片機怎麼燒程序
問題一:51單片機晶元燒入程序 買一個燒錄器就好了,杜邦線直接插到DIP腳上
問題二:單片機如何燒錄程序 STC系列單片機為例:
首先,需要安裝keil軟體和STC_ISP程序下載軟體。
先對你想要實現對單片機的功能用keil編程,然後用STC_ISP下載軟體下載到單片機上,最後打開給單片機提供電源就可以觀察單片機開發板或是自己搭建的板子上的現象了...通過不斷修改程序,下載程序,最終獲得自己在實驗板上想要的結果。這樣就可以了...
實驗板與PC機的連接:一般對現成購買的開發板來說,會有一個USB介面提供5v電源、提供通信或另一個USB用橋答野來下載介面驅動程序,同時有RS232串口,實現MAX232電平與單片機TTL電平之間轉換,用來進行通信下載程序和數據;;對自己搭建的電路板來說,仍會有MAX232晶元和RS232串口用來實現程序的燒寫,實現對單片機寫入數據和程序的下載。用的是RS232串口實現的程序燒寫!
若要用USB來燒寫,需要一個相應的ISP下載軟體和硬體燒寫器,一般這種燒寫器價格不菲。用的是USB口實現燒寫程序!
一般的,燒寫程序還是選用可以用ISP下載的,自己搭建個RS232串口的電路,簡單實用,對單片機燒寫程序就夠用了。
問題三:單片機中燒程序是什麼意思 看處你剛剛入門。單片機是個有意思的東西,好好學。keil是電腦上的編程軟體,燒程序你就理解為往單片機中下載程序。
問題四:單片機開始可以燒程序用了幾次就燒不進去 怎麼回事? 有可能已經燒壞敏喊了,特別是89c52系列 更特別是STC品牌的89C52的。很容易壞,
你要注意了,你電壓可能有問題。
還有就是燒程序的時候需要復亥,如果以前你能燒現在不能燒,說明你復位電路沒有問題,經常復位電路影響燒程序。
問題五:第一次給單片機燒程序要注意什麼? use轉232應該沒有問題,我用現代的晶元試過已經通過。首先我們要分析你有沒有進入ISP模式,用示波器觀察一下串口的波形是否正常,再就是晶元各個管腳的電壓是否正常。排除硬體原因後仍不能解決,建議換一下你的USB轉232線,這方面的牌子實在太多了,雖然原理都一樣,但作為一個故障點來分析也是應該考慮的。
問題六:為什麼單片機程序燒不進去? 用的是什麼型號的單片機?會不會是燒寫前沒有先擦除?單片機保存程序是使用EEPROM或者flash的,都需要先擦除,才能寫入的。第一次能燒進去,是因為單片機出場時本來就是已擦除過的,可以寫入。但之後的寫入之前,都需要先擦除。
問題七:單片機程序燒入rom之後怎樣執行 1,HEX文件包含了代碼數據。是由鏈接器統一分配ROM地址。
2. 程序中的變數,也是在編譯連接時,分配了RAM地址。不存在載入的問題,程序指令對變數的操作,就是對RAM地址的操作,地址值存在在指令中。
3. 堆棧在程序初始化時設置堆棧指針。Keil C 會自動設置好。
4. 一般的51單片機代碼是從 0000開始執行,這是它的復位地址。也有別的型號的單片機並不一定從0開始執行。程序從0開始執行,但它執行的第一句往往是一個跳轉指令(這個Keil C也是自動寫好的),跳到另一塊地址去執行,而不會順序執行到 中斷的地址的。
你如果是用匯編寫程序,這些都是要你自己去分配的,用C寫程序,由編譯器來完成這些底層操作。
問題八:怎麼程序突然燒不進單片機了??? 這種情況會有很多種可能性:
1、單片機已經損壞,樓主換個單片罰試試。
2、單片機開發板損壞,這個情況基本上不可能發生,但樓主需做好准備。
3、USBISP損壞,概率不大,換一個試試。
4、下載軟體出問題了,樓主看看自己的程序下載軟體的型號是否為「AT89S52」。
5、單片機在插座上插反了。
6、某條連接線不牢固。
7、開發板的晶振鬆了,或數值舉派不對。
問題九:8051單片機通過什麼口燒程序? at89c**系列是用並口下載。at89系列可以用isp方式下載。 stc系列可以通過串口下載。51有專門的模擬晶元。。
isp可以用串口或者並口,或者串口轉u *** (這種方式最方便,筆記本上也可以下載)。isp就用到單片機的io口(P1.5,P1.6,P1.7),還有RST引腳+74h373+並口,就可以下載了。。
Ⅳ stc單片機燒錄步驟
STC單片機燒錄代碼步驟:(以下文字由wannenggong經鍵盤錄入)
1、需要有一根下載線。可以是連接電腦主板原生串列9針COM埠經MAX232晶元轉換的串口連接線;也可以是連接電腦USB埠經CP21xx或CH3xx晶元轉換的串口接線,如果使用的是USB轉串口的下載線,使用前需要在電腦中安裝相應轉換晶元的驅動程序,目前使用最多的是CH340下載線,驅動安裝成功後可以在電腦「設備管理器」埠列表中看到:USB-SERIAL CH340(COMx)項、此時需要牢記這個x也就是串口號碼,例如:COM4。
2、連接下載線與STC單片機的串口1(P3.0,P3.1埠),此時需要注意的是下載線的TXD/RXD與單片機的TXD/RXD引線需要交叉連接。
3、到STC單片機官網下載最新版的STC-spi軟體,打開軟體後(1)、選擇待下載晶元的型號。(2)、選擇串口。(3)、設置波特率,最低波特率設為2400最高可以根據不同晶元從低到高試著設置。(4)、打開編譯通過的.hex目標文件。
4、先不給單片機通電,點擊「下載/編程」,等待3秒左右為單片機上電,接下來可以看到軟體窗口的自動操作的各項提示和下載進度條,等待一段時間即可完成下載。
Ⅳ STC單片機開發板給單片機燒寫程序的時候要用到哪些管腳貼片的單片機是怎麼燒寫程序的
STC單片機開發板給單片機燒寫程序是不行的。
1、首先我們都是通過電腦的串口(232電平)通過232晶元轉換為TTL後再給單片機,實現下載功能。
2、第1步用到stc的串口軟體,這個軟體下載時要和單片機進行握手,STC內部協議。
3、你的單片機開發板沒有這個握手,怎麼能下載程序呢?
如果想試一試,可以這么干:
1、把stc的握手碼,及過程碼(如何將hex文件燒進去的)截出來。
2、通過單片機程序把這個握手碼及過程碼發給另一個單片機。
3、如何將hex文件傳給另一塊單片機呢,可以把hex文件放到sd卡里。開發板上的單片機不斷的讀取sd卡的文件傳給另一個單片機。
Ⅵ 基於STC51系列單片機的SPWM波形實現,程序如何編寫急急急急
/*********************************************************
// 載波比選為N=24,調制比M=Uc/Ur=1,晶振頻率12M
// 正弦波頻率50Hz
// 高電平的寬度Tpw = Tt/2*(1+Msimwt)
// 低電平的寬度Tpw = Tt/2*(1-Msimwt)
// Tt周期
// T2是產生SPWM波形,並從P1^1輸出,用導線連接到P3.4作為測試頻率使用。
// T1工作在定時方式1,定時1s
// T0工作在計數方式,對輸入的脈沖進行計數,溢出產生中斷。
// 16位計數器最大值是65536,1s內可能會產生多次溢出,所以在中斷處理程序對中斷的次數進行
// 計數。1s到後,將中斷的計數器里的計數值取出進行綜合處理,處理後的數據送顯示。
//信號頻率的計算方法:
// T0工作在計數方式,假設1s內溢出C1次,最後未溢出的計數值是C2,則頻率公式為:
// F=C1*2^16+C2 = C1*65536+TH0*256+TL0)
//使用12MHz時鍾,測量的最大范圍是不大於500KHz。
*********************************************************/
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar disp[8]={0,0,0,0,0,0,0,0};
uchar FreStr[]="Friquency is:";
uchar T0count,T1count;
uchar code x[]={66,38,26,89,15,97,7,102,2,103,1,102,2,
97,7,89,15,78,26,66,38,38,66,26,78,15,
89,7,97,2,102,1,103,1,103,2,102,7,97,15,
89,26,78,38,66};
uchar ky,kc,count=255;
sbit L1=P1^1;
void delayms(uchar ms)
{
uchar i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
//LCD定義開始
//以下三個是定義LCD的引腳
sbit lcden=P0^5;
sbit lcdwrite=P0^6;
sbit lcdrs=P0^7;
//延時程序
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//lcd的寫指令
void write_com(uchar com)
{
lcdrs=0;
lcden=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//lcd的寫數據
void write_data(uchar da)
{
lcdrs=1;
lcden=0;
P2=da;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//初始化
void Lcd_init()
{
lcdwrite=0;
lcden=0;
write_com(0x38); //16*2顯示,5*7點陣,8位數據
write_com(0x0c);//顯示開,關游標
write_com(0x06); //移動游標
write_com(0x01);//清除LCD的顯示內容
}
//LCD定義結束
//計算頻率值
void calc()
{
uchar i;
long frequency;
frequency=(T0count*256+TH0)*256+TL0;
for(i=7;i>0;i--)
{
disp[i]=frequency%10;
frequency=frequency/10;
}
disp[0]=frequency;
}
void init()
{
T0count=0;
T1count=0;
TH0=0;
TL0=0;
}
void main()
{
uchar dis;
init();
Lcd_init();
TMOD=0x15;
TH1=(65536-5*110592/12)/256;
TL1=(65536-5*110592/12)/256%10;
ET1=1;
ET0=1;
EA=1;
TR1=1;
TR0=1;
//以下四句的作用是在P1.1引腳上形成1000Hz的脈沖,用導線連接到P3.4作為測試用。將其中
//高8位和低8位的初始值更改後可輸出不同頻率的脈沖。
T2MOD = 0x02;
TH2=255-x[ky];
TL2=255-x[ky];
ET2=1;
EX0=1;
TR2=1;
L1=1;
write_com(0x80);
for(dis=0;dis<12;dis++)
write_data(FreStr[dis]);
while(1)
{
write_com(0xC0);
for(dis=0;dis<8;dis++)
write_data(disp[dis]+0x30); //顯示頻率
}
}
//計算輸入脈沖的次數
void time0() interrupt 1
{
T0count++;
}
//計算1s時間
void time1() interrupt 3
{
TH1=(65536-5*110592/12)/256;
TL1=(65536-5*110592/12)/256%10;
if(T1count==20)
{
calc();
init();
}
else T1count++;
}
//這是產生SPWM波形、
void M() interrupt 5
{
TH2=255-x[ky];
TL2=255-x[ky];
kc++;
if(kc==count)
{
kc=0;
L1=~L1;
ky++;
if(ky==49) ky=0;
}
}
//這是使用外部中斷0可以調整輸出波形的頻率
void MM() interrupt 0
{
delayms(300);
if(INT0==0)
{
count=count-5;
if(count==0) count=255;
}
}