?? sun.asm
字號(hào):
;*********************************************
; 用89C52制作太陽(yáng)電池?cái)?shù)顯充放電控制器原程序
;
;**********************************************
;
;70H內(nèi)存單元存放采樣值,78H-7AH存放顯示的BCD碼數(shù)據(jù),
;自然就依次為個(gè)位、十位和百位,模數(shù)轉(zhuǎn)換器是ADC0809
;*************************************
;* *
;* 主程序和中斷程序入口 *
;* *
;*************************************
ORG 0000H ;程序執(zhí)行開始地址
LJMP START ;跳至START執(zhí)行
NOP ;軟件陷阱
NOP ;
LJMP ERR ;
ORG 0003H ;外中斷0中斷入口地址
RETI ;中斷返回(不開中斷)
NOP;
NOP;
LJMP ERR;
ORG 000BH ;定時(shí)器T0中斷入口地址
LJMP ERR ;
NOP;
NOP;
LJMP ERR;
ORG 0013H ;外中斷1中斷入口地址
RETI ;中斷返回(不開中斷)
NOP;
NOP;
LJMP ERR;
ORG 001BH ;定時(shí)器T1中斷入口地址
RETI ;中斷返回(不開中斷)
NOP;
NOP;
LJMP ERR;
ORG 0023H ;串行口中斷入口地址
RETI ;中斷返回(不開中斷)
NOP;
NOP;
LJMP ERR;
ORG 002BH ;定時(shí)器T2中斷入口地址
RETI ;中斷返回(不開中斷)
NOP;
NOP;
LJMP ERR;
;
;*************************************
;* *
;* 初始化程序中的各變量 *
;* *
;*************************************
CLEARMEMIO: CLR A ;累加器A清零
MOV P2,A ;P2口置0
MOV 70H,A ;70H單元內(nèi)存清0
MOV A,#0FFH ;累加器A置1
MOV P0,A ;P0、P1、P3端口置1
MOV P1,A ;
MOV P3,A ;
RET ;子程序返回
NOP;
NOP;
LJMP ERR;
;
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
START: MOV SP,#60H;
MOV PSW,#00H;
MOV SCON,#00H;
MOV TMOD,#01H;
SETB ET0;
SETB PT0;
MOV TL0,#0FBH;
MOV TH0,#0FFH;
SETB TR0;
SETB ET0;
LCALL CLEARMEMIO ;初始化
MAIN: LCALL DISPLAY ;顯示數(shù)據(jù)一次
LCALL TEST ;測(cè)量一次
LCALL ATT ;
LCALL AQQ ;
NOP ;
NOP ;
LCALL WATCH_DOG ;
AJMP MAIN ;返回MAIN循環(huán)
NOP ;PC值出錯(cuò)處理
NOP ;空操作
NOP ;空操作
LJMP START ;重新復(fù)位起動(dòng)
NOP;
NOP;
LJMP ERR;
WATCH_DOG: MOV TL0,#0FBH;
MOV TH0,#0FFH;
SETB TR0;
RET;
NOP;
NOP;
LJMP ERR;
;
;**********************************************
;將顯示數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制BCD碼,并調(diào)顯示子程序 *
;**********************************************
DISPLAY: MOV R0,#70H ;顯示數(shù)據(jù)初址(70H-77H)
MOV A,@R0 ;顯示數(shù)據(jù)轉(zhuǎn)為三位十進(jìn)制BCD碼存入
MOV B,#100 ;7AH、79H、78H顯示單元內(nèi)
DIV AB ;顯示數(shù)據(jù)除100
MOV 7AH,A ;商入7AH
MOV A,#10 ;A放入數(shù)10
XCH A,B ;余數(shù)與數(shù)10交換
DIV AB ;余數(shù)除10
MOV 79H,A ;商入79H
MOV 78H,B ;余數(shù)入78H
MOV R2,#0FFH ;
DISLOOP2: LCALL DISP ;調(diào)四位LED顯示程序
DJNZ R2,DISLOOP2 ;
RET ;
NOP;
NOP;
LJMP ERR;
;*************************************************************************
; LED共陽(yáng)顯示子程序,顯示內(nèi)容在78H-7BH,數(shù)據(jù)在P1輸出,列掃描在P3.0-P3.3口*
;*************************************************************************
DISP: MOV R1,#78H ;賦顯示數(shù)據(jù)單元首址
MOV R5,#0FEH ;掃描字
PLAY: MOV P1,#0FFH ;關(guān)顯示
MOV A,R5 ;取掃描字
ANL P3,A ;開顯示
MOV A,@R1 ;取顯示數(shù)據(jù)
MOV DPTR,#TAB ;取段碼表首址
MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼
MOV P1,A ;段碼放入P1口
CLR P1.7 ;開小數(shù)點(diǎn)
LCALL DL1MS ;顯示1MS
INC R1 ;指向下一地址
MOV A,P3 ;取P3口掃描字
JNB ACC.2,ENDOUT ;三位顯示完轉(zhuǎn)ENDOUT結(jié)束
RL A ;掃描字循環(huán)左移
MOV R5,A ;掃描字放入R5暫存,
MOV P3,#0FFH ;顯示暫停
SETB P3.0 ;
SETB P3.1 ;
SETB P3.2 ;
SETB P3.7 ;
AJMP PLAY ;轉(zhuǎn)PLAY循環(huán),
MOV P3,#0FFH ;顯示結(jié)束,端口置1
ENDOUT: SETB P3.0 ;
SETB P3.1 ;
SETB P3.2 ;
SETB P3.7 ;
MOV P1,#0FFH ;
RET ;子程序返回
NOP;
NOP;
LJMP ERR;
;
;***********************************************************
;LED數(shù)碼顯示管用共陽(yáng)段碼表,分別對(duì)應(yīng)0-9,最后一個(gè)是"熄滅符"*
;***********************************************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;***************************
; 1MS延時(shí)子程序,LED顯示用 *
;***************************
DL1MS: MOV R6,#14H ;
DL1: MOV R7,#19H;
DL2: DJNZ R7,DL2;
DJNZ R6,DL1;
RET;
NOP;
NOP;
LJMP ERR;
;
;*********************
;*模數(shù)轉(zhuǎn)換測(cè)量子程序 *
;*********************
TEST: CLR A ;累加器A清零
MOV P2,A ;清P2口
MOV R0,#70H ;轉(zhuǎn)換值存放首址
LCALL TESTART ;啟動(dòng)測(cè)試
WAIT: JB P3.7,MOVD ;P3.7=1則轉(zhuǎn)MOVD處執(zhí)行,等A/D轉(zhuǎn)換結(jié)束信號(hào)后轉(zhuǎn)MOVD
AJMP WAIT ;P3.7為0等待
NOP;
NOP;
LJMP ERR;
;
;****************
;測(cè)試啟動(dòng)子程序 *
;****************
TESTART: SETB P2.3 ;鎖存測(cè)試通道地址
NOP ; 延時(shí)2微秒
NOP ;
CLR P2.3 ;測(cè)試通道地址鎖存完畢
SETB P2.4 ;啟動(dòng)測(cè)試,發(fā)開始脈沖
NOP ; 延時(shí)2微秒
NOP ;
CLR P2.4 ;發(fā)啟動(dòng)脈沖完畢
NOP ;延時(shí)4微秒
NOP ;
NOP ;
NOP ;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -