單片機編程范文
時間:2023-04-08 05:33:29
導語:如何才能寫好一篇單片機編程,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。
篇1
中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2007)03-10765-01
1 引言
隨著單片機技術日新月益的發展,學習它的人可是越來越多了。對于初學者來說,好多人一開始總會被單片機的各種各樣的編程語言搞糊涂了。因為單片機目前的編程語言常見的有四種,即匯編語言、C語言、PL/M和BASIC。究竟要學哪一種編程語言好呢?我們先來做個比較吧。
2 單片機的BASIC編程語言
BASIC是一種高級語言,它的英文含義是“初學者通用符號指令代碼”,是在1965年5月,由美國科學家托馬斯?庫爾茲研制出來的。10多年后,微軟公司把它移植到微型機上。幾十多年來,BASIC語言一直被認為是初學編程的語言。它已經由QBASIC發展到VB#版本,具備了很多結構化思想和編程方式,如函數、模塊、局部變量、全局變量、數據傳遞等。早期的BASIC語言由于生成的代碼不是最終目標機器的代碼,而是經過一個RUNTIME程序解釋后運行的,所以執行效率低。而單片機的BASIC編譯器是直接將程序代碼編譯成相應芯片的機器碼,不需要在單片機的內存中駐留RUNTIME程序,執行效率與其他編譯器編譯出來的一樣。
我們現在以MCS-Electronics公司開發出來的BASCOM-8051開發環境為例,簡要介紹一下以BASIC語言為基礎的單片機編程系統。
它和一般BASIC語言一樣具有如:For、To、Step、If、Else、End 、Select Case等等命令,其用法及功能是沒有什么區別的,因此初學者比較容易入門。
另外,它還有針對單片機硬件所設計的命令如:LCD命令可以用一條命令來實現LCD的顯示操作。
Cls '清LCD屏
Lcd"Hello world." '向LCD輸入字符串
類似于這樣的命令主要是提供了直接對單片機及其外部硬件的操作,特別是提供了對單片機端口的直接操作,如:P1、P2、P2.1、P0.3等等,簡化了整個開發過程,是開發人員重點學習的部分。
例如有硬件電路如圖(1)所示,編程使發光二極管間隔兩秒鐘閃爍一次的程序如下:
While I = 2
P1.0 = Not P1.0
Wait I
Wend
End
3 單片機的PL/M編程語言
PL/M 語言是Intel公司從8080微處理器開始為其系列產品開發的編程語言,其特點是:
3.1 簡單易學
PL/M-51語言只有兩類語句:一類是說明語句,用于說明變量和過程;另一類是可執行語句,如賦值語句、條件語句和循環語句等。這些語句的功能和BASIC語言中相應的語句相似,如:
P1=02H;/*賦值語句*/
IF M>2 THEN N=P1;/*條件語句*/
DO I=0 TO 10;/*循環語句 */
3.2 可讀性好
PL/M-51是一種結構化語言,其程序是塊式結構,可采用縮進式方法書寫源程序,使程序層次清楚,便于理解和閱讀。一個完整的程序可由多個模塊組成,而每個模塊又是由多個程序塊構成。
3.3 可靠性高
PL/M-51編譯軟件檢查用戶程序對單片機的各種資源使用情況,對沖突使用情況或不合理使用情況能提出警告,并能自動為用戶程序合理分配內存。
3.4 隔離性好
PL/M-51中,既可有全局的靜態變量,也可有局部的動態變量,對于全局性的靜態變量,其性質和BASIC中的變量一樣,該變量在整個程序中均有效。對于局部的動態變量,它只有在其所說明的程序塊中或過程中有效,在該程序塊或過程之外則無效。局部動態變量的特點是,當由多個人共同編制一個程序中的不同模塊時,而不必擔心是否使用了相同的標識符而發生沖突。模塊化的程序設計增加了程序設計的靈活性的方便性。
3.5 兼容性好
PL/M-51可同匯編語言或其他語言的目標模塊連接起來,生成可執行代碼如果用戶必須使用匯編語言編制一段程序,或是想利用已調好的匯編語言程序塊,那么該段匯編可以很方便地連接到PL/M-51程序目標塊中。
3.6 具有良好的算法庫和庫管理能力
PL/M-51語言具有INTEL公司所提供的算法庫和庫管理功能用戶能利用現成的算法庫完成加、減、乘、除等運算,并能建立自己的特定算法庫,使得編程一勞永逸,提高軟件的開發效率。
由上面幾點可見,PL/M語言是類似于Pascal一種語言,是一種結構化語言。PL/M編譯器好像匯編器一樣可產生緊湊代碼,可以說它是一種"高級匯編語言",可詳細控制著代碼的生成。但對51系列的單片機來說,PL/M不支持復雜的
算術運算、浮點變量而無豐富的庫函數支持。學習PL/M無異于學習一種新語言。
4 單片機的匯編語言
匯編語言是一種用文字助記符來表示機器指令的符號語言,是最接近機器碼的一種語言。其主要優點是占用資源少,程序執行效率高,由于它一條指令就對應一條機器碼,每一步的執行動作都很清楚,并且程序大小和堆棧調用情況都容易控制,調試起來也比較方便。但是不同的類型的單片機,其匯編語言可能有點差異,所以不易移植。比如你在PIC12CE518單片機上用匯編語言編了一個程序,到了STC89C51單片機上那可就運行不了,因為他們的指令系統是有區別的。
單片機的匯編語言非常像其他匯編語言。指令系統比第一代微處理器要強一些。但單片機擁有不同存儲區域使得其編程變得復雜一些,可是作為一位電子工程師,懂得匯編語言就可幫助你了解影響任何語言效率的特殊規定。例如,懂得匯編語言指令就可以使用在片內RAM作變量的優勢,因為片外變量需要幾條指令才能設置累加器和數據指針進行存取。同樣的,當要求使用浮點數和啟用函數時也只有具備匯編編程經驗才能避免生成龐大的、效率低的程序,對于這方面的編程,沒有匯編語言是做不到的。
5 單片機的C語言
單片機的C語言是一種編譯型程序設計語言,它兼顧了多種高級語言的特點,并具備匯編語言的功能。C語言具有功能豐富的庫函數,運算速度快,編譯效率高,有良好的可移植性,而且可以實現直接對系統硬件的控制。此外,C語言程序具有完整的程序模塊結構,從而為軟件開發中采用模塊化程序設計方法提供了有力的保障。與匯編相比,有如下優點:
(1)對單片機的指令系統不要求了解,僅要求對51的存儲器結構有初步了解,至于寄存器分配、不同存儲器的尋址及數據類型等細節均由編譯器管理。
(2)程序有規范的結構,可分為不同的函數。這種方式可使程序結構化,將可變的選擇與特殊操作組合在一起,改善了程序的可讀性。
(3)編程及程序調試時間顯著縮短,從而提高效率。 提供的庫包含許多標準子程序,具有較強的數據處理能將已編好程序可容易的植入新程序,因為它具有方便的模塊化編程技術。
單片機C語言作為一種非常方便的語言而得到廣泛的支持,C語言程序本身并不依賴于機器硬件系統,基本上不做修改就可根據單片機的不同較快地移植過來。
綜上所述,單片機的四種編程語言各有各的優缺點,作為單片機初學者,筆者認為還是應該先學習匯編語言,不一定要學得很精很熟悉,但要有一定的了解。因為匯編語言程序除了具有簡潔明快、跳躍性強、占ROM資源少等優點以外,還因它和單片機底層硬件緊密聯系,可以讓初學者更加了解單片機硬件系統各種資源,熟悉各個功能模塊的作用,從而為編出更高效率的程序打好扎實的基礎。
用單片機匯編語言編寫的程序代碼效率高,但學習起來相對難度較大,而且對于一個大型項目,如果完全采用匯編語言來編程,就顯得很繁瑣,尤其是遇到算法方面的問題時,匯編語言根本就應付不了。況且現在單片機的主頻在不斷的提高,在高頻率時鐘的作用下,我們完全不需要那么高效率的代碼;另外,單片機的ROM和RAM空間也在不斷的增加,足夠裝得下你用C語言寫的任何程序代碼,單片機C語言相關的資料又多又好找,可移植性非常好,比如只需要改變一個IO口寫個溫度傳感器的程序在任何一個單片機上都能使用。由此可見用單片機C語言進行程序設計,已成為單片機軟件開發的一個主流,作為一個技術全面并涉足較大規模的軟件系統開發的單片機開發人員最好能夠掌握基本的C語言編程。
當然,有時候用單片機C語言也不能夠實現所有要編寫程序的功能,比如當想編寫一個精確控制的定時程序時,用起匯編語言來還是比較方便的。因此想成為一個優秀的單片機編程技術員,最好就是能懂得單片機C語言和匯編語言的混合編程。
參考文獻:
[1]藍點方舟科技網. . 8051系列單片機BASIC語言開發環境簡介[Z].
[2]/. PL/M-51高級語言特點[Z].
[3]王杰潔,耿英杰. 單片機C語言和匯編語言的簡單比較[Z].
篇2
關鍵詞:51單片機;多任務;動態顯示;鍵盤顯示控制
中圖分類號:TP313文獻標識碼:Adoi: 10.3969/j.issn.1003-6970.2011.03.006
51 Single-Chip Computer Multitask Programming Process and it's Application
XU Hua1,2
(1.College of Software and Engineering,Chongqing University,Chongqing 400044, China;
2.No.59 Institute of China Ordnance Industry,Chongqing 400039, China)
【Abstract】This paper explain One Multitask Programming Process on 51 Single-Chip Computer System. Unlike the Principle of Real-time Operating System , This Process is neither based on the time sharing Operation nor using interrupt for switchover task. One simple system consisted of the 4 digits LED digit display, the 12 keys scan keyboard and the series port used for communication with other system is taken for example, to illustrate this process is used in programming, Single Chip Computer system has characteristic of simpler hardware, higher efficiency of operation and better real-time. This process is based on assemble language, but it is easy for C51 language according to the same principle and thinking.
【Key words】51 Single-chip Computer;Multitask;Dynamic scan Display;Keyboard and display control
0引言
51單片機在微型智能控制系統中應用廣泛。隨著人們對控制系統要求的不斷提高,針對51單片機不具備實時多任務支持功能,在控制系統的進一步發展很受限制的情況,人們做了很多關于51單片機多任務實時編程的研究和實驗。羅江等在四川省教育廳資助的基金項目《基于多任務機制的51單片機在微型智能控制系統中的應用研究》中,借鑒多任務操作系統的設計特點,提出了利用時間片分配機制,實現多任務分時輪流執行,和利用中斷強行切換任務的多任務編程方法[1];在的單片機技術交流中,阮元提出了依據分時操作系統思想實現單片機多任務編程的方法[2];廈門大學的王輝堂等在一安防系統的設計中,通過對嵌入式實時操作系統RTOS的分析,認為其核心是利用中斷切換任務,提出了用C51編程實現的多任務編程方案[3];美國Keil公司開發的MCS51系列單片機的實時多任務操作系統RTX51,占用定時器T0中斷產生時間片來切換任務[4-5];此外,還有時間片輪轉算法[6]、時分多線程[7]等多種單片機多任務設計方法在實際系統中應用。
綜上所述,在目前51單片機多任務編程工作中,大多采用了基于實時操作系統RTOS分時操作的思路和采用中斷切換任務。但也有人認為,這種任務切換產生大量數據,額外占用系統資源,不適合資源有限的單片機系統[8]。本文提出的51單片機多任務編程方法,不采用時間片,而是基于一個完整過程切換任務,并將任務調度分配到各任務內部,任務的切換和調度都不占用系統額外資源。通過實際系統應用證明,用該方法設計系統,硬件電路更簡單,單片機工作效率更高。
本文首先闡述多任務編程設計方法的原理,然后介紹幾種典型任務的設計方法,最后通過一個簡單的實例來說明該方法的可行性。
1多任務設計原理
多任務要求系統在同一時間執行多個任務,對于一個處理器,并不可能在同一時間運行多個任務程序,而是按時間片在各個任務間快速切換執行來完成多任務要求的。這是基于實時操作系統RTOS的方法。本文提出的方法也是按時間片切換任務的,但有所不同的是,執行任務的時間不是由定時器平均分配的,而是按照執行任務中一個完整過程的時間來自動分配的。
在單片機系統設計中,可按系統的功能或模塊劃分為任務,而每個任務可按具體作業細分為各個過程??梢娙蝿沼蛇^程組成。按時間片分配任務的設計,任務的調度可分為兩級,一是對任務的調度,二是在每項任務中對過程的調度。由于采用兩級調度,比較繁瑣,也占用了系統較多資源。如果不考慮對任務的調度,直接調度各任務的過程,其系統運行的效率就能極大地提高。同時,在任務中主動設置切換點自動切換任務,切換時不需保留大量現場數據,系統效率就會更高。再進一步,將過程的調度分配到各個實際任務之中,不設專門的過程調度表。系統的運行效率就會達到最高。為此本文提出的51單片機多任務編程的原理是:
1)將系統的各任務依次排成隊列,處理器依次執行各任務,在執行完最后一項任務后,馬上回頭執行第一任務,并以此循環。
2)在每次執行一項任務時,只執行該任務的其中一個過程,并完整執行。其它的過程需等待下一輪執行該任務時才有機會執行。這可保證系統盡快從本任務切換到其它任務。
3)每個過程不包括循環延時、等待等浪費CPU時間的程序,循環延時、等待等程序將作為一個特殊過程獨立設計。
4)常規任務(甚至實時任務)都設有一個空執行過程,以便系統跳過該任務的執行。優先任務或搶占式任務可利用此功能保證任務優先執行或獨占運行。
5)系統不設專門的過程調度表,過程的調度在實際任務之中進行。
6)中斷只用于調度過程,不處理任務,更符合系統實時性要求。
7)系統、任務和過程間均通過全局變量共享和交換數據。任務、過程間切換不保留現場數據和傳遞參數。
由此可見、系統按完整過程(最小作業單元)自動切換任務,不需保留臨時現場數據,不需定時被動切換,不需額外的調度表。和單任務編程相比,多任務編程也沒有占用系統任何額外資源。其結構和代碼的可讀性也沒有較大的改變。
實際上,設計操作系統與設計應用系統最本質的區別是,操作系統面臨的任務是不確定的,在設計完成后還允許應用添加新的任務;而應用系統面臨的任務是事先定制的。因此,多任務應用系統的設計可不完全基于操作系統分時的思路。本文提出的多任務編程方法,就不需要強制的時間片劃分,也不需要占用中斷切換任務。
2多任務編程的實現方法
2.1一般任務的設計
任務分為實時任務和常規任務,實時任務是需無條件執行的任務,即在系統每次掃描任務隊列時都必需執行的任務。通常是顯示,檢測等實時任務;常規任務是在滿足一定條件時才啟動的任務,通常被中斷或其它任務調度,也能被中斷或其它任務中止。為將實時任務與常規任務排在同一隊列中執行,我們為常規任務增設了一個特殊過程,在調度這個過程時,該任務不執行任務的實際操作。這個過程稱為空過程。例如,下面例舉的任務包括一個空過程和三個實際操作過程,在任何其它任務中,通過屏蔽本任務的空過程,即SETB 00H,就可啟動本任務,同理,CLR 00H就可在任何時候中止本任務的執行:
PROC:JNB 00H, PROCE ;空過程調度,不執行本任務
JB 11H,PROC2 ;11H置位時,執行過程2
JB 10H,PROC1 ;10H置位時,執行過程1
PROC0:……;過程0:本過程通常為任務初始化
SETB10H ;調度過程1
AJMPPROCE
PROC1: ……. ;過程1
SETB11H ;調度過程2
AJMPPROCE
PROC2: …… ;過程2
CLR11H
CLR10H
CLR00H ;任務完成,調度本任務的空過程
PROCE:NOP ;空過程
由任務設計可以看出,過程是通過消息(位尋址變量置位)來調度的。每次執行任務只執行該任務的一個過程,并且過程不能包括循環延時、等待等代碼,以保證系統輪流執行多任務的實時性。如果一個過程必需包括等待或延時,則將過程從等待或延時處分解為兩個過程,并在兩個過程中插入專門的延時或等待過程。延時和等待過程的設計說明如下。
2.2延時等待過程設計
延時,等待等過程在程序設計中是必不可少的,為不影響系統的實時性,多任務編程的延時和等待需要特殊設計。
延時分為短延時和長延時,短延時是通過一個和幾個計數變量計數就能完成的延時,長延時則通常利用計數變量配合計時器中斷來完成延時。短延時可設計成任務中的一個特殊過程,長延時可設計成任務中的一個特殊過程或一個獨立的特殊任務。
1)短延時,以下程序設計了一個特殊過程PROC1:一個計數變量30H遞減實現延時,其計數周期是系統執行任務隊列中全部任務所需的時間。
PORC:JNB 00H,PROCE
JB 10H,PROC1
MOV30H,#03H ;30H的值控制延時時間的大小
SETB10H
AJMPPROCE
PROC1:DJNZ30H, PROCE
;以每次執行完所有任務時間為周期的延時
CLR10H
CLR00H ;00H清0本任務執行完畢
PROCE:NOP
…… ;其它任務過程
LJMP PROC
2)長延時,利用定時器中斷配合計數變量設計延時,20H清零設置一個等待過程。等待時間到,20H由定時器中斷程序置位。20H的置位周期可由編程確定,本例為5ms:
PORC:JNB 00H,PROCE
JB 10H,PROC1
MOV30H, #64H ;30H的值初始化為100
CLR 20H
SETB10H ;調等待過程
AJMPPROCE
PROC1:JNB20H, PROCE
CLR20H
DJNZ30H, PROCE ;以5mS為周期的延時
CLR 10H ;總延時為500mS左右
CLR 00H ;00H清0本任務執行完畢
PROCE:NOP
……
LJMPPROC
PRIT0: …… ;定時中斷程序,定時設置為500uS
DJNZ70H, PRIT0D
MOV70H, #0AH
SETB 20H ;定時周期為5mS
……
PRIT0D: NOP
……
RETI
2.3串行口連續發送數據任務
串行口發送數據需占用較長時間,連續發送多個字節數據將影響多任務系統的實時性。基于時間片的多任務切換系統,一般通過計算發送一幀數據所需的時間,采用約大于這一時間的定時方式,來作為發送兩幀數據間的時間間歇,而不是在檢測到發送數據緩沖區SBUF為空時立即發送后一幀數據。其連續發送數據的實時性較差,不能保證在數據總線上較好地與其它系統協調工作。本方法通過以下程序解決這一問題(假設數據緩沖區30H-3FH的16字節數據需要從串行口發送):
PROC:JNB00H, PROCE ;串行口發送數據程序
JB 10H, PROC1
MOVR0, #30H
;發送數據任務初始化,指針R0設為#30H
MOVR3, #10H ;發送數據為16字節
SETB10H
PROC1:JB 30H,PROCE
;等待過程:30H在串行發送中斷程序中清0
SETB30H ;30H置1,調度本任務的等待過程
MOVSBUF, @R0
INCR0
DJNZR3,PROCE ;
CLR 10H ;
CLR 00H ;00H清0,所有數據發送完畢
PROCE: NOP
…… ;其它任務過程
AJMP PROC
SINP: …… ;串行中斷程序
JNBTI,SINP1
CLRTI ;發送緩沖區空
CLR30H;30H清0,結束發送任務的等待過程
SINP1:JNBRI,SINPD
CLRRI
SINPD:NOP
……
RETI
3單片機多任務編程實例
3.1說明
本實例是從樓宇可視對講系統的門口主機系統中簡化出來的,可視對講系統是一計算機支持的分布式多設備協同工作系統,總線制通信對串行口收發數據具有很高的實時要求。門口主機系統包括4位LED數碼顯示,12鍵鍵盤,串行口發送、接受數據,處理數據,以及控制開鎖、發出蜂鳴聲,密碼數據閃存,計時,切換工作狀態等多項任務。采用多任務編程是十分必要的。本實例就其LED顯示,鍵盤掃描和串行換數據功能來說明該系統的多任務編程過程。
3.2硬件設計
能完成上述幾項功能的硬件電路設計如圖1所示,這是一個單片機最小系統。4位LED數碼管采用動態顯示,鍵盤為矩陣掃描鍵盤,這兩個模塊在單任務設計中,都需要較多的延時過程,很難保證系統的實時性,操作按鍵時還會造成顯示閃爍或停頓。為此,很多類似設計都增加硬件或采用專用芯片如CH451來驅動[9],而多任務編程可省去這些硬件。圖中75176芯片的AB端接樓宇對講系統的485總線,與其它設備交換數據協同工作。
圖1 多任務編程實例硬件設計圖
Fig. 1 Schematic for Multitask Programming Example
3.3軟件設計
3.3.1編程說明
編程目的:
1)從鍵盤鍵入4位數據,鍵入過程中可按*鍵清除重輸。
2)每鍵入1位數據。LED屏從最右邊1位開始顯示,原各位顯示向左移1位。
3)鍵入數據過程中,如果有5s鐘沒有繼續按鍵,系統清除輸入數據和顯示。
4)當輸入完4位數據后,系統將4位數據從串行口發送到數據總線。
5)當從數據總線上接收到數據#0D8H時,開始發送4位數據。
6)75176芯片平時為接收狀態,當接收到#0D8H時,如果系統有數據要發送,則變為發送狀態,發送數據,當數據發送完畢時,75176芯片恢復為接收狀態。
根據上述編程目的將系統編程劃分為以下7個任務:
1)4位LED數碼管動態顯示;
2)鍵盤掃描檢測;當有按鍵時,啟動第3任務。
3)處理鍵盤檢測結果,設置防抖動延時;計算鍵值;并在釋放鍵后啟動第4任務;
4)將鍵值轉換為輸入數據和顯示數據,分別送輸入數據緩存區和顯示緩存區;當鍵入*時清除已輸入數據和顯示;當輸入第1位數據時,啟動第5任務;當輸入數據緩沖區滿時,啟動第6任務的一個條件;
5)5s延時,5s過后沒有繼續按鍵時,清除已輸入數據和顯示;
6)串行口發送數據,啟動本任務同時需滿足有數據要發送和接收到#0D8H兩個條件;
7)串行口接收數據,當接收到#0D8H時,啟動第6任務的另一條件。
其它說明:
1)在上述7個任務中,LED顯示和鍵盤檢測是實時任務,其余是常規任務。
2)系統采用執行其它任務的時間處理LED動態顯示和鍵盤掃描檢測任務所需的延時。
3)系統采用定時器0中斷處理5s延時。定時標志20H置位間歇為25ms;計數變量6EH初始化和重置值為200(#0C8H)。
4)系統采用串行口中斷處理串行數據的接收和發送。串行口接收中斷啟動系統第7項任務。
3.3.2系統流程圖
圖2是7個任務輪流執行的系統總流程圖
圖2多任務編程實例系統流程圖
Fig.2 System Flowchart of Multitask Programming Example
3.3.3任務設計說明
1)4位LED數碼管動態顯示
在單任務設計中,4位LED數碼管顯示是一次完成的[10],每顯示1位,都要設計一定的延時,這會浪費CPU時間,影響其它任務的實時執行。多任務設計的方案是,每次執行顯示任務只依次顯示一位,然后就執行下一任務。系統利用執行其它任務的時間來為LED的每位顯示延時,即在顯示延時過程中,系統同時在執行其它任務。
系統設有一個顯示緩沖區7CH-7FH,LED顯示是通過自動掃描顯示緩沖區進行的。
顯示初始化:
MOV 30H, #3FH ;0 30-39H顯示數字段表
MOV 31H, #06H ;1
MOV 32H, #05BH ;2
MOV 33H, #4FH ;3
MOV 34H, #66H ;4
MOV 35H, #6DH ;5
MOV 36H, #7DH ;6
MOV 37H, #07H ;7
MOV 38H, #7FH ;8
MOV 39H, #6FH ;9
MOVR0, #7FH ;啟動顯示位指針初始化
顯示任務代碼:
DISP: CJNE R0, #7FH,DISP1 ;DISP,LED動態顯示任務
MOV R3,#0FEH;初始化,先顯示最左邊位
MOV R0,#7CH;R0,顯示緩存指針初始化
MOV 40H, #01H;40,鍵盤掃描鍵值初始化
AJMP DISP2
DISP1:MOV A, R3
RL A
MOV R3,A
INCR0
INC40H
DISP2:MOV P2,#00H;熄滅顯示
MOV P0,R3 ;R3控制顯示位
MOV P2,@R0 ;7CH-7FH 4位顯示字緩存
DISPE:NOP
2)鍵盤掃描檢測
矩陣鍵盤掃描檢測的典型設計是依次置每行電平為低,對鍵盤行進行掃描,檢測各列是否有鍵按下。由圖1所示,矩陣鍵盤的行線和LED顯示的位線是一致的,鍵盤掃描和動態顯示掃描保持同步,很便于程序設計。所以,在多任務設計方案中,和LED顯示任務一樣,每次執行鍵盤檢測任務時,只對一行進行檢測。當沒有按鍵按下時,系統依次對每行都進行檢測;當有按鍵按下時,系統只對上次檢測到按鍵按下的行進行檢測,從而鎖定對該按鍵的繼續檢測。
鍵盤掃描任務與LED顯示任務通過共享全局變量R0保持同步:
GETK: JNB 00H, GETK0;GETK,按鍵掃描檢測任務
MOVA,R0
CJNEA, 41H, GETKE
GETK0:MOVA,P0 ;鍵盤檢測
ANLA, #0F0H
CJNEA, #0F0H, GETK1
CLR00H ;未檢測到按鍵
AJMPGETKE
GETK1:SETB00H ;已檢測到按鍵
MOV42H, A ;42H緩存按鍵狀態
MOV41H, R0 ;41H記錄檢測到按鍵的行,以后鎖定對這行的繼續檢測
GETKE:NOP
3)按鍵的處理
按鍵的處理主要包括計算按鍵持續按下的時間,鍵值計算和對按鍵釋放后的處理。為防止按鍵抖動,持續按鍵需在一定的延時后,才能處理。多任務設計是在其任務中插入一個短延時過程。在處理完按鍵鍵值后,需等待釋放按鍵。多任務設計通過設置消息(11H置位)屏蔽本任務和不啟動后續相關任務的方式來設計等待過程:
KEYPR: JNB 00H, KEYPRD;KEYPR,處理按鍵任務
JB 11H, KEYPRE ;
JB 10H, KEYPR1
SETB10H
MOV 63H, #0FFH ;第一步設置鍵盤防抖動延時時間
MOV 64H, #04H
AJMP KEYPRE
KEYPR1:DJNZ 63H,KEYPRE ;第二步延時過程
DJNZ 64H, KEYPRE
SETB 11H ;第三步計算鍵值并等待釋放鍵
ANL 40H, #0FH ;鍵值由40H的高4位和低4位組合。
KEYPR2:MOV A,42H;根據42H緩存的按鍵狀態進行計算
JB ACC.4,KEYPR3 ;根據從P0口數據計算鍵盤值
ORL40H, #10H
AJMP KEYPR5
KEYPR3:JB ACC.5,KEYPR4
ORL40H, #20H
AJMPKEYPR5
KEYPR4:JBACC.6,KEYPRE
ORL40H, #30H
KEYPR5:MOV 43H, 40H ;43H緩存已確定的鍵值
AJMP KEYPRE
KEYPRD:CLR 10H ;按鍵釋放,恢復到檢測第一步
JNB 11H, KEYPRE
CLR 11H ;如果已計算出鍵值
SETB 01H 啟動鍵值數據轉換任務
KEYPRE:NOP
4)鍵值轉換和數據處理
鍵值轉換的目的是將鍵值轉換為輸入數據和顯示數據,分別存入數據緩沖區和顯示緩沖區。當輸入數據緩沖區滿時,系統將緩沖區數據從串行口發送到總線上,當輸入數據是*時,系統清除緩沖區數據和顯示。為檢測輸入一位數據后,繼續輸入是否被放棄,每輸入一位數據,系統啟動或重置一個5s延時。R2為輸入數據緩沖區指針,初始值為#50H:
LOADC: JNB 01H, LOADCE ;LOADC,鍵值轉換成數據
CLR 01H ;和轉換成LED段碼值任務
MOV A, 43H ;根據43H緩存的鍵值進行數據轉換
PRO11: CJNE A, #11H, PRO12;按*建清除數據和顯示
AJMP LOADC3
PRO12:CJNE A, #12H, PRO13 ;"7"
MOV R1,#37H
AJMP LOADC1
PRO13:CJNE A,#13H, PRO14 ;"4"
MOV R1,#34H
AJMP LOADC1
PRO14:CJNE A,#14H, PRO15 ;"1"
MOV R1,#31H
AJMP LOADC1
PRO15:CJNE A,#21H, PRO16 ;"0"
MOV R1,#30H
AJMP LOADC1
PRO16:CJNE A,#22H, PRO17 ;"8"
MOV R1,#38H
AJMP LOADC1
PRO17:CJNE A,#23H, PRO18 ;"5"
MOV R1,#35H
AJMP LOADC1
PRO18:CJNE A,#24H, PRO19 ;"2"
MOV R1,#32H
AJMP LOADC1
PRO19:CJNE A,#31H, PRO1A ;"#"
AJMP LOADCE
PRO1A:CJNE A,#32H, PRO1B ;"9"
MOV R1,#39H
AJMP LOADC1
PRO1B:CJNE A,#33H, PRO1C ;"6"
MOV R1,#36H
AJMP LOADC1
PRO1C: CJNEA,#34H,LOADC0A ;"3"
MOV R1,#33H
LOADC1: PUSH 00H
MOV00H, R2 ;R2指定數據緩存地址
MOV @R0,01H ;根據R1的值存入數據緩存區
POP 00H
MOV 7FH, 7EH
MOV 7EH, 7DH
MOV 7DH, 7CH
MOV 7CH, @R1 ;與R1值對應的段碼送顯示緩存區
LOADC1C:CJNER2,#53H, LOADC2
LOADC1L:SETB17H ;輸入數據達4位,準備從串行口發送
AJMPLOADCE
LOADC2:INC R2 ;數據緩存區指針加1
SETB02H ;啟動或重置5s延時任務
MOV6EH,#0C8H ;初始或重置計數器
AJMPLOADCE
LOADC3:MOV R2,#50H;清除數據緩存區數據和顯示
MOV7FH,#00H
MOV 7EH,#00H
MOV 7DH,#00H
MOV 7CH,#00H
CLR 02H ;中止5s按鍵延時任務
LOADCE:NOP
5)按鍵間延時
系統通過按鍵連續輸入數據,要求按鍵間間隙時間不能超過5s,超過5s被認為是放棄輸入,系統將清除已輸入數據和顯示。在本實例中,按鍵間延時設計為一個特殊任務。該任務的5s計數值在鍵值轉換中啟動或重置,可保證每次按鍵后都有5s時間延時。該延時可在5s后自動結束或被其它任務中止。
按鍵延時代碼中,21H在定時器0中斷程序中置位,設計置位周期為50ms,計算變量6EH在鍵值轉換任務中設置或重置:
KYWAIT:JNB 02H, KYWAITE;KYWAIT,等待延時任務
JNB 21H, KYWAITE
CLR 21H
DJNZ 6EH, KYWAITE
CLR 02H ;結束5s延時
MOV R2, #50H ;清除按鍵輸入和顯示
MOV 7FH, #00H
MOV 7EH, #00H
MOV 7DH, #00H
MOV 7CH, #00H
KYWAITE:NOP
6)串行口發送4字節數據
串行口連續發送數據任務是配合串行口發送中斷進行的。除第2節典型示例外,串行口發送數據任務還可按下面方式設計:
TXGL:JNB 03H, TXGLE ;TXGL,串行發送任務
JNB 17H, TXGLD ;17H置位,已有要發送的數據
JB30H, TXGLE ;等待上一幀數據發送完畢
SETB30H ;設置等待過程
JB 3CH,TXGL2
JB 3BH, TXGL1
JB 3AH, TXGL0
SETBP3.6 ;將75176轉換成發送狀態
MOVSBUF, 50H ;發送第一字節
SETB3AH
AJMPTXGLE
TXGL0:MOVSBUF,51H ;發送第二字節
SETB3BH
AJMPTXGLE
TXGL1: MOV SBUF,52H ;發送第三字節
SETB3CH
AJMPTXGLE
TXGL2:MOVSBUF,53H ;發送第四字節
SETB48H ;48H置位,數據發送完畢后,讓75176恢復接收狀態
CLR 3CH
CLR 3BH
CLR 3AH
CLR 17H
TXGLD:CLR 03H ;結束串行發送任務
TXGLE:NOP
7)串行口接收數據
為了串行口中斷不對系統的實時性產生較大影響,對串行口接收數據的處理是在中斷外多任務隊列中進行的。限于篇幅,系統只考慮從管理中心接收到發送數據允許同步信號#0D8H,開始向管理中心發送數據:
SHJJS:04H,SHJJSE;SHJJS,串行接收數據任務
CLR04H
MOVA,4FH
CJNEA,#0D8H, SHJJSE ;接收到數據08H
SETB 03H ;03H置位,啟動串行發送任務
SHJJSE:NOP
8)串行中斷程序
在串行發送數據中斷中,系統設計了75176芯片轉換為接收狀態的過程,48H在串行發送最后一字節時置位,以便在發送完數據后,改變系統狀態。
在串行接收數據中斷中,04H置位,通知系統從串行口接收到一字節數據,并已存入4FH,同時04H啟動串行口接收數據任務:
SINP: PUSHPSW;SINP,串行口中斷程序
JNB TI, SINP0
CLR 30H
CLR TI
JNB 48H, SINP0
CLR 48H
CLR P3.2
SINP0: JNBRI, SINP3
CLRRI
MOV 4FH,SBUF
SETB 04H
SINP3: POPPSW
RETI
3.3.4系統的構成
將系統的7個任務經過上述設計,然后排成隊列,并在隊列最后設置一個長調轉指令到隊列中最前一個任務,構成一個依次執行并輪流循環的系統,這就是多任務編程的系統實例。在系統中,各任務需然是依次排成隊列執行的,但任務的排序是可任意改變的。在任務間任意插入新的任務,也不會影響原系統正常運行。基于這一特征,各任務被看成是并發執行的。
4結論
單片機多任務編程方法可歸納為:
1)在單片機多任務編程中,各任務依次排成隊列輪流執行。
2)每次執行任務只調用其一個過程來執行,可保證各任務間最快速地切換。
3)和時間片任務切換不同,切換任務不占用堆棧和額外的系統資源。
4)各任務、過程間使用全局變量共享或交換數據,避免各種參數傳遞。
5)基于消息(位尋址變量的置位),每項任務,都可被其它任務啟動和中止。
通過對循環延時和等待過程的重新設計,單片機多任務設計的每項任務和每個過程都是連續執行的。這可保證多任務間的切換最快,單片機的運行效率最高。因為任務的過程是完整執行的,所以和時間片強制切換不同,任務和過程的切換不占用堆棧和額外的系統資源。因為任何任務都可中止和屏蔽其它任務的執行,本方法也可設計搶占式任務。只要給實時任務也設計一個空過程,搶占式任務甚至還可屏蔽實時任務。達到最優先,最快執行的目的。本方法基于消息,但沒有單獨的消息循環過程[11-13],可最大限度地減少系統開支。
本文介紹的多任務編程方法是用匯編語言實現的,但顯而易見,根據本方法的原理,用C51語言同樣也可設計單片機多任務系統。
在過去采用傳統方法設計復雜的單片機系統過程中,人們容易發現系統交叉調用多,重復代碼多,系統運行效率差,容易邏輯混亂且難以調試。例如要完成本文實例的設計,鍵盤處理過程需反復進行鍵盤檢測。為了不讓顯示中斷,鍵盤處理防抖延時和等待釋放鍵盤時,又要多次調用顯示過程,串行口連續發送數據過程中,更是頻繁調用顯示。顯示、鍵盤檢測、鍵盤處理等任務不能成為低耦合性的獨立模塊。系統程序的層次結構和可讀性也都較差,并很難移植和重用。鑒于此,為探索一個結構清晰,易調試,任務明確且可重用、提高開發效率,無相互調用,無重復代碼的系統,一個新的編程方式開始了實踐和研究,并被總結為多任務編程方法。在近八年不斷利用新方法設計(如樓宇對講系統、聯網報警系統、門禁系統,安防監控、廣播控制、一卡通等)智能系統產品的同時,本多任務編程方法取得了成熟和發展。與傳統設計相比,這些系統產品硬件資源少,運行效率高。其硬件功能更多以軟件取代,所以運行更穩定,且易維護,性價比高,取得了更高的經濟效益。
參考文獻
[1] 羅江,戶永清.51單片機多任務機制的實現策略研究[J].四川文理學院學報(自然科學),2008,18(2):82-84.
[2] 阮元.分時操作系統思想在單片機編程中的實現[OL].[2009-7-13]..
[3] 王輝堂,顏志勇,陳文薌.一種基于C51的多任務機制及應用[J].電子技術應用,2006,6(1):45-48.
[4] 李仕涌,譚南林.多任務操作系統在嵌入式系統開發中的應用[J].北方交通大學學報,2002,26(4):79-82.
[5] 劉蕊.基于實時操作系統RTX51的多任務處理設備設計[J].計算機光盤軟件與應用,2010 9(1):25-26.
[6] 陳勁松,程新民,魏忠.時間片輪轉算法在單片機程序設計中的應用[J].電子技術應用,2003,29(3):79-82.
[7] 王江寧,呂軍.時分多線程在單片機系統中的應用研究[OL].[2008-07-22]..
[8] 潘永雄.基于過程的單片機多任務程序結構及實現方法[J].電子工程師,2005,31(3).
[9] 胡全.51單片機的數碼管動態顯示技術[J].中國新技術新產品[J],2009,13(1).
[10] 施隆照.數碼管顯示驅動和鍵盤掃描控制器CH451及其應用[J].國外電子元器件,2004,1(1):53-57.
[11] 楊金,孫世新.基于消息機制的單片機多任務系統的開發[J].計算機時代,2007,11(1).
[12] 周國柱,張道德,楊光友.基于消息的單片機多任務編程[J].湖北工學院學報,2002,9(1).
篇3
關鍵詞:單片機;梯形圖;結構化數據;自編程
中圖分類號:TP334 文獻標識碼:A
一、概述
通常基于單片機開發的智能控制器,因內部程序已固化,開發完成后,其功能基本定型,只能應用于設計時的特定目標,現場如需變更控制方案也非常困難。針對這一短板,我們設計一種基于單片機開發控制器的一種新方案,實現內核驅動與邏輯運算、控制分開,并以簡明梯形圖語言實現運行邏輯編程,不僅擴展了控制器的應用范圍,而且減輕現場調試難度,控制方案的變動,只需修改梯形圖邏輯即可解決。
二、原理
單片機應具備的特性:足夠容量的可擦寫flash程序存儲器,支持IAP功能,現在大多單片機芯片都支持用戶自編程IAP功能,如Atmega128、STM32F3、STM32F4系列皆能滿足要求。首先將單片機flash存儲器劃分為3塊,一部分存儲實現IAP功能的Boot Loader程序,一部分存儲單片機內核程序,余下的部分用于存儲用戶程序。內核程序主要是硬件驅動及用戶程序間代碼接口與算法。用戶程序即為用梯形圖編輯工具形成順序控制邏輯,比較規則及數據輸出去向等。
內核程序周期性地掃描內外部設備內存映射地址,并調用用戶區邏輯運算,將結果以數據量及消息量的方式輸出到設備,如此周而復始,完成用戶邏輯的控制方案。
三、具體實現
單片機如何實現硬件驅動及通信不在本議題討論范圍內,重點論述如何實現梯形圖編譯工具軟件與單片機執行梯形圖控制邏輯。
1.用戶程序編輯與編譯(梯形圖編譯工具):
梯形圖的編輯元器件主要包括常開接點、常閉接點、繼電器等簡單元件和定時、比較等功能元器件。為了靈活應用和擴展編輯元器件,方便編程,將梯形圖元件數據結構定義如下:
type
Tmdevice=record
name: string[4]; //元件名稱
mclass: byte; //元件類型
memo: string; //元件備注,消息變量為消息變量實體
end;
其中Mclass的取值0:開關量輸入(DI),1:開關量輸出(DO),2:定時器(T),3:計數器(C),4:內部繼電器(M),5:數據寄存器(D),6:消息輸入(MI),7:消息輸出(MO)。
梯形圖用戶程序我們可以看成是有限個邏輯節點構成固定列寬,可擴展行數的表,每個節點代表元件加邏輯操作構成的數據結構體,因此首先定義節點數據結構:
Type
Tprodata=record
Opclass: byte; //節點類型(元件類型+連接類連)
notop: byte; //操作碼
Address: byte; //操作數內存地址
Chadd: word; //比較數
end;
依據上述約定實現繪制的梯形圖,如圖1所示。
2.梯形圖邏輯掃描算法
梯形圖語言描述一個邏輯網絡自左向右的能量潮,元件的邏輯運算總是與左側的運算“與”運算,分支總是與左側結果“或”運算,逐行掃描遇分支節點先將運算結果壓入棧,掃描暫時放棄分支節點右側元件,進行下一行掃描,如遇分支,繼續執行壓棧,一直掃描到沒有分支時,將結果與棧頂“或”運算,執行出棧(先進先出原則),同時判斷棧頂節點連接類型,決定下一步是出棧還是掃描,如遇出棧節點有右側分支,則掃描右側元件,并作邏輯運算,直至掃描至行結束標志節點,并將運算結果賦值與最后節點元件,因此位于結束標志點的元件一定是輸出型元件。如果在掃描過程中,能量潮在開始標志與結束標志中有中斷或能量潮開始與結束標志不完整,都視為梯形圖編譯未能通過。
我們將上面元件掃描順序及元件操作類型記錄在一個順序數據組中,這個順序數組結構應是這樣:
Type
Tprodata=record
Oprate: byte; //數據運算類型
selfop: byte; //自身附加運算
Address: byte;//元件內存映射地址
Chadd: word;//比較運算值
end;
其中Oprate對應的邏輯運算,1表示與,2表示異或,4表示賦值,5表示壓棧,6表示出棧,7表示棧更新,8表示定時器操作,9:定時器溢出處理,10:計數器操作,11:計算器溢出處理,12:表示位操作,13:寄存器數值比較。
然后定義一個Tprodata類型變長數組,將上面梯形圖掃描編譯順序結果存放在這個變長數組中,最后將這個數據數據按Intel Hex格式格式化輸出文件,并保存在磁硬盤中。
3.下載用戶程序到單片機用戶程序寄存器
單片機具有自編程(IAP)功能,將梯形圖編譯結果文件(Intel Hex格式)下載到單片機用戶程序寄存器分區,因用戶程序寄存器分區是可單獨通過IAP擦寫,這樣修改控制器運行邏輯,只需修改梯形圖,編譯下載就可實現控制邏輯與內核程序分離。
4.單片機執行梯形圖邏輯實現
5.梯形圖元件在單片機內存映射
單片機內核程序中首先定義一組元件內存映射,數組的大小與梯形圖中元件數組大小一致,并保持與梯形圖編輯工具中元件類型對應,這里定義為u16 opdate[255]。
為處理梯形圖用戶邏輯,在單片機內核程序中建立幾個接口函數,如圖2所示。
接口函數實現方式中已明確了數據處理細節,單片機內核循環執行ReadDI()、checkprodata()、OutDO()函數。ReadDI()將輸入端口的邏輯狀態讀入映射區。通信控制字、消息輸入通過中斷接口調用中斷處理函數將數據存入相應的內存映射地址,checkprodata()順序讀取、處理用戶邏輯,并將邏輯運算、比較結果傳遞相應的輸出映射內存地址,OutDO()函數將輸出映射地址中的結果輸出控制器的輸出端。通過圖3更清晰彼此間的作用機制。
結論
本文設計基于單片機開發智能控制器,實現內核程序與用戶控制邏輯分離,控制邏輯通過梯形圖編輯工具編譯與下載,控制目標的變更,只需修改梯形圖邏輯即可實現。此設計方案成功應用在江蘇鹽城供電公司東郊變、安泰變環境監測與報警,智能排水不同控制目標。
篇4
0 引言
PIC18F__8單片機是美國微芯公司推出的16位RISC指令集的高級產品,由于芯片內含有A/D、內部E2PROM存儲器、I2C和SPI接口、CAN接口、同步/異步串行通信(USART)接口等強大的功能,具有很好的應用前景。但是,目前介紹其應用和以C語言編程的中文參考資料很少。本文將探討該型單片機異步串行通信的編程應用,程序用HI-TECH PICC-18 C語言編寫,并在重慶大學-美國微芯公司PIC單片機實驗室的PIC18F458實驗板上通過。
1 PIC18FXX8單片機同步/異步收發器(USART)
通用同步/異步收發器(USART)模塊是由PIC18FXX8內的三個串行I/O模塊組成的器件之一(USART也叫串行通信接口即SCI),可以配置為全雙工異步方式、半雙工同步主控方式、半雙工同步從動方式三種工作方式。
TXSTA是PIC18FXX8單片機串行通信發送狀態和控制寄存器,RCSTA是接收狀態和控制寄存器。由于在實際工程中,異步方式用得最多,這里僅介紹異步工作方式,其它方式可參閱相關資料。
1.1 USART 異步工作方式
在異步工作方式下,串行通信接口USART采用標準的不歸零(NRZ)格式(1位起始位、8位或9位數據位和一位停止位),最常用的數據位是8位。片內提供的8位波特率發生器BRG可用來自振蕩器時鐘信號產生標準的波特率頻率。通過對SYNC位(在TXSTA寄存器中)清零,可選擇USART異步工作方式。
1.2 USART波特率發生器(BRG)
USART帶有一個8位的波特率發生器(BRG),這個BRG支持USRAT的同步方式和異步方式。用SPBRG寄存器控制一個獨立的8位定時器的周期。在異步方式下,BRGH位(控制寄存器TXSTA的)也被用來控制波特率。在同步方式下,用不到BRGH位。表1給出了在主控方式下(內部時鐘)不同USART工作方式時的波特率計算式。
表1 主控方式下的波特率計算式
SYNC
BRGH=0(低速)
BRGH=1(高速)
(異步)波特率=FOSC/[64(X+1)]
波特率 = FOSC/[16(X+1)]
1
(同步)波特率=FOSC/[4(X+1)]
無
1.3 USART 異步工作方式配置
下面是串行通信異步工作方式配置步驟(順序可以改變):
(1)配置發送狀態和控制寄存器TXSTA;
(2)配置接收狀態和控制寄存器RCSTA;
(3)配置RX(RC7引腳)、TX(RC6引腳)分別為輸入和輸出方式;
(4)通過設定的通信波特率配置SPBRG寄存器,計算公式參見表1;
(5)設置串行通信接收或發送中斷是否使能;
(6)清串行通信接收或發送中斷標志;
(7)設置串行通信接收中斷或發送中斷的優先級是高或低優先級中斷方式,PIC18單片機默認情況下是高優先級中斷,若是低優先級中斷,則必須進行設置;
(8)設置串行通信接收和發送數據是否允許。
若用到了中斷功能,還需設置總中斷和中斷使能,以開放未屏蔽的中斷。
2 USART接口硬件電路
利用PC機配置的串行口,可以很方便地實現PC機與PIC18單片機的串行數據通信。PC機與PIC單片機USART連接最簡單的是三線方式。由于PIC單片機輸入、輸出電平為TTL電平,而RS-232C PC機配置的是RS-232C標準串行接口,二者電氣規范不一致,因此要完成PC機與微控制器的串行數據通信,必須進行電平轉換。圖1為PIC18F458單片機的RS-232電平轉換電路。圖中MAX232(或MAX202)將PIC18單片機TX輸出的TTL電平信號轉換為RS-232C電平,輸入到PC機,并將PC機輸出的RS232C電平信號轉換為TTL電平輸出到PIC微控制器的RX引腳。J9和PC機的連接方式見RS-232標準,與單片機相接的D型頭(J9)的2腳(PIC接收信號)與接PC機D型頭的3腳(PC機發送信號)相連,與單片機相接的D型頭(J9)的3腳(PIC發送信號)與接PC機D型頭的2腳(PC機接收信號)相連,二者的5腳與5腳相連(地相連)。PC機串口數據的發送和接收顯示均可采用各種串口調試軟件,我們使用的是串口調試助手V2.2(或V2.1、V2.0均可),在網上可以下載該調試軟件,該軟件操作簡單,這里不作介紹。
3 USART異步工作方式編程
串行通信的接收有查詢和中斷2種方式,在實際應用中,一般不采用查詢接收數據,常用的是中斷接收數據。發送有中斷發送和非中斷發送,在下面的例程中我們采用了中斷接收數據,發送數據采用中斷方式還是非中斷方式可以在程序中通過對發送方式標志Send_Mode(不為0,中斷方式發送;=0,非中斷方式發送)進行設置實現。
在PIC單片機發送數據時,發送中斷標志TXIF不能用軟件清0,只有當新的發送數據送入發送數據寄存器TXREG后,TXIF位才能被硬件復位,因此在程序中清該標志是無效的。采用中斷發送數據的方法是:在主程序中啟動發送一串數據的第一個數據,然后利用發送完成中斷啟動下一個數據發送,當一串數據發送后,不再發送數據,但有發送完成中斷標志,程序還要進入一次中斷,這最后一次中斷對數據發送是無用的,必須將該標志清0,采用的方法是禁止發送使能(TXEN=0)而引起發送被終止或對發送器復位。
下面是一個用串行通信進行接收和發送數據的例程,程序實現功能:PIC18單片機接收到PC機下發的8個數據后,將收到的8個數據以中斷或非中斷發送方式返送回PC機。
#include "pic18.h" /* PIC18系列的頭文件 */
unsigned char receive232[8]; /* 接收數據數組 */
unsigned char send232[8]; /* 發送數據數組 */
unsigned char receive_count=0; /* 接收數據個數計數 */
unsigned char send_count=0; /* 發送數據個數計數 */
unsigned char *point
er; /* 發送數據指針 */
unsigned char i; /* 程序中用到的循環變量 */
unsigned char SciReceiveFlag; /* =1,接收到8個數據 */
unsigned char Send_Mode=0; /* 不為0,中斷方式發送;=0,非中斷方式發送 */void sciinitial() /* 串行通訊初始化子程序 */
{
TXSTA=0x04; /* 選擇異步高速方式傳輸8位數據 */
RCSTA=0x80; /* 允許串行口工作使能 */
TRISC=TRISC|0X80; /* :將RC7(RX)設置為輸入方式 */
TRISC=TRISC&0Xbf; /* RC6(TX)設置為輸出 */
SPBRG=25; /* 4M晶振且波特率為9600時,SPBRG設置值為25 */
PIR1=0x00; /* 清中斷標志 */
PIE1=PIE1|0x20; /* 允許串行通訊接口接收中斷使能 */
RCIP=0; /* 設置SCI接收中斷為低優先級中斷 */
CREN=1; /* 允許串口連續接收數據 */
if(0==Send_Mode) TXEN=1; /* Send_Mode=0,非中斷方式發送,串口發送數據使能 */
else /* Send_Mode=1,中斷方式發送 */
{
PIE1=PIE1|0x10; /* 允許中斷發送 */
TXIP=0; /* 發送低優先級中斷 */
}
}
void interrupt low_priority LOW_ISR() /* 低優先級中斷子程序 */
{
if(RCIF==1) /* RS232接收中斷 */
{
RCIF=0; /* 清中斷標志 */
receive232[receive_count]=RCREG; /* 接收數據并存儲 */
send232[receive_count]=RCREG; /* 接收數據存放到發送緩沖數組 */
receive_count++; /* 接收計數器加1 */
if(receive_count>7) /* 如果已經接收到8個數據 */
{
receive_count=0; /* 接收計數器清0 */
SciReceiveFlag=1; /* 置接收到8個數據標志 */
}
}
else if((0!=Send_Mode)&&(TXIF==1)) /* 中斷發送數據方式且為發送中斷 */
{
if(send_count>7) /* 已經發送完8個數 */
{
TXEN=0; /* 發送不使能 */
return;
}
else
{
send_count++; /* 發送計數器加1 */
TXREG=*pointer++; /* 發送當前應發送數據,發送指針加1 */
}
}
}
main() /* 主程序 */
{
INTCON=0x00; /* 關總中斷 */
ADCON1=0X07; /* 設置數字輸入輸出口,不用作模擬口 */
PIE1=0; /* PIE1 的中斷不使能 */
PIE2=0; /* PIE2 的中斷不使能 */
PIE3=0; /* PIE3 的中斷不使能 */
Send_Mode=1; /* Send_Mode不為0,中斷方式發送數據;
Send_Mode =0,非中斷方式發送數據 */
sciinitial(); /* 串行通訊初始化子程序 */
IPEN=1; /* 使能中斷高低優先級 */
INTCON=INTCON|0xc0; /* 開總中斷、開接口中斷 */
while(1)
{
if(1==SciReceiveFlag) /* 是否接收到8個通信數據 */
{
SciReceiveFlag=0; /* 清接收到8個通信數據標志 */
if(0!=Send_Mode) /* Send_Mode不為0,中斷方式發送 */
{
send_count=0; /* 發送數據計數清0 */
pointer=&send232[0]; /* 發送指針指向發送數據數組首地址 */
TXREG=*pointer++; /* 發送第一個數據后,將發送指針加1 */
TXEN=1; /* 使能發送 */
}
else /* Send_Mode =0,非中斷方式發送數據 */
{
pointer=&send232[0]; /* 發送指針指向發送數據數組首地址 */
for(i=0;i<8;i++)
{
TXREG=*pointer++; /* 發送數據后,將發送指針加1 */
while(1) /* 等待發送完成 */
{
if(TXIF==1) break; /* 等待發送完成 */
}
}
}
}
}
}
篇5
關鍵詞:SPWM信號;51單片機;FGA25N120ANTD 管;光電隔離驅動芯片
中圖分類號:TP202 文獻標識碼:A 文章編號:1009-3044(2014)34-8320-02
目前市場上常見設備的電機,多使用調整皮帶在不同直徑的皮帶槽運轉來實現調速,而這種方法存在需要停機、費時費力、不可連續調速等諸多缺點。為改善對上述缺點,多采用可連續調速的CVT變速裝置,但是CVT變速裝置同樣存在不易于加工、造價高等缺點。
針對如上問題,采用微處理器結合驅動電路,在不改變電動機輸出扭力的同時使其轉速連續可調,成為了一種切實可行的調速方法。
1 方案論證
目前實現對交流電機的調速一般有晶閘管移相調速與全控橋變頻調速。移相調速雖然結構簡單容易實現,但是卻會影響波形的連續性,電機低速運轉時力矩明顯減小。另外就是采用脈寬等效方法SPWM調制輸出正弦交流信號,再改變正弦信號的頻率實現對電機的變頻調速。
脈寬調制技術通過一定的規律控制開關元件的通斷,來獲得一組等幅而不等寬的矩形脈沖波形,用以近似正弦電壓波形。脈寬調制技術在逆變器中的應用對現代電力電子技術?,F代調速系統的發展起到極大的促進作用。
近幾年來,由于場控自關斷器件的不斷涌現,相應的高頻SPWM(正弦脈寬調制)技術在電機調速中得到了廣泛應用。SA8281是MITEL公司推出的一種用于三相SPWM波發生和控制的集成電路,它與微處理器接口方便,內置波形ROM及相應的控制邏輯,設置完成后可以獨立產生三相PWM波形,只有當輸出頻率或幅值等需要改變時才需微處理器的干預,微處理器只用很少的時間控制它,因而有能力進行整個系統的檢測。保護和控制等。
經過對兩種方案認真的比較最終采用由單片機產生SPWM信號控制的三相橋,對電機進行變頻調速。
2 SPWM介紹
PWM的全稱是Pulse Width Modulation(脈沖寬度調制),它是通過改變輸出方波的占空比來改變等效的輸出電壓。廣泛地用于電動機調速和閥門控制,比如電動車電機調速就是使用這種方式。
所謂SPWM,就是在PWM的基礎上改變了調制脈沖方式,脈沖寬度時間占空比按正弦規律排列,這樣輸出波形經過適當的濾波可以做到正弦波輸出。它廣泛地用于直流交流逆變器等,比如高級一些的UPS就是一個例子。三相SPWM是使用SPWM模擬市電的三相輸出,在變頻器領域被廣泛的采用。
3 基于單片機生成SPWM信號控制電機實現變頻調速的設計
3.1主處理器選型
涉及到SPWM運算等高速處理,因此主處理器的選擇至關重要,目前市面上流行的單片機主要有51單片機、PIC單片機、AVR單片機,以及cortex-M3芯片。
51單片機應用的早,影響很大,已成為世界上的工業標準。隨著技術的不斷發展,51因其擁有廣泛的市場認知度,所以得到了更多廠商的重視,新技術層出不窮,帶PWM、帶AD、帶時鐘、帶USB等等,處理速度也不斷增強。PIC單片機是Microchip公司的產品,它也是一種精簡指令型的單片機,指令數量比較少,中檔的PIC系列僅僅有35條指令而已,低檔的僅有33條指令。但是如果使用匯編語言編寫PIC單片機的程序有一個致命的弱點就是PIC中低檔單片機里有一個翻頁的概念,編寫程序比較麻煩。
AVR單片機屬于使用精簡指令集的高速8位單片機。AVR的單片機可以廣泛應用于計算機外部設備、工業實時控制、儀器儀表、通訊設備、家用電器等各個領域。AVR單片機易于入手、便于升級、費用低廉。
Cortex-M3是一個32位的核,在傳統的單片機領域中,有一些不同于通用32位CPU應用的要求。在實際應用中,因為用戶要求具有更快的中斷速度,所以Cortex-M3采用了Tail-Chaining中斷技術,完全基于硬件進行中斷處理,最多可減少12個時鐘周期數,在實際應用中可減少70%中斷。并且處理速度明顯高于普通8位單片機。但價格略高。
對本項目而言,多功能新型51單片機以其低廉的價格,超強的穩定性,而且本身帶有強大的PWM功能無疑為最佳選擇。
3.2 功率器件與驅動器件選型
絕緣柵雙極型晶體管,是由雙極型三極管和絕緣柵型場效應管組成的復合全控型電壓驅動式功率半導體器件, 具有高輸入阻抗和低導通壓降兩方面的優點。因此本項目選用具備上述優點的FGA25N120ANTD 管作為功率輸出器件。
驅動電路采用較為成熟的東芝光電隔離驅動芯片 TLP-250。
3.3 原理圖的繪制
因為電路中強電與弱電并存,因此在PCB作圖時候必須著重考慮避免強電給弱電帶來的干擾,對可能產生諧波、感應電流都因該加入吸收電容,對大功率器件的控制端加入磁珠進行濾波。另外為了增大電路板對電流的承載能力,大電流部分應采用堆錫焊法。
4 調試
因為電路中涉及到強電,調試具有一定的危險性,為確保安全,應采36v隔離變壓器低壓調試的方法,待參數確定后再接入高壓。電流反饋的采集應使用0.01歐的康銅絲電阻。結合示波器與SPWM計算器計算出每個點的脈沖寬度,經過反復比對,最終完成調試。
5 結論
本項完成后已經成功運用到一些設備中,運行良好,達到了預期的效果。
參考文獻:
[1] 東棟,何向濤,劉建政.用MCS-51實現UPS電源SPWM控制的一種方法[J].通信電源技術,2007(1).
[2] 楊旭,王兆安.一種新的準固定頻率滯環PWM電流控制方法[J].電工技術學報,2003(3).
[3] 夏鳳仙,陳小平.逆變式工頻交變電流源研制[J].儀器儀表學報,2008(8).
篇6
一、章節教學VS項目教學
通常單片機教材的章節有緒論、單片機的結構和原理、指令系統、程序設計、中斷系統及定時/計數器、串行接口、系統擴展、測控接口、應用系統設計方法等。理論性較強,每一個章節都是單片機應用系統的一個局部,學生要把所有局部都學完,才能完整地了解單片機。對于高職學生而言這種只見樹木不見森林的學習方法實在是難度大、效率低。學到最后學生還是不知道單片機怎么應用,更不用說單片機設計、編程、調試能力的培養了。
因此要培養學生的單片機應用能力,按書本一講到底不符合高職教育的需要。本課程的教學改革首先要打破章節的局限,以實際的項目為載體進行項目教學,把企業中實際的、常用的項目引入教學中,并且每一個項目都是一個完整的單片機應用系統開發設計過程。起初的項目可以非常簡單,比如點亮一個發光二極管,相對容易實現的項目在學習的初期就容易激發他們的學習興趣。通過實訓,發現單片機的學習并不是那么高不可攀,學生就會信心倍增,更加努力的學習。在項目教學法中,不同的項目體現不同的單片機應用知識點,用一個一個的項目把整個教學內容貫穿起來。隨著項目的不斷深入,學生對單片機的認識水平將逐漸提高,應用能力和編程能力也會越來越強。這種項目化教學融“教、學、做”于一體,是符合高職學生認知規律的教學方法。
針對高職院校的學生,本文對《單片機編程及接口技術應用》課程教學做了一定的規劃和改革。具體的項目安排如表1所示。
二、匯編編程VS C語言編程
匯編語言是一種用文字助記符來表示機器指令的符號語言,最接近機器碼。主要的優點是每一條指令都對應單片機的一個執行動作,因此程序執行效率高,可以避免生成龐大的、效率低的程序。匯編語言還可實現精確的時序控制。但是不同型號的單片機其指令系統是不完全相同的,因此匯編程序的移植性差。并且由于匯編語言是助記符,不利于記憶。
單片機C語言是一種編譯型語言,兼顧了多種高級語言的特點,并具備匯編語言的功能。C語言是高級語言,程序符合人類的思維邏輯,可讀性強;不需要了解單片機指令系統,只要對單片機的內部資源稍有認識就可以進行編程控制。C語言可根據功能劃分為不用的函數進行調用,有利于程序的模塊化設計和分工合作。此外,由于C語言控制不基于特定的單片機底層結構和指令系統,因此程序的移植性好。用單片機C語言進行程序設計已成為單片機軟件開發的一個主流。
基于以上分析比較,對于高職學生而言,完全掌握單片機的內部結構和上百條的指令系統是困難的,也是沒有必要的。完全可以用C語言作為編程語言。同時C語言也是一些高級控制器的編程語言,學習C語言的單片機編程有利于學生未來的發展。
三、實驗箱平臺VS仿真實驗平臺
單片機實驗箱實驗在全國范圍內的單片機教學中是非常普遍的,其獨特的優勢是實驗箱中集成了單片機及其應用接口和常用的被控對象,實驗的硬件設計部分簡單且可靠性高,學生在實驗中能夠集中精力在系統的架構和軟件開發上,而不會造成硬件線路搭建不當的問題,從而加深學生對實驗目的的掌握。但問題是實驗箱的功能有限,箱內固定的器件配搭限制了學生的思維,使其無法真正發揮主觀能動性及創造思維。
針對上文提及的情況,本文提出用時下流行的單片機仿真軟件Proteus作為實驗平臺進行單片機仿真實驗。該軟件支持單片機匯編源碼級、C源碼級仿真與調試。無需硬件電路就可對單片機電路進行軟硬件的開發、測試與調試。并且這款軟件支持的單片機類型非常多,包括8051、ACR、PIC10/12、PIC16、PIC18、HC11、ARM7等。與此同時,對學校而言構建實驗室的硬件投入也相應減少了,只需提供計算機和相應的軟件即可。并且整個使用過程中損耗很小,基本沒有元器件的損耗問題。這樣實驗室的運行成本就會大幅降低。當然使用Proteus也會有不可避免的缺點,對于系統而言,開發不能只停留在仿真階段,教學中不能只使用仿真實驗,否則學生不可能認識真正的元器件,不會使用實際的儀器儀表,不會排查和調試電路故障。因此,筆者在實現仿真后還加入了學生自己動手制作實物的過程,并要求學生完成簡單的排故和調試工作,讓學生能夠真正了解單片機系統是如何一步步開發并付諸于現實的。
四、試卷考核VS多樣的考核方法
考試的目的在于檢查教學效果、教學目標實現的程度,以便于改進教學工作、提高教學質量,鞭策學生積極努力地學習。由于本課程應用性強、實踐性強,對學生的動手能力要求比較高,所以僅一張試卷閉卷考核不能完全完成考試目的。本文認為總體來講單片機教學有以下幾種考核形式:(1)理論+實踐=最終考核成績;(2)課內實踐+實習實訓=最終考核成績;(3)課內實踐+設計作品=最終考核成績;(4)理論+設計作品=最終考核成績。
針對高職院校的學生,本文把表1所示的四個教學模塊分為三個階段考核,如表2所示。
五、課內VS課外
單片機課程教學改革能夠保證培養學生的實踐動手能力、儀器使用能力、單片機技術應用能力。但是單片機的課程效果應該不僅僅局限于課內??梢栽谡n堂教學的基礎上,發展單片機興趣小組,并引導和鼓勵學生參加各種級別的電子設計競賽等,從而進一步提高學生的實踐技能和創新能力。
本文僅對單片機課程教學改革中比較突出的五個方面進行了闡述。除此之外,在教學過程中還應該注重校企合作、工學結合等各種教學模式,開發適合高職院校教學的教學教材,運用多種生動有趣的教學方法等。
總之希望經過教學改革實踐,學生不再認為單片機是門晦澀難懂的課程,從而激起他們對該課程的學習熱情,使其真正能夠成為培養高職學生成為市場上搶手的單片機應用技能型人才的金鑰匙。
篇7
【關鍵詞】 中職電子 單片機 教學 應用
隨著時代的發展,傳統的單片機教學模式已經不能滿足創新型人才培養的需要,如何激發學生的學習興趣、改善教學技巧、提高教學水平,已經成為單片機課程教學中急需解決的問題。
一、C51單片機的優點及教學現況
現今的一些大專、中職類的學校也開設了單片機課程。教學大多采用講解硬件和軟件知識為主,軟件編程選用匯編語言。學習時學生需要記住很多條指令的助記符和使用格式,多數學生覺得沒有挑戰性,學習興致不高。教師的教學效果不明顯。C語言是一種編譯型程序設計語言,它具有多種高級語言的特點,并且可以調用匯編語言的子程序。它與8051單片相結合得到的C51單片機使用范圍廣,可移植性強;且C語言與生俱來的模塊化特性使開發出來的程序模塊可不經過修改,直接被其它項目所應用,從而最大程度的實現資源共享;C語言開發的代碼便于開發小組計劃項目,靈活管理,分工合作以及后期維護;C語言還比較好入門,只需掌握一些基本的語句就能編寫簡單的程序。初學者不熟悉單片機的指令集,也能夠編寫完美的單片機程序;不理解單片機的具體硬件,也能夠編出符合硬件實際的專業水平的程序。隨著企業對C51單片機的推廣和應用,一些高校也開始相應地調整了單片機的教學內容和教學方法。教師在進行理論教學時除了要講解單片機的結構外,還要講解C語言,還有一些學校添加了相應的仿真模擬設備。但是學生對單片機的學習興趣提高不明顯。
二、從培養學生競賽的角度出發,進行C51單片機理實一體化教學
省市級的單片機競賽題都是給出一個工程具體的項目讓學生在短時間內去解決。學生需要進行需求分析、模塊選擇、線路連接和程序調試。為此,從培養學生競賽的角度出發,提出C51單片機理實一體化教學模式的新思路如下:首先,教學方法,教學時,主要采用講授法與問答法、演示法等教學方法。但要注意多留給學生一點時間讓他們自己去編程。其次,教學設備,所需要的教學設備主要有電腦、開發板等。開發板的功能不需要太全面只需具有流水燈、數碼管、獨立鍵盤、矩陣鍵盤、AD或DA、液晶、蜂鳴器即可。最后,教學內容,教學時將C51的知識分為六個部分來講解。每一部分教師既要講解C51單片機相應的硬件結構,又要講解軟件編程,并讓學生進行仿真,建議采用理實一體化教學模式。這六部分如下:⑴C51的編程軟件Keil和仿真軟件Proteus。該部分主要是讓學生熟悉軟件編程的工作環境、操作界面,學會設置與編程有關的一些參數以及如何將兩者結合起來進行仿真;⑵51單片機I/O口的應用、數據的串并行傳輸和C語言基本語句。C語言中的基本語句if、while、switch/case等運用很廣泛,學生掌握了這些語句就可以編程。51單片機I/O口的應用、數據的串并行傳輸是重點,講授時可以先讓學生掌握這些理論的知識再進行編程,或者先選出一個端口來進行軟件編程,再講解他們的硬件結構讓學生自己去編程;⑶LED和數碼管的顯示。簡單的單片機多用于控制一些LED和數碼管,而程序是否正確也要通過數碼管來體現;⑷內部定時器與中斷。中斷在單片機中非常重要;⑸鍵盤。這一部分內容包括鍵盤的結構原理、軟硬件去抖動等相關的知識;⑹A/D,D/A轉換。在鍵盤的基礎上,若要顯示時間,但時間不太準確,就需通過鍵盤來調節,我們可以先設置鍵盤上的鍵的作用。以上這些內容基本涵蓋了單片機的軟、硬件最關鍵的內容,其他一些比較復雜的控制系統都以此為基礎,學生在做其他課題時,可以先搭建這些框架,在再進行其它功能的添加和修改。
三、C51系列單片機的應用
篇8
關鍵詞:單片機;實訓設備;編程語言
一、選擇合適的實訓設備
不一定需要買數千元以上的實訓設備。像STC89C52等51單片機價格僅幾元錢、可以反復燒寫程序,最適合初學者入門。在淘寶網上可購買相應的實訓板,其價格低廉,有配套的例程、視頻教程和相關開發軟件,功能也很強大,可以達到和數千元設備一樣的實訓效果。
二、選擇編程語言
單片機編程語言有匯編語言和C語言兩種。匯編語言要求編程者對寄存器的地址非常清楚,指令較多,中職學生很難入門。而C語言靈活、編程思路符合人們的思維習慣,很容易實現模塊化編程,可供參考的程序示例也很多,可移植性強,所以要采用C語言編程。編程環境一般都采用傳統的 keil uvision 4或其他版本。
三、循序漸進做好入門五步
1.做好第一個C51工程(點亮一個燈)
所謂做好第一個C51工程,就是通過點亮一個LED來使學生學會“了解單片機的I/O口搭建硬件電路啟動keil uvision 4并進行設置建工程、命名、保存建.c文件、命名、將.c文件添加到工程中去輸入用‘位操作’點亮一個LED的程序代碼(注:代碼只有幾行,這里不要求學生理解代碼的含義,只要求知道一個C51工程的基本結構)編譯燒寫程序到單片機觀察效果在此基礎上,再講解代碼的含義”。
第一個C51工程很簡單,但也很關鍵。做好了第一個C51工程,可以使學生掌握開發一個工程的步驟,激發學生的好奇心并增強自信心。
鞏固與提高:指導學生做好“操作單個端口(位操作)”同時點亮多個燈的實驗,再講清10進制、16進制、二進制數的含義和相互轉換的方法,再指導學生做“操作一組端口(字節操作)”,同時點亮多個燈的實驗。這時學生就能感受到已站在“入門的門檻上”了。
2.讓燈眨眨眼―― 一只腳踏進單片機的大門
給學生講清一個帶參數的延時函數,學生就能夠在第一個工程的基礎上編程控制燈,并周期性地點亮、熄滅。
鞏固與提高:學生獨立做多個燈的亮、滅閃爍實驗,可以用位操作或字節操作,但因為用字節操作程序簡潔一些,所以提倡該方法。
3.學會花樣流水燈――真正入門
該實驗可以把C51的基本知識――常量、變量、數據類型、運算符、語法、語句全部用到,還會用到單片機的定時器,學會配置寄存器的基本方法。
這部分要采用即學即用的方法。將C51的知識分解成若干個小模塊,每講一個小模塊,就指導學生用該模塊的知識做一個流水燈的實驗,這樣,學生更容易掌握,并能夠及時看到成果。具體做法是:
(1)先讓學生分別用位操作、字節操作實現流水燈,并進行復習、鞏固。
(2)學習庫函數后,用循環移位庫函數實現流水燈。
(3)學習if語句、swtich...case語句后,分別用這兩個語句實現流水燈。
(4)學習數組、指針后,分別用數組、指針實現流水燈。
鞏固與提高:指導學生完成數碼管的靜態顯示和動態顯示。動態顯示有一定的難度,老師可以講解典型范例,使學生理解,然后改變硬件的接線、改變顯示的內容,讓學生自己完成,這樣可使學生真正掌握。
到達這里,學生就算入門了。然后指導學生學習單片機的器件(如小型液晶屏、溫度傳感器、各種電機、AD/DA模塊等),并用這些器件和單片機組合來模擬很多產品(如微波爐、豆漿機、生產線等)的設計,使學生綜合編程能力在實戰中得到實質的提升。
四、初學者學習單片機的方法與技巧
1.記憶
對C51的規則、語法、語句要記憶。在實際應用中可以使記憶更加牢固。
2.對關鍵狀態的處理
首先閱讀項目任務書,搞清楚產品的工作過程,特別要搞清楚工作過程中有哪些關鍵時刻(狀態)。用標志變量賦不同的值(如a=1;a=2;…)或者給不同的標志變量賦一個值(如a=1;b=1;…)表示這些關鍵狀態,有利于編程時對這些關鍵狀態的表述。這是解決復雜問題的關鍵措施之一。
3.仿寫
當找不到編程思路時,可以看別人寫好的例程,找到思路后,再自己獨立地完成仿寫,這樣可使自己較快地解決問題,增強信心。堅持下去,就會逐步形成自己的編程思想。
4.對單片機的器件的使用
應閱讀其資料,大致了解,再結合例程(網上一般都有)進行套用,只需修改部分參數或部分代碼就可符合自己的需求,這是快速應用的技巧。
5.精煉、高效
對自己的代碼,要反復檢查,刪掉多余的語句,使代碼更精煉、更高效,還要考慮用其他的思路來實現本項目。要保存自己成熟的代碼,以便移植到其他項目中去。
篇9
關鍵詞:單片機技術;教學改革;培養興趣;教學手段;實踐應用
【中圖分類號】TP368.1-4
1引言
“單片機技術及應用”是大學計算機科學與技術專業的一門專業必修課程,對于高校學生來說,學習該課程是初步認識單片機的整體設計過程,為將來從事信息系統工作及電子產品的設計、檢測和維修奠定堅實的基礎,具有不可替代的作用和意義。
2培養學習興趣
單片機技術與應用課程是大四學生需要學習的一門專業課程,因此在課堂教學過程中,教師要結合學生的培養目標、就業方向,從實際出發,注重理論基礎與實際應用的結合,多給學生展示單片機廣闊的應用前景和具體產品,使他們體會到單片機技術在以后的工作生活中都具有很強的實用性,認識到單片機技術強大的潛能和發展空間,從而激發他們學習的興趣和求知欲。
2.1 聯系實際
為使學生更好的接受抽象的知識,在講述具體內容之前,可以列舉大量單片機的應用實例。如在日常生活中常見的洗衣機、冰箱、熱水器和空調等家用電器的智能化控制[1],這些都離不開單片機。抽象的教學內容與身邊活生生的應用實例相結合,給學生一個看得到、聽得見、摸得著的學習目標,大大提高了學生學習單片機的興趣。
2.2 組織競賽
學以致用是教學的根本目標,結合新形勢下教育目標模式轉型,對學生的培B重在能力的培養,這就需要給學生一個平臺,讓學生自己去動手、去實踐。單片機課程為學生安排了對應的實驗課程,但這在實際應用中是遠遠不夠的,因此可以組織一些電子設計大賽,讓學生積極的參與其中,為其學習興趣的培養提供一個積極的推進作用,大大激發學生的學習主動性。
3優化教學內容
3.1 緊跟時代步伐
在課堂教學中,教師應選用應用廣泛、實用性好、易學易懂易掌握的優秀教材。但教材往往是落后于科技發展的,所以教師還要了解單片機技術的發展現狀以及前沿技術,根據實際需要,在課堂上適時適當地向學生補充當前使用比較熱門的硬件接口和軟件編程技術,了解當前有關單片機的新信息、新技術和新發展,來拓寬學生的知識面,延伸和補充課堂之外的教學內容,讓學生緊跟時代步伐。
3.2 選取合適的編程語言
單片機課堂教學注重的不只是基本原理的講解,更多的是應用設計。單片機教學通常采用純匯編語言教學,這需要有前導課程“微機原理及應用”所學習的匯編語言作支撐,而在教學過程中,學生普遍認為匯編語言不易掌握,并且目前在實際的單片機應用項目開發中,使用較多的開發語言并不是匯編語言,而是單片機C51語言。單片機C51語言是由C語言繼承而來的。因此,可以將“微機原理及應用”與“單片機技術及應用”進行整合,在單片機編程設計上以C51語言為主,特別注意C51與C語言的區別,以匯編語言為輔的形式進行講解,降低由語言選擇帶來的編程難度,提高教學質量。
3.3 選取適合的軟件平臺
與C語言不同的是,C51語言運行于單片機平臺,而C語言則運行于普通的桌面平臺。因此,可以采用專門針對MSC-51系列單片機的軟件開發平臺Keil C51,以加強培養學生對C51的編程能力。在選用實驗箱時,還要考慮到培養學生的創新能力要求,盡量使用具有現在先進技術接口的實驗箱,通過課程設計或畢業設計積極引導學生使用C51開發語言進行相關軟件設計,設計難度明顯減小,程序也更加簡潔清晰[2]。
4豐富教學手段
新型人才的培養最重要的是能力的培養。知識轉化為能力必須通過實踐,實踐性教學結合理論與實際、綜合思維和感官、提高個性與社會化水平,是培養學生創新意識和創新能力的重要途徑。因此,在高校單片機的課程教學中,一定要從實際需要出發。
4.1 借助多媒體教學手段
單片機課程內容抽象,要在有限的課時內講深懂、講透課程內容,依靠傳統的教學手段很難實現,這就需要教師精心設計講解內容,制作生動形象的多媒體課件,將抽象難懂的概念具體化、形象化,單調枯燥的理論多樣化、生動化,將重難點知識內容通過多媒體進行演示,可以加深理解,便于記憶。
4.2 利用仿真軟件演示
在單片機應用開發過程中,更側重于硬件設計。而在單片機教學過程中,由于硬件條件或時間條件的限制,教師在課堂上很難向學生直接具體的展示硬件設計的整個過程。而在實踐教學過程中,可以有效利用仿真軟件來達到更好的教學效果。Keil-C51和Proteus professional的出現可以滿足對單片機進行隨堂編程和電路仿真的需求。Keil軟件為項目的開發制定了一套完整的方案,學生在使用時可以直接進行編程,編譯和仿真方面的練習;Proteus是集電路分析和硬件電路仿真于一體的軟件,可以很好的實現一個完整的電路設計系統。
5 提高教師的業務能力
5.1 及時補充新知識
要培養高素質的學生,必須要有高素質的教師隊伍,授課教師應緊跟軟硬件技術的發展動態,不斷學習充實自己,才能夠勝任工作的需要,才能跟上時代的步伐。單片機的發展速度較快,利用單片機技術來進行產品開發、控制系統設計的過程中,需要用的知識較多,這就需要教師具有電子產品研發和工程實踐的經驗,否則就無法使學生對該課程產生深刻的理解。
5.2 提高科研能力
教師在課堂上的旁征博引,大都以科研經驗為背景,正所謂見多識廣,見得多用得多,自然能夠講的深入淺出、得心應手。教學和科研是相輔相成的,教學是科研的基礎,科研是教學的提高,教學與科研的這種關系,反映了教學與科研的內在聯系,決定了高校離不開科研的職能。用科研實例的形式來調動學生學習的積極性、主動性,培養學生的創新能力。
6 總結
“單片機技術及應用”是一門應用性極強的課程,隨著單片機新技術的飛速發展,給單片機課程內容本身增了很多新的元素。而對于高校來說,教育的基本任務是從學生原有基礎和身心發展特點出發,使他們的素質獲得發展,逐步適應社會建設和發展的客觀需要。因此高校教師在教學過程中,要不斷探索研究行之有效的方法措施,緊緊抓住“應用”這個綱領,注重學生實際設計能力的培養,實現教與學的最佳統一。
參考文獻:
篇10
【關鍵詞】單片機 LED 電子煙花 軟件編程
1 引言
當今社會,在喜慶的日子里,燃放煙花已經成了必不可少的項目,但燃放煙花爆竹帶來的危險事故也不計其數。近年來出現了一種安全環保的電子煙花,然而市場上電子煙花點火電路大多是電路設計負責、涉及元器件眾多。所以筆者提出以單片機為控制核心,用LED模擬普通煙花引線燃燒過程來實現電子煙花的點火過程,且成功完成硬件到軟件的設計研制出完整的電子煙花點火部件。由于單片機體積小、質量輕、價格低、可靠性高、靈活性好、編程開發較為容易等有點,所以此項工作有較廣闊的應用前景。
2 設計思路
(1)為了能更好的欣賞煙花絢麗效果,點燃煙花通常是發生在無光的夜晚,所以可采用光敏電阻將點火者發出的光信號轉換為啟動電子煙花的電信號。
(2)單片機內部燒寫的程序處于查詢狀態,一旦接收到啟動電子煙花的電信號立即執行LED流水燈程序模擬引線燃燒,之后再發出打開電子煙花的數字信號(如控制繼電器)。
(3)可用較多的LED固定為長條引線狀(本次實驗用8個LED與單片機P1.0-P1.7八個I/O口相連)
(4)將光信號轉換為電信號的模擬電路部分,可以采用光敏電阻的分壓來實現,在未點火情況下,光敏電阻阻值很大,大部分電壓被光敏電阻分得,常值電阻分壓很?。ㄐ∮?.5伏,無法啟動單片機);在點火情況下,在光源照射下,光敏電阻阻值減?。ㄟh小于常值電阻阻值),導致5伏電壓的分壓大部分將在常值電阻上(單片機接收到高電平信號,啟動點火裝置)
(5)編程實現流水燈和啟動信號的發出,軟件模塊化,方便調用,循環結構體保證可循環重復使用(詳見單片機控制LED源程序)
3 硬件設計
本裝置的硬件設計分為將光信號轉換為電信號的轉換模擬電路和單片機最小應用系統的設計。
3.1 轉換模擬電路的原理及實現
將5伏電壓經光敏電阻和常值電阻分壓,如圖1所示,選擇型號為MG44-3的光敏電阻(亮阻值≤5KΩ,暗阻值≥1MΩ,以下記為R2)和阻值為20KΩ的常值電阻(以下記為R1)連接如圖所示,通過簡單計算可知在無光黑暗條件下R2的阻值是R1阻值的50倍以上,即在R1上的分壓小于0.1伏,單片機識別為低電平信號不啟動裝置;反之,在點火條件下光敏電阻受到光照,阻值急劇下降(≤5KΩ),此時R1的阻值為R2阻值的4倍以上,記載R1上的分壓大于4伏,單片機識別為高電平信號啟動裝置,模擬煙花點火引線燃燒的過程,并啟動電子煙花開關。
3.2 單片機最小應用系統設計
因為市場上單片機開發板價格偏高,所以本裝置采用購買基礎元器件和單片機芯片自主設計并焊接單片機最小應用系統。單片機要正常工作,必須具有5個基本電路:電源電路、時鐘電路、復位電路、程序存儲器選擇電路、電路。
本裝置的單片機最小應用系統設計如圖2所示,電路焊接順序依次為:振蕩電路、復位電路、電源電路、電路、程序存儲器選擇電路。按順序完成焊接,將3.1中設計的分壓轉換模擬電路和3.2中設計完成的單片機最小應用系統按圖2所示連接,并在通用板上焊接固定。
4 軟件設計
4.1 軟件編程(本文采用C語言)
因為本裝置使用LED模擬煙花引線點燃后燃燒過程,所以編程設計只需簡單的給單片機I/O口輸出高低電平就能取得滿意的效果。具體C語言源程序給出如下:
4.2 LED顯示圖案改進
為吸引煙花觀賞者,增強LED顯示效果,將簡單的流水燈顯示加以改進。最簡單的方法是改變各個LED發光順序和發光持續時間,如可以讓序號為奇次的和偶次的LED交替發光,形成動態閃爍的效果。其軟件編程都可以使用匯編語言或Keil軟件公司的C51語言編寫調試。
5 結語
由于LED具有亮度高、低熱量、體積小、功率低、使用壽命長、環保和響應速度快等系列優點廣泛應用于照明和電子圖案顯示市場,具有廣闊的發展前景。單片機滲透到我們生活的各個領域,某些專用單片機設計用與實現特定功能,從而在各種電路中進行模塊化應用,本文所述的基于單片機控制的電子煙花點火電路方案只是該模塊化電路的一個應用方面,對很多應用和設備都可以將該裝置作為啟動或報警電路,例如光電信號轉換在火災報警器中的應用。
參考文獻
[1]樊梅香,崔琳.單片機控制LED顯示屏動態顯示的設計[J].河北工業科技,2011.
[2]何立民.MCS-51系列單片機應用系統設計[M].北京:北京航空航天大學出版社,1990.
[3]李華.MCS-51系列單片機實用接口技術[M].北京:北京航空航天大學出版社,1993:561-571.
[4]劉昆山.用單片機控制一個LED[J].電子制作,2010-02-01.
[5]喬月.基于光電檢測技術的光盤刻錄演示系統研究[D].長春:長春理工大學,2012.
[6]朱美杰.感應式無線充電技術的研究[D].南京:南京信息工程大學,2012.