[color=rgb(0," (a="=0x08)" 允許左移8次。[="" align]P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00; P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void main()
{
unsigned char a;
port_mode(); // 將單片機(jī)所有端口配置為準(zhǔn)雙向弱上拉方式 P2 = 0xFF; // P2口置弱上拉高電平輸出
while(1)
{
P0 = P2; // 循環(huán)檢測(cè)P2口輸入電平高低。
}
}
8 軟件仿真
9 硬件仿真
n 在STC程序下載軟件中首先選擇“Keil仿真設(shè)置”頁(yè)面,點(diǎn)擊“添加型號(hào)和頭文件到Keil 中”,在出現(xiàn)的目錄選擇窗口中,定位到Keil的安裝目錄(比如“C:Keil818”),“確 定”后出現(xiàn)“STC MCU型號(hào)添加成功”的提示信息,點(diǎn)“確定”。
n 保持IAP15W4K58S4實(shí)驗(yàn)電路仍然與電腦串口相連,如上圖所示,先選擇仿真芯片運(yùn) 行時(shí)的R/C時(shí)鐘頻率或使用外部晶振,然后點(diǎn)擊“將IAP15W4K58S4設(shè)置為仿真芯片”按 鈕,給電路板上電,此時(shí)就將會(huì)有程序向芯片中下載,下載完成后仿真器便制作完成 了,IAP15W4K58S4設(shè)置成仿真芯片后,要想再變成一般的單片機(jī)無(wú)需任何操作,直接 將它當(dāng)作單片機(jī)下載程序使用就可以了。
n 在Keil中新建項(xiàng)目,出現(xiàn)下圖 對(duì)話框,選擇“STC MCU Database”項(xiàng),然后從列表 中選擇相應(yīng)的MCU型號(hào),在此選擇“STC15W4K32S4”,點(diǎn)擊“OK”完成選擇。
然后按下圖設(shè)置硬件仿真
確認(rèn)前面我們所創(chuàng)建的項(xiàng)目編譯沒(méi)有錯(cuò)誤后,按“Ctrl+F5”或工具欄圖標(biāo) 開(kāi)始調(diào) 試,若硬件連接無(wú)誤的話,將會(huì)進(jìn)入到與軟件仿真類似的調(diào)試界面,只是現(xiàn)在可以一步一步 執(zhí)行程序并控制硬件動(dòng)作了)。 有時(shí)進(jìn)入調(diào)試環(huán)境可能會(huì)失敗,首先檢查仿真串口號(hào)選擇是否有誤,另外可將單片機(jī)斷電 后重新上電試試,若使用的USB轉(zhuǎn)串口,可將USB頭斷開(kāi)幾秒再插上,如果仍然不行,請(qǐng)檢查
程序代碼是否占用了仿真調(diào)試接口(P3.0與P3.1 )。
10 延時(shí)軟件使用方法
長(zhǎng)時(shí)間延時(shí),函數(shù)固定格式:
void delay500ms() // 大范圍精確延時(shí)函數(shù)
{
unsigned char i,j,k; // i,j,k由軟件計(jì)算出確定。
for(i=41;i>0;i--) // 注意后面沒(méi)分號(hào)
for(j=133;j>0;j--) // 注意后面沒(méi)分號(hào)
for(k=252;k>0;k--); // 注意后面有分號(hào)
}
短暫延時(shí),函數(shù)固定格式:
void delay (unsigned char t) // 小范圍精確延時(shí)函數(shù)
{
while(--t);
}
根據(jù)不同的延時(shí)時(shí)間修改函數(shù)中的變量 i,j,k 與 t 即可, i,j,k 與 t 由筆者編寫的 軟件直接計(jì)算得出
11 main()、void main()和int main()的區(qū)別
在C語(yǔ)言中main()和void main()區(qū)別:一個(gè)有返回值(沒(méi)聲明類型的 默認(rèn)是返回值int型),一個(gè)無(wú)返回值,特別在單片機(jī)運(yùn)用中由于主函數(shù) 沒(méi)有其它函數(shù)調(diào)用它,所以返回的值也就沒(méi)什么用。所以一般都寫的 void main(),這時(shí)程序中不需要return語(yǔ)句,如果main()函數(shù)前沒(méi)有void
(默認(rèn)為int),或者寫為int main()程序中就必須有return語(yǔ)句,比如:
int main()
{
return 0; // 表示程序正常退出
}
在單片機(jī)程序中一般寫作void min()最方便,但在其它一些C編譯器中,寫
作void main()編譯是不能通過(guò)的,需要寫成int main(),int main()是C語(yǔ)言
的標(biāo)準(zhǔn)格式。
12 printf 格式化輸出函數(shù)(單片機(jī)與計(jì)算機(jī)通信)
例1.8 計(jì)算機(jī)串口助手顯示單片機(jī)內(nèi)部簡(jiǎn)單信息
#include "STC15W4K.H"
#include // 為使用KEIL自帶的庫(kù)函數(shù)printf而加入
void printstar()
{
printf("********************************");
}
void print_message()
{
printf("hello world"); // 最簡(jiǎn)單輸出 printf("How do you do!"); // 輸出換行符 printf("歡迎學(xué)習(xí)STC51單片機(jī)"); // 中文輸出
}
void UART_init(void)
{
// 下面代碼設(shè)置定時(shí)器1
TMOD = 0x20; // 0010 0000 定時(shí)器1工作于方式2(8位自動(dòng)重裝方式) TH1 = 0xFD; // 波特率:9600 /11.0592MHZ
TL1 = 0xFD; // 波特率:9600 /11.0592MHZ TR1 = 1;
// 下面代碼設(shè)置定串口
AUXR = 0x00; // 很關(guān)鍵,使用定時(shí)器1作為波特率發(fā)生器,S1ST2=0
SCON = 0x50; // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允許接受) TI=1; // 很關(guān)鍵,使用printf函數(shù)時(shí)必須有此命令
}
void main()
{
}
UART_init(); // 初始化串口 printstar(); // 輸出************** print_message(); // 輸出說(shuō)明文字 printstar(); // 輸出************** while(1) ; // 停在這里
我們把例1.8程序下載到單片機(jī)中,打開(kāi)程序下載軟件的串口助手,接收緩沖區(qū)選擇文本模式,波特率
9600,打開(kāi)串口,給實(shí)驗(yàn)板斷電后上電,可以看到單片機(jī)發(fā)給計(jì)算機(jī)的信息如圖1-67所示,如果顯示 的個(gè)別字符出現(xiàn)亂碼或連續(xù)接收大量數(shù)據(jù)顯示不正常,可換用其它串口助手軟件,比如“丁丁串口調(diào)試 助手SSCOM 3.3”即可解決。實(shí)驗(yàn)結(jié)果如下:
13 學(xué)習(xí)用實(shí)驗(yàn)板介紹
由于后續(xù)章節(jié)實(shí)驗(yàn)很多,制作實(shí)驗(yàn)電路比較耗費(fèi)時(shí)間,可以購(gòu)買實(shí)驗(yàn)板產(chǎn)品。
SD卡與MP3實(shí)驗(yàn)板