|
求大神幫我把這份匯編語(yǔ)言的代碼轉(zhuǎn)化成C語(yǔ)言的代碼,可以在KEIL里面用的。
這代碼是我找的豆?jié){機(jī)Proteus仿真源碼,但是我匯編語(yǔ)言不會(huì),求翻譯。。。。。
QQ截圖20170610185335.png (89.57 KB, 下載次數(shù): 77)
下載附件
豆?jié){機(jī)的仿真電路圖
2017-6-10 18:53 上傳
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0_RD ;INT0口中斷(液位溢出和液位過(guò)低中斷)入口
ORG 0013H
LJMP INT1_RD ;INT1口中斷(超液位中斷)
ORG 0030H ;置初始狀態(tài)
MAIN: MOV SP,#70H
SETB IT0 ;INT0口中斷觸發(fā)方式為跳變觸發(fā)`
SETB IT1 ;INT1口中斷觸發(fā)方式為跳變觸發(fā)
SETB EA ;開(kāi)放中斷
MOV IE,#85H ;開(kāi)中斷
MOV IP,#01H ;INT0中斷源為高優(yōu)先級(jí),INT1中斷源為低優(yōu)先級(jí)
CLR P3.0 ;設(shè)初值
CLR P3.1
MOV 30H,#00H ;設(shè)置時(shí)間單元清零
MOV 31H,#00H ;顯示模式單元清零
MOV 34H,#00H ;顯示定時(shí)時(shí)間單元清零
MOV 32H,#00H ;計(jì)時(shí)顯示十位清零
MOV 33H,#00H ;計(jì)時(shí)顯示個(gè)位清零
SCAN_RD:LCALL XS_RD ;開(kāi)始無(wú)鍵按下,顯示00
LCALL SCAN_KEYB ;模式選擇
JZ SCAN_RD ;有鍵按下 向下
LCALL KEY_PRSD
MOV DPTR,#JMP_RD ;設(shè)置轉(zhuǎn)移表首地址
MOV A,R5 ;取鍵值
RL A ;鍵值乘以2
INC R5
JMP @A+DPTR
JMP_RD:AJMP PRO_00 ;模式0
AJMP PRO_01 ;模式1
AJMP PRO_02 ;模式2
PRO_00:MOV 30H,#06 ;定時(shí)時(shí)間為6s
AJMP LOOP_W PRO_01:MOV 30H,#09 ;定時(shí)時(shí)間為9s
AJMP LOOP_W PRO_02:MOV 30H,#12 ;定時(shí)時(shí)間為12s
AJMP LOOP_W ;模式選擇后閃爍3次
LOOP_W:MOV 34H,30H ;調(diào)入定時(shí)時(shí)間顯示數(shù)據(jù)
MOV R7,#3 ;閃爍3次
LOOP_RD:MOV R6,#30 ;延時(shí)20MS的次數(shù)
LOOP0_RD:LCALL XS_RD ;調(diào)顯示程序
LCALL DL20MS
DJNZ R6,LOOP0_RD ;1S
MOV R6,#25 ;延時(shí)20MS的次數(shù)
LOOP1_RD:LCALL XS0_RD
LCALL DL20MS
DJNZ R6, LOOP1_RD ;0.5S
DJNZ R7,LOOP_RD ;閃爍3次
;開(kāi)始工作
MOV R6,#02 ;粉碎次數(shù)
LCALL JR_RD
G00N_GZ:LCALL
FS_RD
LCALL JR_RD
DJNZ R6, G00N_GZ
LCALL BAOJ_WRD ;加熱子程序
JR_RD: MOV 34H,30H ;給顯示單元置數(shù)
SETB P3.0 ;加熱
MOV R4,#50 ;20MS程序循環(huán)50次
GOON_JR:LCALL TIME_19MS ;調(diào)用定時(shí)20MS子程序
LCALL XS_RD ;顯示
DJNZ R4,GOON_JR ;到1S了
MOV R4,#50 ;20MS程序循環(huán)50次
DJNZ 34H,GOON_JR ;倒計(jì)時(shí)完成
CLR P3.0 ;停止加熱
RET ;粉碎子程序
FS_RD: MOV 34H,30H ;重新給顯示單元置數(shù)
SETB P3.1 ;粉碎
MOV R4,#50 ;20MS程序循環(huán)50次
GOON_FS:LCALL TIME_19MS ;調(diào)用定時(shí)20MS子程序
LCALL XS_RD ;顯示
DJNZ R4,GOON_FS ;到1S
MOV R4,#50 ;20MS程序循環(huán)50次
DJNZ 34H,GOON_FS ;粉碎完畢
CLR P3.1 ;停止粉碎
RET ;鍵盤(pán)子程序
SCAN_KEYB:MOV P2,#0EFH ;掃描有無(wú)按鍵按下
MOV A, P2
ANL A, #0EFH
XRL A, #0EFH
JZ NO_KEY
ACALL DL20MS
ANL A, #0EFH
XRL A, #0EFH
JZ NO_KEY
NO_KEY:RET
KEY_PRSD: MOV R4, P2
MOV R5, #00H
MOV DPTR,#KEY_TAB
CAL_VAL: MOV A,R5
MOVC A,@A+DPTR ;查鍵值表
XRL A,R4
JZ FIXED
INC R5 ;鍵值加1
SJMP CAL_VAL
FIXED: MOV A,P2 ;判斷按鍵是否釋放
ANL A, #0EFH
XRL A, #0EFH
JNZ FIXED
ACALL DL20MS
MOV A, P2
ANL A, #0EFH
XRL A, #0EFH
JNZ FIXED
RET
KEY_TAB: DB 0EBH, 0EDH, 0EEH
DL20MS: MOV R3, #20
DD1: MOV R4, #200
DD2: NOP
NOP
NOP
DJNZ R4, DD2
DJNZ R3, DD1
RET ;顯示子程序
XS_RD: MOV 31H,R5 ;調(diào)入模式顯示數(shù)據(jù)
MOV R0,#31H ;顯示緩存區(qū)數(shù)據(jù)
MOV P1,#00000010B ;第三個(gè)燈為顯示位置
ACALL DISP_RD ;顯示一位
XS0_RD: MOV A,34H ;將定時(shí)數(shù)據(jù)分為兩位
MOV B, #10
DIV AB
MOV 32H,A ;十位
MOV 33H,B ;個(gè)位
CJNE A,#00H,XS1_RD0 ;十位是否為0
AJMP XS1_RD
XS1_RD0:MOV R0,#32H
MOV P1,#00000100B ;第五個(gè)為顯示位置
ACALL DISP_RD ;顯示一位
XS1_RD: MOV R0,#33H ;顯示緩存區(qū)數(shù)據(jù)
MOV P1,#00000101B ;第六個(gè)燈為顯示位置
ACALL DISP_RD ;顯示一位
RET
DISP_RD:MOV DPTR,#LED_RD ;字型碼表首地址
MOV A,@R0 ;取顯示數(shù)據(jù)
MOVC A,@A+DPTR ;求顯示數(shù)據(jù)的字型碼
MOV P0,A ;輸出字型碼
ACALL DL1MS ;穩(wěn)定顯示1ms
RET ;返回
;延時(shí)小程序
DL1MS: MOV R3, #200
DDD1: NOP
NOP
NOP
DJNZ R3, DDD1
RET
;字型碼表
LED_RD: DB 3FH, 06H, 5BH, 4FH, 66H; '0, 1,2, 3,4’
DB 6DH, 7DH, 07H, 7FH, 6FH; '5, 6, 7, 8,9’ ;定時(shí)19MS子程序
TIME_19MS:MOV TMOD,#01H ;設(shè)置工作方式1和定時(shí)模式
MOV TH0,#0B5H ;計(jì)數(shù)初值為46536(O)
MOV TL0, #0C8H
SETB TR0 ;啟動(dòng)定時(shí)器
CONT_RD: JBC TF0,OVER_RD ;是否溢出
SJMP CONT_RD OVER_RD: MOV TH0,#0B5H ;重新設(shè)計(jì)數(shù)初值為46536(O)
MOV TL0, #0C8H
RET ;溢出中斷和液位過(guò)低中斷
ORG 0200H
INT0_RD:LCALL BAOJ_WRD ;直接報(bào)警并關(guān)發(fā)熱器和電動(dòng)機(jī)電源
RETI ;超液位中斷
ORG 0300H
INT1_RD:CLR EA ;關(guān)中斷
PUSH ACC ;保護(hù)現(xiàn)場(chǎng)
PUSH PSW
SETB EA ;開(kāi)中斷
SETB RS0 ;把工作寄存器切換到1區(qū)
MOV P1,#00000111B ;報(bào)警燈亮
JNB P3.0,INT0_FS ;判斷是否在加熱
CLR P3.0 ;停止加熱
WAIT_RD: JNB P3.3,WAIT_RD ;液位是否下降
SETB P3.0 ;繼續(xù)極熱
LJMP OK
INT0_FS:CLR P3.1 ;停止粉碎
WAIT0_RD:JNB P3.3,WAIT0_RD ;液位是否下降
SETB P3.1 ;繼續(xù)粉碎
OK:CLR EA ;關(guān)中斷
POP PSW ;恢復(fù)現(xiàn)場(chǎng)
POP ACC
SETB EA ;開(kāi)中斷
RETI ;報(bào)警子程序
BAOJ_WRD:CLR P3.0 ;關(guān)電源
CLR P3.1
MOV P1,#00000110B ;蜂鳴器響
LCALL DL1MS
MOV P1,#00000111B ;報(bào)警燈亮
LCALL DL1MS
AJMP BAOJ_WRD
|
|