摘 要:作者使用易語言編寫了一個多型號單片機定時器初值、波特率計算器的程序,支持Atmel、Philips、SST、STC、Winbond、PIC、AVR等多種單片機,并且各種單片機內部支持的參數均可設定,對單片機編程者提供最有效、最方便的使用界面,大大提高了工作效率。
關鍵詞:單片機 定時器
中圖分類號:TM5文獻標識碼:A文章編號:1674-098X(2011)01(b)-0095-01
目前網絡上有多種多樣的單片機初值計算器,但大多功能單一,只能針對一兩種型號的單片機,且有些內部參數不可調整,限制了單片機開發者的創造性。易語言是一個易學易用的漢語編程語言,支持基于漢語字、詞編程的、全可視化的、跨主流操作系統平臺的編程工具環境,能與常用的編程語言互相調用,具有充分利用API,COM、DLL、OCX組件,各種主流數據庫,各種實用程序等多種資源的接口和支撐工具,中文源代碼被直接編譯為CPU指令,運行效率高。除了支持界面設計的可視化,還支持程序流程的即時可視化,現有各種支持庫多達40多個,可以滿足用戶幾乎所有的Windows編程需求。
由于涉及多種品牌單片機,而且每種單片機又分不同的型號,每種型號之間功能上又有所不同,因此在計算上有多種不同的參數和計算方法,在多種單片機之間很難有一個統一的公式,并且每種單片機的設置界面也不盡相同,為此,本程序對每種品牌的單片機設置一個固定的界面,對一種單片機的不同型號之間設置不同的參數設置選項,計算公式則根據具體型號給出。
下面結合89S51系列單片機的界面分析一下各控件的功能,軟件界面如圖1:
左側一欄是單片機品牌選擇欄,使用卷簾式菜單控件,是現在軟件的流行方式,動畫效果好。主界面上方時晶振頻率輸入欄,需輸入真實硬件使用的晶振頻率,左側“串口模式”、“串口倍速”均為下拉式選擇框,依據單片機的設定選擇相應的參數。“波特率”一欄是要
使用的串口速率選擇欄,從2400bit/s到921600bit/s。右側的定時時間即定時器的中斷時間,單位為毫秒,下面的定時模式有三種,根據具體使用方式選擇,不同的方式決定不同的TH和TL值。
當需要輸入的數值和需要選擇的方式確定后,下方的TH和TL值就已經算出,最下面的誤差率分別是波特率和定時器的誤差百分比,當波特率誤差超過±3.5%時,串口通訊誤碼率將影響通訊質量,這時誤差率的字體顏色變為紅色,提示錯誤;同樣,當定時器的誤差率超過0.1%時,字體顏色變為黃色,提醒編程者誤差已經較大。右下角的大頭釘按鈕被點擊后程序界面將被固定在最前端,方便隨時使用。
部分主要的計算程序如下:
波特率=到數值(組合框_波特率.取項目數值(組合框_波特率.現行選中項))
晶振頻率=到小數(編輯框_晶振頻率.內容)×1000000÷組合框_時鐘分頻.取項目數值(組合框_時鐘分頻.現行選中項)
串口倍速=到數值(組合框_串口倍速.取項目數值(組合框_串口倍速.現行選中項))
定時時間=到小數(編輯框_定時時間.內容)÷1000
時鐘倍速=到數值(組合框_6T模式.取項目數值(組合框_6T模式.現行選中項))×到數值(組合框_12T模式.取項目數值 (組合框_12T模式.現行選中項))
TH1TL1=65536-取整(晶振頻率×時鐘倍速×串口倍速÷波特率÷32÷12+ 0.5)
實際波特率=晶振頻率×時鐘倍速×串口倍速÷32÷12÷(65536-TH1TL1)
編輯框_波特率TH值.內容=“0x”+取十六進制文本(TH1TL1\256)
編輯框_波特率Tl值.內容=“0x”+取十六進制文本(TH1TL1%256)
.如果真(組合框_定時模式.取項目數值(組合框_定時模式.現行選中項)=2)
編輯框_波特率TH值.內容=編輯框_波特率Tl值.內容
.如果真(組合框_定時模式.取項目數值(組合框_定時模式.現行選中項)=0)
TH1TL1=8192-取整(晶振頻率×時鐘倍速×串口倍速÷波特率÷32÷12+0.5)
實際波特率=晶振頻率×時鐘倍速×串口倍速÷32÷12÷(8192-TH1TL1)
編輯框_波特率TH值.內容=“0x”+取十六進制文本(TH1TL1\256)
編輯框_波特率Tl值.內容=“0x”+取十六進制文本(TH1TL1%256)
.如果真結束
波特率誤差率=(實際波特率-波特率)÷波特率×100
編輯框_波特率誤差率.內容=數值到格式文本(波特率誤差率,2,假)+“%”
計數值=定時時間×晶振頻率×時鐘倍速÷12
編輯框_定時器TH值.內容=“0x”+取十六進制文本((65536-計數值)\256)
編輯框_定時器Tl值.內容=“0x”+取十六進制文本((65536-計數值)%256)
定時誤差率=(計數值-取整(計數值))÷計數值×100
編輯框_定時器誤差率.內容=數值到格式文本(定時誤差率,3,假)+“%”
.如果真(組合框_定時模式.取項目數值(組合框_定時模式.現行選中項)=0)
編輯框_定時器TH值.內容=“0x”+取十六進制文本((8192-計數值)\32)
編輯框_定時器Tl值.內容=“0x”+取十六進制文本((8192-計數值)%32)
.如果(波特率誤差率>3.5或波特率誤差率<-3.5)
編輯框_波特率誤差率.文本顏色=#紅色
.否則
編輯框_波特率誤差率.文本顏色=#白色
.如果(定時誤差率>0.1)
編輯框_定時器誤差率.文本顏色=#黃色
.否則
編輯框_定時器誤差率.文本顏色=#白色