周波

摘 要:結合實際,重點闡述了電阻、電容和電感測試儀軟件程序。
關鍵詞:電阻;電容;電感測試儀;程序設計
本設計是用匯編語言對AT89S51編程,以下是各個單元的軟件設計。
1 整體程序設計
整體程序是對各個子程序的調用和組織,系統開始后,主程序負責安排初始化、系統信號的發送和讀取,以及數據的處理,最后通過LED做數據顯示。系統的測量選擇可以由按鍵選擇并且由發光二極管做指示。
整體程序設計如下:
ORG 0000H
LJMP START
ORG 001BH
JMP INTM1 ;定義中斷地址
ORG 0030H
START : MOV A,#3H
MOV P2,A ; 初始化p2口
LOOP1: JB P2.2,DZ1; 有按鍵1動作則轉dz1
JB P2.3,DR1; 有按鍵2動作則轉dr1
JB P2.4,DG1; 有按鍵3動作則轉dg1
LCALL DELAY; 延時
LJMP LOOP1; 若無按鍵動作,繼續掃描
DZ1: MOV A,#24H
MOV P2,A; 點亮二極管1并選通電阻測量
LCALL DZ ; 調用電阻處理模塊
LCALL DISPLAY; 調用顯示程序
LJMP START ; 電阻處理完畢,程序返回等待下次測量
DR1: MOV A,#49H
MOV P2,A ; 點亮二極管2并選通電容測量
LCALL DR ; 調用電容處理模塊
LCALL DISPLAY; 調用顯示程序
LJMP START ; 電容處理完畢,程序返回等待下次測量
DG1: MOV A,#92H
MOV P2,A ; 點亮二極管3并選通電感測量
LCALL DG ; 調用電感處理模塊
LCALL DISPLAY; 調用顯示程序
LJMP START; 電感處理完畢,程序返回等待下次測量
程序運行順序是先定義程序開始地址,定義T1口中斷地址,初始化P2口,判斷按鍵動作,如果有動作,則被選擇電路的指示燈亮,否則繼續循環掃描按鍵,直到有鍵按下。
2 初始化模塊設計
初始化首先是通過單片機P2口的賦值來使CD4052按照要求選通,定義中斷類型和中斷地址,初始化計數定時器。
初始化P2口的賦值來使CD4052按照要求選通:
3 按鍵掃描和指示電路程序設計
按鍵通過上拉電阻給予高電平,動作時直接會給P2.2或者P2.3或者 P2.4一個高電平,通過掃描P2.2-P2.4則可以判斷按鍵動作,如果有按鍵按下,通過P2.5 P2.6 P2.7分別點亮指示燈,同時P2.0 P2.1送出相應數據選通CD4052使相應的測量電路選通,數據通過CD4052的13腳進入單片機T0計數器,到此,按鍵掃描電路工作完成。
4 數據處理模塊設計
數據處理主要是把從T0讀取的頻率數通過計算轉換成相應的電阻、電容和電感值。圖為讀取頻率的子程序流程圖(如圖1)
設計思想是通過計數定時器來計算在10ms內的頻率計算,然后通過中斷服務程序循環100次來達到定時1s的頻率計算。部分程序如下所示:
START1:
MOV TMOD,#15H; 方式1,t0計數,t1定時10ms
MOV TH1,#0D8H;
MOV TL1,#0F0H; 初始化t1,定時10ms
MOV TH0,#0H;
MOV TL0,#0H; 初始化t0
MOV IE,#88H; 開中斷
MOV R2,#0H; 循環記數器初始化
SETB TR1; 開始定時和記數
SETB TR0;
YL1: CJNE R2,#100,YL1 ; 中斷100次,定時1s
CLR TR1 ; 關定時記數
CLR TR0 ;
MOV A,TL0 ; 保存記數值
MOV B,TH0;
RET
INTM1: MOV TH1,#0D8H; t0中斷
MOV TL1,#0F0H; 初始化t1,定時1us
INC R2
RETI
首先計算定時時間為10ms,則定時初值為65536-10000=55536=D0F0H,所以分別賦予TH1=0D8H,TL1=0F0H,循環計算器R2初值為零,開中斷,EA=1,ET1=1,開始定時計算,定時時間到,判斷R2是否等于100,不等,則進中斷,等,則關定時計算器,保存TL0和TH0的頻率到A和B。中斷程序首先初始化T1,R2自加1。整個頻率讀取完成。
5 數據顯示模塊設計
數據顯示由四位數碼管顯示,其中第一位顯示個位,第二位顯示十分位,第三位和第四位顯示倍數,如顯示1即表示101倍。
以下是十位和個位顯示程序。
DISPLAY: MOV DPTR,#NUMTAB; 指定查表啟始地址
MOV R0,#4 ; 定義外循環次數
DPL1: MOV R1,#250 ; 定義內循環次數
DPLOP: MOV A,A_BIT ; 取十位數
MOVC A,@A+DPTR ; 查十位數的7段代碼
MOV P0,A ; 送出十位7段代碼
SETB P1.0 ; 開十位顯示
ACALL DLMS ; 顯示161微秒
CLR P1.0 ; 關閉十位顯示,防止鬼影
MOV A,B_BIT ; 取個位數
MOVC A,@A+DPTR ; 查個位數的7段代碼
MOV P0,A ; 送出個位的7段代碼
SETB P1.1 ; 開個位顯示
ACALL DLMS ; 顯示161微秒
CLR P1.1 ; 關閉個位顯示,防止鬼影
、、、、、、、、、
、、、、、、、
DJNZ R1,DPLOP ; 循環執行250次
DJNZ R0,DPL1 ; 循環執行250X4=1000次
RET
DLMS: MOV R7,#80 ; 1+2X80=161微秒,延時按12MHZ計算
DJNZ R7,$
RET
NUMTAB: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
程序先指定查表啟始地址,定義內、外循環次數,取要顯示的數據,查表,送出7段代碼,開顯示,延時,關閉顯示,繼續顯示下一位,當把四位都顯示完了開始循環掃描1000次,使顯示穩定。