久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: [轉(zhuǎn)帖]淺談PIC單片機(jī)程序設(shè)計(jì) [打印本頁(yè)]

作者: srvee    時(shí)間: 2012-3-20 10:12
標(biāo)題: [轉(zhuǎn)帖]淺談PIC單片機(jī)程序設(shè)計(jì)

  淺談PIC單片機(jī)程序設(shè)計(jì)

  美國(guó)微芯公司開(kāi)發(fā)的CMOS工藝PIC系列單片機(jī),特別是采用內(nèi)置第二代Flash存儲(chǔ)器的微控制器在快速應(yīng)用方面具有獨(dú)到之處。PIC單片機(jī)系列內(nèi)大都包含運(yùn)算器、存儲(chǔ)器、A/D、PWM、輸入和輸出I/O、通信等常用接口。自由靈活的定義功能可以適應(yīng)不同的控制要求。

  PIC單片機(jī)采用精簡(jiǎn)指令集,例如對(duì)于PIC16F716單片機(jī),只有35條單字節(jié)指令。要用這么少的指令實(shí)現(xiàn)復(fù)雜的控制或計(jì)算,顯然要在程序設(shè)計(jì)上多做文章,以下就程序設(shè)計(jì)需要注意的問(wèn)題談一些看法。

  一、區(qū)分指令的大小寫(xiě)

  編寫(xiě)PIC單片機(jī)的源程序,除了源程序的開(kāi)始處需要嚴(yán)格的列表指令外,還須注意源程序中字母符號(hào)的大小寫(xiě)規(guī)則,否則在PC機(jī)上匯編程序時(shí)不會(huì)成功。在源程序中都會(huì)使用偽指令I(lǐng)NCLUDE。這條指令將列表中指定的單片機(jī)文件(在MPLAB中)瀆入源程序作為源程序的一部分,所以凡是MPLAB中有關(guān)該單片機(jī)已有的寄存器在源程序中無(wú)須再用賦值指令(EQU)賦值,這就使所建立的源程序大為簡(jiǎn)化。

  此外,由于有了偽指令I(lǐng)NCLUDE,所以根據(jù)MPLAB軟件中的格式,在源程序中的操作數(shù)凡是涉及MPLAB已規(guī)定的寄存器名稱(chēng)的,其字母一律只能大寫(xiě),不能小寫(xiě)。其余操作碼、符號(hào)字母可任意大小寫(xiě),但0x中的X應(yīng)小寫(xiě)。否則匯編不會(huì)成功。鑒于上述原因,為了書(shū)寫(xiě)方便,在使用MPLAB軟件時(shí),PIC單片機(jī)的源程序均用大寫(xiě)字母為宜(0x例外)。

  以下舉例有關(guān)機(jī)器人控制的實(shí)現(xiàn)。控制部分采用PIC16F7X系列單片機(jī),運(yùn)用匯編語(yǔ)言編程,運(yùn)行速度較快,能夠達(dá)到系統(tǒng)的要求。

  二、動(dòng)作標(biāo)志位的使用

  在整個(gè)控制中,組合的動(dòng)作很多,當(dāng)所有動(dòng)作定位都通過(guò)光電開(kāi)關(guān)控制時(shí),在程序編寫(xiě)上就有一些問(wèn)題。如要求左手上升到鼓掌位、右手上升到舉手位(手初始位置在最下的放下位),光電開(kāi)關(guān)0有效(即為0時(shí)是擋住),到達(dá)正確位置。用簡(jiǎn)單的理解可以寫(xiě)成下面的程序:

  list P=16c73

  call lefthandup

  call righthandup

  L0 call readinsignal

  bdss csl_v,lefthandligbts

  call lefthandstop

  bfsc csl_v,righthandlight4

  goto L0

  call righthandstop

  L1 call readinsignal

  bfsc csl_v,lefthandlight3

  goto L1

  call lefthandstop

  lefthandlight表示光電開(kāi)關(guān),由此判斷是否到相應(yīng)的位置。1表示在手臂最下面的位置;2表示在手臂的握手位置;3表示在手臂的鼓掌位置;4表示在手臂的高舉手位置。上面程序描寫(xiě)左手臂上升到舉手位置和右手臂上升到鼓掌位置并停止的過(guò)程。先判斷左手到達(dá)否,到達(dá)則左手停止,接著看右手是否到達(dá)舉手位,到達(dá)則停止,否則循環(huán)上述的檢測(cè),直到左手到達(dá)鼓掌位,右手到達(dá)舉手位。

  注意,這里的3,4表示的就是鼓掌位、舉手位。經(jīng)過(guò)循環(huán)檢測(cè)可以讓手臂停在各位上,然而機(jī)械動(dòng)作是有慣性的,機(jī)械停止位可能在該位的上一點(diǎn)或下一點(diǎn),這就影響下面動(dòng)作的進(jìn)行,可能在若干動(dòng)作后機(jī)械動(dòng)作出現(xiàn)失常,也就是程序沒(méi)法正常地運(yùn)行。在此情況下,需要修改程序的編寫(xiě)方式,采用標(biāo)志位來(lái)控制動(dòng)作的進(jìn)行。如果采用控制標(biāo)志位,一定要在動(dòng)作子函數(shù)中對(duì)標(biāo)志位置零。

  三、區(qū)分GOTO和CALL指令的使用場(chǎng)合

  在PIC的匯編程序中,CALL與GOTO指令的使用比較多、且容易混淆,一般情況下,在于程序與主程序之間大多用CALL指令;而狀態(tài)轉(zhuǎn)換模塊之間大多用GOTO指令,即由此狀態(tài)進(jìn)入另一種狀態(tài)不需返回。由于PIC單片機(jī)的堆棧有限,在程序中,不能無(wú)止境地使用GOTO語(yǔ)句,否則會(huì)使堆棧溢出,程序無(wú)法正常運(yùn)行。各個(gè)小程序內(nèi)部循環(huán)占用堆棧的級(jí)數(shù)不多,使用GOTO指令是可行的,但在大的程序中用GOTO則無(wú)法返回到調(diào)用前程序的下一條指令。CALL指令完成調(diào)用完子程序后返回到調(diào)用前的程序。如在超聲檢測(cè)中程序如下:

  list D=16c76

  start:call setcpu

  call automaflsmstate1

  L3 call readinsignal

  bfsc es2_v,ultrasonicdetect1

  goto L3

  goto automatlsmstate2:

  automatlsmstate2:

  return

  automafismstate1、automatlsmstate2表示兩種狀態(tài),ultrasonicdetect1表示一個(gè)輸入超聲檢測(cè)信號(hào)。上面程序描寫(xiě)調(diào)用automatlstmstatei狀態(tài),執(zhí)行完后進(jìn)行下面的檢測(cè)uhrasonicdetect1,沒(méi)有觸發(fā)就一直循環(huán)檢測(cè),觸發(fā)就進(jìn)入automatlsmstate2狀態(tài),執(zhí)行完也不再回到下面的程序。

  由于PIC單片機(jī)的堆棧有限,在程序中不能無(wú)止境地使用GOTO指令,否則會(huì)使堆棧溢出,程序無(wú)法正常運(yùn)行。但是在有些時(shí)候,例如當(dāng)程序出現(xiàn)分支時(shí),則不得不使用GOTO指令。對(duì)于PIC16F7X系列單片機(jī),程序出現(xiàn)分支時(shí)只能通過(guò)STATUS寄存器的z位或c位進(jìn)行判斷。這時(shí)在兩種情況的前一種情況下,必須使用GOTO指令進(jìn)行轉(zhuǎn)移;否則在執(zhí)行完第一種情況后,緊接著又執(zhí)行第二種情況。因此,在使用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),應(yīng)該將程序分解成一級(jí)級(jí)的子程序;然后在程序之間進(jìn)行調(diào)用,盡量將GOTO指令跳轉(zhuǎn)的范圍縮小。

  本文來(lái)自: 賽微電子網(wǎng)-電子工程師社區(qū) 原文地址:http://www.srvee.com/edu/data/qtPICdpjcxsj_63557.html






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美大片一区 | 国产高清在线精品 | a爱视频 | 青青久久av北条麻妃海外网 | 日日操视频 | 成人中文网 | 精品欧美黑人一区二区三区 | 国产一区二区精品自拍 | 求毛片| 亚洲一区不卡 | 天天天天操 | 日本小电影在线 | 污污免费网站 | 国产乱码精品一品二品 | 香蕉大人久久国产成人av | 手机av在线 | 国产精品黄色 | 免费视频二区 | 精品视频一区二区三区在线观看 | 综合网伊人 | 正在播放国产精品 | 日韩欧美国产不卡 | 天天色综 | 日本成人二区 | 欧美日韩亚洲一区二区 | wwwxxx国产 | 又爽又黄axxx片免费观看 | 国产一区二区三区亚洲 | 久久国产精品视频 | 精品国产乱码久久久久久闺蜜 | 在线观看国产视频 | 免费黄色特级片 | 亚洲国产精品一区二区三区 | 日韩精品成人一区二区三区视频 | 欧美在线视频免费 | 青青艹在线视频 | 欧洲一区二区三区 | 午夜电影在线播放 | 中文字幕一区二区三区不卡 | 日韩a视频 | 日韩中文av在线 |