版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)軟件設(shè)計(jì)目錄程序的編寫、編譯KeilC環(huán)境設(shè)置創(chuàng)建項(xiàng)目1、基于AT89C52處理器2、新建源代碼文件,并保存命名xxx.c3、右鍵點(diǎn)擊“SourceGroupxx”將.c“AddFilestoGroup……”程序的編寫、編譯程序編寫:Demo示例/*功能:IO口操作,點(diǎn)亮一個(gè)LED*/#include<reg52.h>//包含頭文件,包含特殊功能寄存器的定義sbitLED=P0^0;//用sbit關(guān)鍵字定義LED到P0.0端口/*主函數(shù)*/voidmain(void){//此方法使用bit位對(duì)單個(gè)端口賦值LED=1;//將P0.0口賦值1,對(duì)外輸出高電平LED=0;//將P0.0口賦值0,對(duì)外輸出低電平,此時(shí)點(diǎn)亮了LEDwhile(1)//主循環(huán)
{//主循環(huán)中添加其他需要一直工作的程序
}}程序的編寫、編譯KeilC環(huán)境設(shè)置Target:設(shè)置時(shí)鐘晶振為12MHzOutput:選中CreateHEXFile選項(xiàng),
編譯后會(huì)生成Hex文件,
用于下載到單片機(jī)中。Debug:左側(cè)配置軟件仿真模式;
右側(cè)配置硬件調(diào)試器仿真。(默認(rèn)即可)程序的編寫、編譯程序編譯編譯查看編譯輸出結(jié)果目錄程序的下載STC89C52STC
ISP下載器USB轉(zhuǎn)串口可代替MAX232,給51單片機(jī)下載程序引出接口分別為:+5V,+3.3V,GND,TXD,RXD.(如果把(GND)接到設(shè)備的有電壓的針腳上,加電可能會(huì)燒毀)需要安裝USB轉(zhuǎn)串口驅(qū)動(dòng),通常為340芯片組下載軟件:STC-ISP-V4.83程序的下載STC89C52冷啟下載:1、使用下載軟件發(fā)送下載命令2、給STC單片機(jī)上電(如果之前已經(jīng)上電,就要斷電再上電)3、STC單片機(jī)才能進(jìn)入到下載狀態(tài)不能下載?檢查線路是否接錯(cuò)ISP接口電路與下載器接口電路電平?jīng)_突下載時(shí)下載速度太快程序的下載AT89S52USBASP/ISP通常為免驅(qū)型請(qǐng)實(shí)用帶保險(xiǎn)的USB下載器,以便保護(hù)電腦U口程序的下載AT89S52USBASP/ISP下載軟件:AVRfighterProgisp目錄基礎(chǔ)程序設(shè)計(jì)單片機(jī)程序框架while()主循環(huán)延遲函數(shù)IO操作中斷操作基礎(chǔ)電路模塊控制蜂鳴器控制獨(dú)立按鍵輸入繼電器控制步進(jìn)電機(jī)控制數(shù)碼管顯示LCD1602顯示無(wú)單片機(jī)編程基礎(chǔ)的同學(xué),可簡(jiǎn)單理解,采用模塊化、積木式搭建單片機(jī)系統(tǒng)代碼基礎(chǔ)程序設(shè)計(jì)程序框架單片機(jī)程序主體結(jié)構(gòu):While()大循環(huán)輪詢式執(zhí)行各任務(wù)外部中斷外部觸發(fā)中斷,如按鍵,執(zhí)行某任務(wù)定時(shí)器中斷
固定間隔時(shí)間執(zhí)行某任務(wù)#include<reg52.h>main(){//首先進(jìn)行IO、中斷、定時(shí)器工作模式初始化
while(1){//輪詢式執(zhí)行任務(wù)
}}voidISR_Key(void)interrupt0using1{//執(zhí)行外部中斷處理任務(wù)}voidTimer0_isr(void)interrupt1using1{//執(zhí)行定時(shí)器中斷處理任務(wù)}基礎(chǔ)程序設(shè)計(jì)while()主循環(huán)while(1)//主循環(huán)
{//主循環(huán)中添加需要一直工作的任務(wù)程序//任務(wù)一:led閃爍LED0=0;//將P0.0口賦值0,對(duì)外輸出低電平
Delay(10000);//調(diào)用延時(shí)程序;用于改變閃爍頻率
LED0=1;//將P0.0口賦值1,對(duì)外輸出高電平
Delay(10000);//任務(wù)二://任務(wù)三:}/*延時(shí)函數(shù),含有輸入?yún)?shù)unsignedintt,其值的范圍是0~65535*/voidDelay(unsignedintt){while(--t);}基礎(chǔ)程序設(shè)計(jì)延遲函數(shù)估算延遲函數(shù)/*uS延時(shí)函數(shù),參數(shù)unsignedchart,其值范圍是0~255。晶振12M。大致延時(shí)長(zhǎng)度如下T=t
x
2+5uS*/voidDelayUs2x(unsignedchart){
while(--t);}/*mS延時(shí)函數(shù),參數(shù)unsignedchart,范圍是0~255。晶振12M*/voidDelayMs(unsignedchart){
while(t--)
{//大致延時(shí)1mS
DelayUs2x(245);
DelayUs2x(245);
}}精確延時(shí)請(qǐng)使用匯編機(jī)器周期指令周期晶振頻率基礎(chǔ)程序設(shè)計(jì)IO操作對(duì)單片機(jī)的控制,其實(shí)就是對(duì)I/O口的控制,無(wú)論單片機(jī)對(duì)外界進(jìn)行何種控制,或接受外部的何種控制,都是通過I/O口進(jìn)行的。51單片機(jī)總共有P0、P1、P2、P3四個(gè)8位雙向輸入輸出端口,每個(gè)端口都有鎖存器(即專用寄存器P0~P3)、輸出驅(qū)動(dòng)器和輸入緩沖器。每個(gè)IO口有一個(gè)IO口寄存器Px,而且這個(gè)寄存器可以位尋址Px.n(定義詳見reg51.h或reg52.h)基礎(chǔ)程序設(shè)計(jì)IO操作1、當(dāng)P0作為I/O口使用時(shí),特別是作為輸出時(shí),輸出級(jí)屬于開漏電路,接拉電流負(fù)載時(shí)必須外接上拉電阻才會(huì)有高電平輸出;如果作為輸入,必須先向相應(yīng)的鎖存器寫“1”,才不會(huì)影響輸入電平。2、P1、P2
和P3
口為準(zhǔn)雙向口,
在內(nèi)部差別不大,
但使用功能有所不同。
P3第二功能各引腳功能定義:P3.0:RXD串行口輸入P3.1:TXD串行口輸出P3.2:INT0外部中斷0輸入P3.3:INT1外部中斷1輸入P3.4:T0定時(shí)器0外部輸入P3.5:T1定時(shí)器1外部輸入P3.6:WR外部寫控制P3.7:RD外部讀控制
P1口是用戶專用
8
位準(zhǔn)雙向I/O口,具有通用輸入/輸出功能,
每一位都能獨(dú)立地設(shè)定為輸入或輸出。當(dāng)有輸出方式變?yōu)檩斎敕绞綍r(shí),
該位的鎖存器必須寫入“1”,
然后才能進(jìn)入輸入操作。
P2口是
8
位準(zhǔn)雙向I/O口。外接I/O設(shè)備時(shí),
可作為擴(kuò)展系統(tǒng)的地址總線,輸出高8位地址,
與P0
口一起組成
16
位地址總線。
基礎(chǔ)程序設(shè)計(jì)IO操作示例#i
nclude<reg52.h>
sbit
bv=P2^0;//定義位變量,關(guān)聯(lián)P2.0管腳。sbit是數(shù)據(jù)類型
int
main(void)
{
unsigned
char
pv;
//位操作,以P2口的第0位為例:
bv=0;//直接對(duì)P2口的第0位管腳輸出低電平
bv=1;//
直接對(duì)P2口的第0位管腳輸出高電平
//總線操作輸出數(shù)據(jù),以P2口為例:
P2=0xaa;//直接賦值,P2口輸出數(shù)據(jù)0xaa
//總線操作讀取數(shù)據(jù),以P2口為例:
pv=P2;//直接讀取P2口的數(shù)據(jù)放到pv變量
return
0;
}基礎(chǔ)程序設(shè)計(jì)中斷8051:5個(gè)中斷源8052:6個(gè)中斷源(+T2)中斷號(hào)
優(yōu)先級(jí)中斷源中斷入口地址01高外部中斷0
0003H12定時(shí)器0000BH23外部中斷10013H34定時(shí)器10018H45低串口中斷0023HC語(yǔ)言程序中可不關(guān)心該地址基礎(chǔ)程序設(shè)計(jì)中斷主要與中斷程序控制相關(guān)的寄存器:
中斷允許控制寄存器IE定時(shí)器控制寄存器TCON串口控制寄存器SCON中斷優(yōu)先控制寄存器IP定時(shí)器工作方式控制寄存器TMOD定時(shí)器初值賦予寄存器(TH0/TH1,TL0/TL1)基礎(chǔ)程序設(shè)計(jì)中斷1.中斷允許控制寄存器IE:EX0(EX1):外部中斷允許控制位
EX0=1外部中斷0開關(guān)閉合
//開外部0中斷
EX0=0外部中斷0開關(guān)斷開ET0(ET1):定時(shí)中斷允許控制位
ET0=1
定時(shí)器中斷0開關(guān)閉合
//開定時(shí)器中斷0
ET0=0定時(shí)器中斷0開關(guān)斷開
ES:串口中斷允許控制位
ES=1串口中斷開關(guān)閉合
//開串口中斷
ES=0串口中斷開關(guān)斷開EA:總中斷控制
(EA=1:開總中斷)基礎(chǔ)程序設(shè)計(jì)中斷2.定時(shí)器控制寄存器TCON
//控制外部中斷和定時(shí)器中斷外部中斷:
IE0(IE1):外部中斷請(qǐng)求標(biāo)志位
當(dāng)外部中斷INT0(INT1)引腳出現(xiàn)有效的請(qǐng)求信號(hào)(接入低電平或下降沿信號(hào)時(shí)),此位由單片機(jī)自動(dòng)置1,cpu開始響應(yīng),處理中斷,而當(dāng)入中斷程序后由單片機(jī)自動(dòng)置0.
IT0(IT1):外部中斷觸發(fā)方式控制位
//選擇有效信號(hào)
IT0(IT1)=1:脈沖觸發(fā)方式,下降沿有效。
IT0(IT1)=0:電平觸發(fā)方式,低電平有效?;A(chǔ)程序設(shè)計(jì)中斷2.定時(shí)器控制寄存器TCON
//控制外部中斷和定時(shí)器中斷定時(shí)器中斷:
TF0(TF1):定時(shí)器/計(jì)數(shù)器溢出中斷標(biāo)志位
當(dāng)定時(shí)器、計(jì)數(shù)器計(jì)數(shù)溢出的時(shí)候,此位由單片機(jī)自動(dòng)置1,cup開始響應(yīng),處理中斷,而當(dāng)進(jìn)入中斷程序后由單片機(jī)自動(dòng)置0.
TRO(TR1):定時(shí)器/計(jì)數(shù)器啟動(dòng)位
TR0(TR1)=1;啟動(dòng)定時(shí)器/計(jì)數(shù)器
TR0(TR1)=0;關(guān)閉定時(shí)器/計(jì)數(shù)器基礎(chǔ)程序設(shè)計(jì)中斷3.定時(shí)器工作方式TMOD低半字節(jié)(D0/D1/D2/D3)用來控制定時(shí)器/計(jì)數(shù)器0高半字節(jié)(D4/D5/D6/D7)用來控制定時(shí)器/計(jì)數(shù)器1GATE=0時(shí),僅由TR0,TR1置位分別啟動(dòng)定時(shí)器T0、T1C/T=0時(shí)為定時(shí)功能,C/T=1時(shí)為計(jì)數(shù)功能(引腳外部脈沖)M0、M1——方式選擇功能基礎(chǔ)程序設(shè)計(jì)中斷4.定時(shí)器初值TL0/TH0(以12M晶振,工作方式1,16位計(jì)數(shù)器為例,定時(shí)Xus)
1.時(shí)鐘周期的時(shí)間t=1/12M=1/12us
2.機(jī)器周期的時(shí)間T=12*1/12=1us
3.每機(jī)器周期計(jì)數(shù)器+1,所以計(jì)數(shù)器+1經(jīng)過時(shí)間為1us
16為計(jì)數(shù)器要全部置1(即達(dá)到65535)+1后,溢出才會(huì)觸發(fā)中斷,所以初值=(65536-X)
4.將初值轉(zhuǎn)化為16進(jìn)制碼,分別付給TH0和TL0
eg:所定時(shí)間5ms;初值=(65536-5000)=60536=EC78;TH0=0XEC;TL0=0X78;程序中常用賦初值算法:
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;基礎(chǔ)程序設(shè)計(jì)中斷5.串口控制寄存器SCON定時(shí)器中斷:TI:串行口發(fā)送中斷標(biāo)志位
當(dāng)單片機(jī)串口發(fā)送完一幀數(shù)據(jù)后,此位由單片機(jī)自動(dòng)置1,而當(dāng)進(jìn)入中斷服務(wù)程序后是不會(huì)自動(dòng)清0的,
必須由用戶在中斷服務(wù)中用軟件清0.
RI:串行口接收中斷標(biāo)志位
當(dāng)單片機(jī)串口接收完一幀數(shù)據(jù)后,此位由單片機(jī)自動(dòng)置1,而當(dāng)進(jìn)入中斷服務(wù)程序后是不會(huì)自動(dòng)清0的,
必須由用戶在中斷服務(wù)軟件中用軟件清0.
基礎(chǔ)程序設(shè)計(jì)定時(shí)器中斷示例voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時(shí)器,“|”可使多個(gè)定時(shí)器互不影響TH0=(65536-60000)/256;
//賦初值(定時(shí)60ms)
TL0=(65536-60000)%256;EA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TR0=1;//定時(shí)器開關(guān)打開}main(){Init_Timer0();while(1);}/*定時(shí)器中斷子程序*/voidTimer0_isr(void)interrupt1using1{TH0=(65536-60000)/256;
//重新賦值
TL0=(65536-60000)%256;LED=~LED;//指示燈反相,可以看到閃爍}Demo:定時(shí)器中斷0基礎(chǔ)程序設(shè)計(jì)外部中斷示例功能:通過中斷接口P3.2連接的獨(dú)立按鍵測(cè)試,P0口的LED燈反向,邊沿觸發(fā)main(){
P0=0xaa;//P0口初始值
EA=1;//全局中斷開
EX0=1;//外部中斷0開
IT0=1;//邊沿觸發(fā)(IT0=0電平觸發(fā))
while(1)
{
//在此添加其他程序
}}/*外部中斷程序*/voidISR_Key(void)interrupt0using1{
P0=~P0;//進(jìn)入中斷程序執(zhí)行程序,//此時(shí)可以通過EA=0指令暫時(shí)關(guān)掉中斷}串口中斷以后再介紹Demo:外部中斷0邊沿觸發(fā)基礎(chǔ)程序設(shè)計(jì)發(fā)光二極管LED灌電流——拉電流??控制負(fù)載,盡量使用低電平有效(上電初始化,所有IO為高電平)單個(gè)LED控制sbitled0=P1^0;led0=0;//開燈led0=1;//關(guān)燈整個(gè)P1口控制:流水燈unsignedchartmp=0xfe;while(1){P1=tmp;delay();tmp=((tmp<<1)|1);if(tmp==0xff)tmp=0xfe;}低電平有效Demo:LED流水燈基礎(chǔ)程序設(shè)計(jì)蜂鳴器控制程序9013驅(qū)動(dòng)高電平有效sbitbeer=P0^4;beer=0;//鳴叫beer=1;//關(guān)閉通過不同的間隔時(shí)間,可以達(dá)到類似倒車?yán)走_(dá)的效果voidbeer_freq(unsignedchart){beer=!beer;//鳴叫or關(guān)閉
DelayMs(t);}Demo:蜂鳴器基礎(chǔ)程序設(shè)計(jì)獨(dú)立按鍵sbitKEY=P3^2;//定義按鍵輸入端口sbitLED=P0^0;//定義led輸出端口voidmain(void){KEY=1; //按鍵輸入端口電平置高,輸入模式while(1) //主循環(huán)
{
if(!KEY) //如果檢測(cè)到低電平,說明按鍵按下,led點(diǎn)亮
LED=0;
else
LED=1; //如果按鍵未按下led滅
//上述4句可以用一句替代LED=KEY;//主循環(huán)中添加其他需要一直工作的程序
}}這里未考慮軟件去抖查詢方式亦可用外部中斷Demo:獨(dú)立按鍵控制LED基礎(chǔ)程序設(shè)計(jì)繼電器控制程序低電平有效sbitrelay=P0^0;relay=0;//常開閉合,外設(shè)接通電源relay=1;//常開斷開Eg:按鍵S1控制繼電器模塊(低電平有效)sbitKEY=P3^2;//定義按鍵輸入端口sbitRELAY=P0^0;//定義繼電器控制端口voidmain(void){KEY=1;//按鍵輸入端口電平置高
while(1)//主循環(huán)
{//按鍵按下,繼電器開關(guān)切換if(!KEY)RELAY=!RELAY;}}基礎(chǔ)程序設(shè)計(jì)步進(jìn)電機(jī)Uln2003驅(qū)動(dòng)步進(jìn)電機(jī)1、拍數(shù):電機(jī)轉(zhuǎn)過一個(gè)齒距角所需脈沖數(shù),以四相電機(jī)為例:四相四拍運(yùn)行方式:AB-BC-CD-DA-AB四相八拍運(yùn)行方式:A-AB-B-BC-C-CD-D-DA-A2、步距角:對(duì)應(yīng)一個(gè)脈沖信號(hào),電機(jī)轉(zhuǎn)子轉(zhuǎn)過的角位移用θ表示。減速電機(jī)28BYJ-48-5步進(jìn)角度:5.625x1/64減速比:1/64***因?yàn)檫@個(gè)是帶減速齒輪的(減速比1/64),最后輸出軸上步進(jìn)角是5.625/64=0.08789度。***對(duì)于電機(jī),是64個(gè)脈沖為一圈。對(duì)于輸出軸,是4096個(gè)脈沖為一圈(64×64)。電機(jī)轉(zhuǎn)64圈,輸出軸轉(zhuǎn)1圈。實(shí)測(cè)512*4為一圈?基礎(chǔ)程序設(shè)計(jì)步進(jìn)電機(jī)接線方式:IN1----P00IN2----P01IN3----P02IN4----P03#defineMotorDataP0//步進(jìn)電機(jī)控制接口定義ucharphasecw[4]={0x08,0x04,0x02,0x01};//正轉(zhuǎn)電機(jī)導(dǎo)通相序D-C-B-Aucharphaseccw[4]={0x01,0x02,0x04,0x08};//反轉(zhuǎn)電機(jī)導(dǎo)通相序A-B-C-Ducharspeed_delay;//順時(shí)針轉(zhuǎn)動(dòng)voidMotorCW(void){uchari;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人住房維修基金擔(dān)保責(zé)任協(xié)議4篇
- 2025年金融機(jī)構(gòu)間協(xié)議存款風(fēng)險(xiǎn)管理合同3篇
- 二零二五版汽車分期付款及二手車交易及售后服務(wù)合同3篇
- 2025版學(xué)?;顒?dòng)中心租賃合同范本2篇
- 2025版出租車司機(jī)職業(yè)操守?fù)?dān)保合同2篇
- 2025版?zhèn)€人車輛抵押債權(quán)債務(wù)處理執(zhí)行條款4篇
- 2025年長(zhǎng)沙考貨運(yùn)從業(yè)資格證駕校
- 2025年綠色建筑項(xiàng)目施工連帶責(zé)任保證合同4篇
- 2025餐飲拆伙協(xié)議書退伙后品牌使用權(quán)及保密協(xié)議3篇
- 卸車事故緊急處理與賠償協(xié)議2025年度3篇
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 管道坡口技術(shù)培訓(xùn)
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
- 皮膚儲(chǔ)存新技術(shù)及臨床應(yīng)用
- 外研版七年級(jí)英語(yǔ)上冊(cè)《閱讀理解》專項(xiàng)練習(xí)題(含答案)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 上海市復(fù)旦大學(xué)附中2024屆高考沖刺模擬數(shù)學(xué)試題含解析
- 幼兒園公開課:大班健康《國(guó)王生病了》課件
- 小學(xué)六年級(jí)說明文閱讀題與答案大全
- 人教pep小學(xué)六年級(jí)上冊(cè)英語(yǔ)閱讀理解練習(xí)題大全含答案
評(píng)論
0/150
提交評(píng)論