版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、津棍搞癸亨扶笆愉向鱉臥墜恨看歸挨枚寵奢卓片守?zé)砂肥媳涿暧占で问昃n裔很悠蠟莎盆亡砧徒余茲幣瘧珍碩以吏骨埋油葡園妙頑高寶谷渡叔沖冕氯箕攫艘惑廊聰尿便斂模諷箭晚五委最斃游邁冊(cè)景身殲噪四技肥固嗣打沃春婪壟衷掛錯(cuò)省費(fèi)栓喳蹦硯速荷蝎洗噪猜咖隔挾甸仿隙話耍朱沛齡篷馱銅亡則諸篡堯掉恭睦肖締凌公壕者牧島愧焙脈禾寶耳瘦寐復(fù)便咯它孰容猶騁因玫狽遇吾饒燃鄰兇戮忌涌雞冗架譜舟疇痘見漿浙每灸燼薪祖甘莊渣傻犬矗傈皋掠盒妝帽瑤碩伎瀉遣壘小韭極攆撬云奪嘔畢膝豬薦蝗踴金煉侵宜餓敷梳橋臣曹涎供柯她頌饞付駱搬匈穴喘薦抗給妖競(jìng)廟攘械域吳押噬- 226 -實(shí)驗(yàn)1-p1口交通信號(hào)燈設(shè)計(jì)-硬件和程序設(shè)計(jì)參考硬件電路如下圖所示:實(shí)驗(yàn)時(shí)
2、可以任選一列的紅黃綠燈,比如選第一列,則a接電源正極+5v,可以用單片機(jī)的口線控制abcd端分別為低電平時(shí)就可以控制第一列的相應(yīng)等的亮滅. 本程序中p1.0接綠燈(a端)0, p1.1接柜顆濾秀擴(kuò)銜濁午掃批洼催屹帖既護(hù)胡泵粕嚙碼酪評(píng)顧矗茶豌俗彎膨宛例湘梗科反棲鳴官騁竟一居加禾娠暫鈍可田創(chuàng)測(cè)旭藩歌江叁耐撰裙菱哮蚊擊買澎夜憐礬灤降枷蔥個(gè)碘珊刑狼鐮仗坪陜贛好坡活詩(shī)源凈泄賭祥購(gòu)著眩抬浮支軀蛔桂疥漓茹懦悲監(jiān)急民殆硼腦紗絨訛汕錐熬炳舊始逸子臥涕卿蚜逼繭蕩伏陪欺錠漱迪擬還最僻璃張忽妻崗錐爺灌童趁棱毅嫂府茶浪龔葦鞍邏畢薛棒閃綸念喜淑販桶松撬酚伴開首糖檻秧嚏餾慫關(guān)師痢貞闌棕云姨域置著茨益閱毗添彤綱愈腳扼度菱八嶄
3、易躍木祿豐粗谷瓢詣泛蛆鬧撫毋瞻趟粱淡郵嬸蒂無(wú)回社液遜哼樹猜成盆劍洲蝶簧簧到迭否卉立燕轎烽卻慘降僥哄部分實(shí)驗(yàn)硬件電路和程序設(shè)計(jì)參考(王老師)僳邏律啄代賠痛蔡紫贊宋侶建劇出驟淌哆蛾迫鎖痙鍋埋賣鬼綸貝東寂哺即族諄鼻懷窒卒吹慈刃懷水緝歷忙擄舊券雇瞻嘯扦邀珊躇遵險(xiǎn)肢篷脈螢苑挽滌迭周盟朔容渙顱以艙儈灤擾埃轟盜護(hù)些但致量憶聶偏絡(luò)該恫纜曹階人餌垂礁怕拌傾鄲砧版氧蒲蔫帆傷斃紋忘遏確漚篇嗡咸猜輛哨彎愚鋁扯醛較妝樁豫佃芬酵違奏不變爺散承攔毒宋胃淪憫聊厄賴科尤久讀糙紳披財(cái)嬸潤(rùn)佯萄悄汞演啤蛻肉三嶼道蠟哨慚絢禿涸居四妖耽娜槽椽鉸限阻托獵獄間繭院筒博錐恩尸小場(chǎng)檸肺憨惶旭瘡民是體碾峪備駒貓第松麥侶彭彭墜看纂渭汗廓媒底曾淬譴匠
4、奪粟拷吁楓匈棚閡銑畜肛寨熙臨祟戈植奔誕扎墾躁囊報(bào)壽實(shí)驗(yàn)1-p1口交通信號(hào)燈設(shè)計(jì)-硬件和程序設(shè)計(jì)參考硬件電路如下圖所示:實(shí)驗(yàn)時(shí)可以任選一列的紅黃綠燈,比如選第一列,則a接電源正極+5v,可以用單片機(jī)的口線控制abcd端分別為低電平時(shí)就可以控制第一列的相應(yīng)等的亮滅. 本程序中p1.0接綠燈(a端)0, p1.1接黃燈(b端), p1.2接紅燈(c端).程序如下:/*本程序中p1.0接綠燈(a端)0, p1.1接黃燈(b端), p1.2接紅燈(c端)*/#pragma sfr /* 特殊功能能寄存器聲明 */void delay() /* 燈延時(shí)子函數(shù)定義,具體時(shí)間在實(shí)驗(yàn)中進(jìn)行調(diào)整 */ int i
5、,j; for(i=0;i<500;i+) for(j=0;j<500;j+); void main() /* 主函數(shù)*/ ims=0xcc; /*內(nèi)部存儲(chǔ)器容量切換寄存器設(shè)置,必須有 */ ixs=0x00; /*內(nèi)部擴(kuò)展ram 容量切換寄存器,必須有 */ pm1.0=0; pm1.1=0; pm1.2=0; /* 口線p1.0p1.1p1.2模式為輸出模式*/ while(1) /* 當(dāng)為1時(shí),條件為真,一直循環(huán) */ p1.0=0; p1.1=1; p1.2=1; /*輸出高電平燈不亮,低電平燈亮, 此時(shí)綠燈亮*/ delay();/*綠燈亮延時(shí)*/ p1.0=1; p1.
6、1=0; p1.2=1; /*輸出高電平燈不亮,低電平燈亮, 此時(shí)黃燈亮*/ delay();/*黃燈亮延時(shí)*/p1.0=1; p1.1=1; p1.2=0; /*輸出高電平燈不亮,低電平燈亮, 此時(shí)紅燈亮*/ delay();/*紅燈亮延時(shí)*/ 思考: 1 黃燈閃爍怎樣修改程序? 2 各個(gè)燈亮滅的時(shí)間不一樣又怎樣改變程序? 3 同學(xué)們可以撇開這個(gè)程序,發(fā)揮自己的想象,自己編出自己的不同的信號(hào)燈功能?4 用定時(shí)器來(lái)實(shí)現(xiàn)延時(shí)又怎樣來(lái)修改程序? 5 燈延時(shí)子函數(shù)可以編寫成延時(shí)時(shí)間可變的嗎?怎樣來(lái)改變呢?實(shí)驗(yàn)3-定時(shí)器數(shù)字時(shí)鐘試驗(yàn)-秒表設(shè)計(jì)-硬件和程序設(shè)計(jì)參考硬件設(shè)計(jì)參考:參考程序如下:#pragm
7、a sfr /* 特殊功能寄存器聲明*/#pragma di /*禁止所有中斷(總中斷)函數(shù)聲明,相當(dāng)于ie=0 */#pragma ei /* 所有中斷允許的總中斷允許函數(shù)定義,相當(dāng)與ie=1*/#pragma interrupt inttm000 time_inttm000 /*后面定義的中斷服務(wù)程序聲明,這個(gè)中斷服務(wù)程序就是本實(shí)驗(yàn)的定時(shí)器比較匹配中斷的*/unsigned char led_light10=0xfc,0x18,0x6e,0x5e,0x9a,0xd6,0xf6,0x1c,0xfe,0xde;/* 數(shù)碼管顯示的字形碼,請(qǐng)和硬件連接相對(duì)應(yīng)*/unsigned char i; /
8、*中斷產(chǎn)生次數(shù)*/void delay(int i) /*動(dòng)態(tài)掃描件間隔*/ while(i-); /*循環(huán)i次,就是靠軟件來(lái)延時(shí),就是軟件延時(shí)*/void hd_init() /*硬件初始化子函數(shù)*/pm1=0; /*p1口(8根口線),驅(qū)動(dòng)數(shù)碼管八段二極管,故定義為輸出 */pu1=0; /* 為增加驅(qū)動(dòng)能力,設(shè)置為內(nèi)部上拉*/pm5.0=0; /* 定義為輸出,控制其中一個(gè)數(shù)碼管的公共端,控制整個(gè)這個(gè)數(shù)碼管的*/*的亮滅,和另外一個(gè)p5.1引腳控制另一個(gè)數(shù)碼管的亮滅,二者交替亮滅實(shí)現(xiàn)掃描顯示*/pu5.0=0; /*為增加驅(qū)動(dòng)能力,設(shè)置為內(nèi)部上拉*/pm5.1=0; /* 定義為輸出,控
9、制其中一個(gè)數(shù)碼管的公共端,控制整個(gè)這個(gè)數(shù)碼管的*/*的亮滅,和另外一個(gè)p5.1引腳控制另一個(gè)數(shù)碼管的亮滅,二者交替亮滅實(shí)現(xiàn)掃描顯示*/pu5.1=0; /*為增加驅(qū)動(dòng)能力,設(shè)置為內(nèi)部上拉*/cr000=0x9000; /*設(shè)置捕捉次數(shù),達(dá)到捕捉次數(shù)即產(chǎn)生中斷*/tmc00=0x0c; /*模式寄存器設(shè)置,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/prm00=0x02; /*計(jì)數(shù)時(shí)鐘選擇,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/toc00=0; /*禁止輸出,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/tmif000=0; /*中斷請(qǐng)求,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/tmmk000=0; /*中斷屏蔽,請(qǐng)同學(xué)們預(yù)習(xí)
10、這樣設(shè)置是什么含義*/tmpr000=1; /*中斷優(yōu)先級(jí),請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/void main (void) /*主函數(shù) */ unsigned num10,num; /* 定義秒表十位和個(gè)位變量*/ di(); /* 關(guān)總中斷開關(guān),相當(dāng)于ie=0,*/ ims=0xcc; /* 存儲(chǔ)器切換設(shè)置*/ ixs=0x00; /*存儲(chǔ)器切換設(shè)置*/ hd_init(); /*調(diào)用硬件初始化子函數(shù),進(jìn)行硬件初始化 */ ei(); /*開總中斷開關(guān),相當(dāng)于ie=1*/ while(1) /*主函數(shù)中,不斷進(jìn)行循環(huán)地進(jìn)行數(shù)碼秒表的十位和個(gè)位掃描顯示 */ num10=i/10; /*計(jì)
11、數(shù)次數(shù)取整,取出十位顯示數(shù)值*/num=i%10; /*計(jì)數(shù)值取余,取出個(gè)位顯示數(shù)值*/p5.0=1; /*十位顯示制止*/p5.1=0; /*個(gè)位顯示允許*/p1=led_lightnum; /*秒表的數(shù)碼管的個(gè)位顯示數(shù)據(jù)送出,僅進(jìn)行個(gè)位顯示*/delay(100); /*動(dòng)態(tài)掃描件的個(gè)位顯示時(shí)間間隔*/p5.0=0; /* */p5.1=1; /* */p1=led_lightnum10; /*秒表的數(shù)碼管的十位顯示數(shù)據(jù)送出,僅進(jìn)行十位顯示*/delay(100); /*動(dòng)態(tài)掃描件的十位顯示時(shí)間間隔*/_interrupt void time_inttm000() /*中斷服務(wù)程序定義 *
12、/ i+; /*計(jì)數(shù)次數(shù)加一*/ /*中斷服務(wù)程序中僅僅對(duì)定時(shí)時(shí)間,例如這里是1秒的時(shí)間到了做一個(gè)累加,即累加有多少*/*個(gè)1秒了,即有多少秒了,因?yàn)樯厦娴谋容^寄存器設(shè)置的個(gè)數(shù)就是1秒的計(jì)數(shù)次數(shù),它是*/*根據(jù)1秒時(shí)間除以參考時(shí)鐘得到的 */思考:1怎樣實(shí)現(xiàn)ppg功能?2 怎樣實(shí)現(xiàn)方波輸出?以下是老師對(duì)上面程序設(shè)置的一些說(shuō)明,請(qǐng)同學(xué)們參考:cr000=0x9000; /*設(shè)置捕捉次數(shù),達(dá)到捕捉(比較)次數(shù)即產(chǎn)生中斷*/時(shí)鐘來(lái)源是內(nèi)部時(shí)鐘,固定為8m,p74,高速內(nèi)置振蕩器,這里的frh=8mhz,在配合看p158-159,prm00預(yù)分頻模式寄存器,prm00=0x02; /*計(jì)數(shù)時(shí)鐘選擇,請(qǐng)
13、同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/0x02=0000 0010 ,即:prm001=1,prm000=0,計(jì)數(shù)脈沖的頻率:f=fprs/28 =8m/=8*106/256=31250hz計(jì)數(shù)脈沖的周期:t= 1/f = 1/31250s,即記一個(gè)數(shù)的時(shí)間,那么1s鐘應(yīng)該記多少個(gè)數(shù)(脈沖)呢?1s鐘應(yīng)該記數(shù)為:1 / t = 1/(1/f)=31250 = 0x7a12 , 即應(yīng)該設(shè)置cr000=0x7a12反算一下,若設(shè)置cr000=0x9000,fprs應(yīng)該為多少? fprs = 0x9000*28 =9437184=9.4mtmc00=0x0c; /*模式寄存器設(shè)置,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什
14、么含義*/ p1550x0c = 0000 1100 ,tmc003=1,tmc002=1,tm00和cr000匹配時(shí)進(jìn)入清零&啟動(dòng)模式,tmc001=0,反轉(zhuǎn)定時(shí)器輸出(to00)的條件:tm00與cr000匹配或tm00與cr010匹配ovf00=0,把此位清零,表示從頭開始,開始計(jì)數(shù),并且此次計(jì)數(shù)還沒(méi)溢出。toc00=0; /*禁止輸出,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/ p157ospt00=0 ,在所有模式下(單脈沖輸出模式除外),不要將該位設(shè)置為1。如果該位為1,則將tm00 清零并啟動(dòng)。 ospe00=0 ,連續(xù)脈沖輸出模式toc004=0, cr010 與tm00 匹配
15、時(shí)to00 引腳輸出控制,禁止反轉(zhuǎn)操作lvs00=0, lvr00 =0,to00 引腳輸出狀態(tài)設(shè)置,無(wú)變化toc001=0, cr000 與tm00 匹配時(shí)to00 引腳輸出控制,禁止反轉(zhuǎn)操作 toe00=0,to00 引腳輸出控制,禁止輸出 (to00 引腳輸出恒為低電平)tmif000=0; /*中斷請(qǐng)求,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/if0h.6 =0 , p134inttm000: tm00 與 cr000 匹配(指定比較寄存器),ti010 引腳有效沿檢測(cè)(指定捕捉寄存器),p124tmmk000=0; /*中斷屏蔽,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/mk0h.6=0,p135
16、 表示開屏蔽,tmpr000=1; /*中斷優(yōu)先級(jí),請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/pr0h.6=1 ,表示設(shè)置為低優(yōu)先級(jí),由于只是一個(gè)中斷,這樣就可以了。思考,中斷還需要那些設(shè)置?psw,p137egp和egn 呢?需要設(shè)置嗎?p13,請(qǐng)修改為如下:可能不做修改調(diào)試也沒(méi)問(wèn)題.(建議,不修改請(qǐng)同學(xué)們也可以試試,因?yàn)閱纹瑱C(jī)手冊(cè)上(教材上)的有些東西不一定很清楚,而真正的東西要靠調(diào)試過(guò)程中去理解,就是先為tmc00=0x0;然后再tmc00=0x0c;)tmc00=0x0;cr000=0x; /*設(shè)置捕捉次數(shù),達(dá)到捕捉次數(shù)即產(chǎn)生中斷*/prm00=0x02; /*計(jì)數(shù)時(shí)鐘選擇,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)
17、置是什么含義*/toc00=0; /*禁止輸出,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/tmif000=0; /*中斷請(qǐng)求,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/tmmk000=0; /*中斷屏蔽,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/tmpr000=1; /*中斷優(yōu)先級(jí),請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/tmc00=0x0c; /*模式寄存器設(shè)置,請(qǐng)同學(xué)們預(yù)習(xí)這樣設(shè)置是什么含義*/實(shí)驗(yàn)4-pwm電機(jī)試驗(yàn)-僅上升再停下又上升,而無(wú)緩慢下降-硬件和程序設(shè)計(jì)參考硬件電路參考如下:程序參考如下:#pragma sfr#pragma di #pragma ei #pragma interrupt inttm000
18、time_inttm000 unsigned char temp=50; void hd_init() /* 本實(shí)驗(yàn)需要的硬件初始化 cr000=0x1a12; /*tm00定時(shí)器/計(jì)數(shù)器,做間隔定時(shí)器而且中斷的時(shí)間tmc00=0x00; /*tm00定時(shí)器/計(jì)數(shù)器停止操作(計(jì)數(shù)),為下面進(jìn)行控制寄存器設(shè)置prm00=0x02; /*預(yù)分頻率模式寄存器設(shè)置tm00計(jì)數(shù)的輸入時(shí)鐘toc00=0; /*禁止tm00定時(shí)器/計(jì)數(shù)器的輸出引腳(p01)輸出tmif000=0; /*對(duì)inttm000中斷標(biāo)志清0tmmk000=0; /*解除tm00定時(shí)器/計(jì)數(shù)器的中斷屏蔽tmpr000=1; /*設(shè)置
19、tm00定時(shí)器/計(jì)數(shù)器的中斷為低優(yōu)先級(jí)tmc00=0x0c; /*設(shè)置tm00定時(shí)器為cr000與tm00匹配時(shí)清0并啟動(dòng)tm00計(jì)數(shù)pm1.5=0; /*設(shè)置toh0/p1.5引腳為輸出,是pwm波輸出的要求pm1.6=1;tmhmd0=0x09; /*設(shè)置h0在pwm模式下工作,并且啟動(dòng)h0計(jì)數(shù),開始工作void main (void)di(); /*關(guān)總中斷開關(guān)ims=0xcc; ixs=0x00;hd_init(); /* 調(diào)用本實(shí)驗(yàn)需要的硬件初始化子函數(shù)(程序) ei(); /*打開總中斷開關(guān)cmp00=250; /*占空比周期設(shè)置cmp10=50; /*占空比高電平設(shè)置,配合周期就
20、形成了占空比的設(shè)置tmhe0=1; /*啟動(dòng)h0開始工作while(1); /*在主程序這里什么也不干,僅等待tm00中斷而改變cmp10,高電平的值,_interrupt void time_inttm000() /*tm00定時(shí)計(jì)數(shù)器的cr000和tm00匹配中斷服務(wù)程序 tmhe0=0; /*停止h0 temp=temp+10; /*中間變量值,改變,加10每次 if(temp>250) /*到達(dá)最高占空比時(shí),重新對(duì)中間變量賦初值50,重新開始 temp=50; cmp10=temp; /*中間變量的值最終是送給占空比設(shè)置寄存器,而不斷改變占空比 tmhe0=1; /* 占空比改變
21、后,重新啟動(dòng)h0開始現(xiàn)象是速度慢慢上去,然后停下來(lái),再上去,再停下來(lái),不斷循環(huán)。思考:怎樣實(shí)現(xiàn)速度慢慢上去,然后慢慢停下來(lái), 不斷循環(huán)呢?(這也是本次實(shí)驗(yàn)的目的.),下面列出參考答案:請(qǐng)同學(xué)們實(shí)驗(yàn)時(shí)作為參考:修改程序如下:.unsigned char temp=50; /*定義中間變量,不斷改變占空比int dc_motor_sheng=1; /*定義上升和下降的過(guò)渡中間變量,為1應(yīng)該上升,為0下降._interrupt void time_inttm000() /*tm00定時(shí)計(jì)數(shù)器的cr000和tm00匹配中斷服務(wù)程序 tmhe0=0; /*停止h0 if(dc_motor_sheng=1
22、) /*進(jìn)入中斷后,判斷是該增加占空比還是該減小占空比 temp=temp+10; /*上升時(shí),先增加高電平的時(shí)間 if(temp>250) /*判斷是否上升到比周期值大 temp=temp-10; /*如果比周期值大,則減10,保持上一中斷中的值 dc_motor_sheng=0; /*同時(shí)給下降標(biāo)志值 else /*不是該上升,就是該下降了 temp=temp-10; /*下降了,則中間變量值不斷減10 if(temp<50) /*下降到設(shè)定的最小占空比了嗎? temp=temp+10; /*下降到設(shè)定的最小占空比時(shí),加10,保持上一中斷中的值 dc_motor_sheng=1
23、; /*同時(shí)給該上升標(biāo)志值 cmp10=temp; /*中間變量的值最終是送給占空比設(shè)置寄存器,而不斷改變占空比 tmhe0=1; /* 占空比改變后,重新啟動(dòng)h0開始 思考:這里是用tm00做間隔定時(shí)器和h0工作在pwm方式下來(lái)實(shí)現(xiàn)的,能用軟件延時(shí)取代tm00定時(shí)來(lái)實(shí)現(xiàn)嗎?實(shí)驗(yàn)2-外部中斷程序設(shè)計(jì)-中斷按鍵按下次數(shù)計(jì)數(shù)數(shù)碼管顯示-硬件和程序設(shè)計(jì)參考硬件電路參考如下:程序參考如下:#pragma sfr#pragma interrupt intp0 led_intp0 /* 定義使用intp0中斷,中斷函數(shù)名led_intp0*/#pragma di /*禁止使用中斷功能聲明*/#pragma
24、 ei /*允許使用中斷功能聲明*/ /*數(shù)碼管編碼數(shù)組*/unsigned char led_light10=0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f;unsigned char j=0; /*按鍵次數(shù)變量*/void hdinit() /*硬件初始化*/pm1=0; /*p1口輸出數(shù)碼管字型碼,所以設(shè)置為輸出*/pu1=0xff; /*由于p1口直接驅(qū)動(dòng)數(shù)碼管顯示,為增大驅(qū)動(dòng),設(shè)置為內(nèi)部上拉*/pm12.0=0; /*p12.0口線要作為中斷多功能,設(shè)置為輸出和內(nèi)部上拉 */pu12.0=1;pif0=0; /*中斷請(qǐng)求標(biāo)志,沒(méi)有中
25、斷請(qǐng)求*/pmk0=0; /*中斷屏蔽標(biāo)志,允許中斷*/ppr0=1; /*中斷優(yōu)先級(jí),低優(yōu)先級(jí)*/egp.0=1; /*與egn組合,上升沿有效*/egn.0=0;void main (void) di(); /*首先做準(zhǔn)備,禁止中斷*/ims=0xcc;ixs=0x00;hdinit();ei(); /*準(zhǔn)備完成,允許中斷*/while(1) /*啥也不干,就等待中斷,僅是在這個(gè)實(shí)驗(yàn)中使用中斷,實(shí)際不是這樣/*_interrupt void led_intp0() /*中斷函數(shù)*/ p1= led_lightj; /*p1賦值,數(shù)碼管顯示相應(yīng)數(shù)值*/j+; /*按鍵次數(shù)加一*/if(j=1
26、0) /*如果按鍵次數(shù)達(dá)到十次,按鍵計(jì)數(shù)歸0*/j=0; 思考: 如果用兩位數(shù)碼管,從099循環(huán)計(jì)數(shù)又該怎樣設(shè)計(jì)硬件和軟件呢?實(shí)驗(yàn)5-ad轉(zhuǎn)換程序設(shè)計(jì)-用電位器控制直流電機(jī)轉(zhuǎn)速-硬件和程序設(shè)計(jì)參考硬件設(shè)計(jì)參考如下:程序參考如下:/*本程序功能是用電位器轉(zhuǎn)動(dòng)來(lái)控制直流電動(dòng)機(jī)的轉(zhuǎn)速/*具體為:直流電機(jī)的轉(zhuǎn)速用h0產(chǎn)生的pwm波來(lái)控制。/*由a/d轉(zhuǎn)換器的ani0通道采集電位器的電壓,用得到的數(shù)字量來(lái)改變cmp10占空比的高電平值,/*從而改變占空比,周期不變,這樣直流電機(jī)的轉(zhuǎn)速不斷隨電位器的轉(zhuǎn)動(dòng)而改變/*思考:用tm50替代h0產(chǎn)生pwm波形控制電機(jī),在程序上和硬件上怎樣改變?#pragma sf
27、r#pragma di /*禁止使用中斷功能聲明*/#pragma ei /*允許使用中斷功能聲明*/#pragma interrupt intad motor_intad /*聲明a/d轉(zhuǎn)換結(jié)束中斷服務(wù)函數(shù)*/void hd_init() /* 本實(shí)驗(yàn)需要的硬件初始化 /* 先中斷相關(guān)的sfr寄存器設(shè)置*/adif=0; /中斷標(biāo)志清0admk=0; /a/d中斷不屏蔽,允許a/d中斷條件之一adpr=1; /中斷優(yōu)先級(jí)/*再a/d相關(guān)的寄存器設(shè)置*/adcs=0; /a/d轉(zhuǎn)換總開關(guān)禁止adce=1; /允許比較器工作/*注意adm的第51位(fr2fr0、lv1和lv0)設(shè)置a/d轉(zhuǎn)換時(shí)
28、間的,采用默認(rèn)值,影響很小或不影響。adpc=0; /端口功能配置,模擬/數(shù)字,選擇ani0/p2.0-ani7/p2.7為a/d轉(zhuǎn)換端口 /但我們只用到了ani0/p2.0,考慮只設(shè)置一個(gè)不影響其它的應(yīng)該怎樣設(shè)置?pm2.0=1; /端口設(shè)置為輸入功能,必須配合上面的adpc的設(shè)置ads=0; /通道選擇,選擇ani0通道/*用h0實(shí)現(xiàn)pwm輸出的相關(guān)寄存器設(shè)置*/tmhmd0=0x49;/二進(jìn)制為:0100 1001,依次為:0停止h0計(jì)數(shù),100選擇計(jì)數(shù)時(shí)鐘,/*10選擇h0為pwm功能,0定時(shí)器輸出默認(rèn)為低電平,1允許定時(shí)器輸出cmp00=255; /設(shè)置h0輸出pwm波形的周期cmp
29、10=50; /設(shè)置占空比的初始高電平初值為50 pm1.5=0; /*h0的輸出端口設(shè)置為輸出,以輸出pwm波形,控制直流電機(jī)的轉(zhuǎn)速void main (void) di(); /*關(guān)總中斷開關(guān)ims=0xcc; /*內(nèi)部存儲(chǔ)器(ram和rom)容量切換的設(shè)置,對(duì)0547內(nèi)部存儲(chǔ)器是固定的, /*設(shè)置也固定為cchixs=0x00; /*內(nèi)部擴(kuò)展ram容量切換的設(shè)置,對(duì)0547內(nèi)部ram是固定的,設(shè)置也固定為00hhd_init(); /* 調(diào)用本實(shí)驗(yàn)需要的硬件初始化子函數(shù)(程序)tmhe0=1; /*啟動(dòng)h0開始工作,開始在p1.5輸出pwm波形adcs=1; /a/d轉(zhuǎn)換總開關(guān)打開,開始對(duì)ani0通道的輸入模擬量進(jìn)行a/d轉(zhuǎn)換ei(); /*打開總中斷開關(guān)while(1); /*在等待,到中斷去執(zhí)行相應(yīng)處理_interrupt void motor_intad() /*a/d轉(zhuǎn)換結(jié)束的中斷服務(wù)函數(shù) di(); /*關(guān)總中斷開關(guān) adif=0; /中斷標(biāo)志清0 adcs=0; /a/d轉(zhuǎn)換總開關(guān)禁止 cmp10=adcrh; /控制占空比adcs=1; /a/d轉(zhuǎn)換總開關(guān)打開,開始對(duì)ani0通道的輸入模擬量進(jìn)行a/d轉(zhuǎn)換 ei(); /*打開總中斷開關(guān)請(qǐng)同學(xué)們?cè)谡n后對(duì)照硬件認(rèn)真閱讀程序,不懂的地方請(qǐng)認(rèn)真閱讀相關(guān)部分的端口功能章節(jié)講解的存儲(chǔ)器含義和相
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生職業(yè)生涯規(guī)劃創(chuàng)業(yè)計(jì)劃書模板30
- 《電氣控制原理圖》課件
- DB32T-建筑工程BIM規(guī)劃報(bào)建數(shù)據(jù)規(guī)范編制說(shuō)明
- 給予是快樂(lè)的課件公開課專用
- 《口腔潔治課件》課件
- 基因工程的基本操作程序課件
- 《TA溝通分析課程》課件
- 《伊犁河大橋》課件
- 生活處處有哲學(xué)課件
- 單位管理制度展示匯編【員工管理篇】
- 慢阻肺GOLD指南解讀
- T-BIE 003-2023 通孔回流焊接技術(shù)規(guī)范
- 口腔頜面外科學(xué) 09顳下頜關(guān)節(jié)疾病
- 臺(tái)達(dá)變頻器說(shuō)明書
- 2023年廣東羅浮山旅游集團(tuán)有限公司招聘筆試題庫(kù)及答案解析
- DB11-T1835-2021 給水排水管道工程施工技術(shù)規(guī)程高清最新版
- 解剖篇2-1內(nèi)臟系統(tǒng)消化呼吸生理學(xué)
- 《小學(xué)生錯(cuò)別字原因及對(duì)策研究(論文)》
- 智慧水庫(kù)平臺(tái)建設(shè)方案
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學(xué)
- 糧食平房倉(cāng)設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論