新手小白在做一个液位检测
仿真用到一段汇编代码,但是我不懂汇编,求大神能帮把汇编代码改成相应的C代码;
代码如下:
(1)
MOV DPTR,#TABLE ;取段码表首址。
MOV A,LED_2 ;取显示的十位数字。
MOVC A,@A+DPTR ;取段码。
MOV P0,A ;输出段码的显示。
TABLE: DB 3FH,06H,5BH,4FH,66H ;共阴极数码管表
DB 6DH,7DH,07H,7FH,6FH
(2)
LED_0 EQU 30H
LED_1 EQU 31HLED_2 EQU 32HLED_3 EQU 33HBUFFER EQU 34H ;显示缓存ADC EQU 35HTCNTA EQU 36HTCNTB EQU 37HH_TEMP EQU 38H ;液位上限L_TEMP EQU 39H ;液位下限FLAG BIT 00HH_ALM BIT P3.0L_ALM BIT P3.1SOUND BIT P3.7CLOCK BIT P2.4ST BIT P2.5EOC BIT P2.6OE BIT P2.7 ORG 00H SJMP START ORG 0BH LJMP INT_T0 ORG 1BH LJMP INT_T1START: MOV LED_0,#00H MOV LED_1,#00H MOV LED_2,#00H MOV DPTR,#TABLE ;送段码表首地址 MOV H_TEMP,#153 ;204/255=0.8 高于times New Roman">80%报警 MOV L_TEMP,#77 ;77/255=0.3 低于30%报警 MOV TMOD,#12H ;开中断 MOV TH0,#245 MOV TL0,#0 MOV IE,#8AH CLR C SETB TR0 ;为ADC0808提供时钟WAIT: SETB H_ALM SETB L_ALM CLR ST SETB ST CLR ST ;启动转换 JNB EOC,$ ;等待输出结果 SETB OE ;允许输出 MOV ADC,P1 ;读取A/D转换结果 CLR OE ;关闭输出 MOV A,ADC ;将A/D转换结果转换成BCD码 SUBB A,L_TEMP ;判断是否低于下限 JC LALM MOV A,H_TEMP MOV R0,ADC SUBB A,R0 ;判断是否高于上限 JC HALM CLR TR1 LJMP PROCLALM: CLR L_ALM ;低位报警 SETB TR1 CLR FLAG LJMP PROCHALM: CLR H_ALM ;高位报警 SETB TR1 SETB FLAG LJMP PROCPROC: MOV A,ADC ;数值转换 MOV B,#51 DIV AB MOV LED_2,A MOV A,B MOV B,#10 DIV AB MOV LED_1,A MOV LED_0,B LCALL DISP ;显示A/D转换结果 SJMP WAITINT_T0: CPL CLOCK ;提供ADC0808时钟 RETIINT_T1: CPL SOUND INC TCNTA MOV A,TANTA JB FLAG,I1 ;判断是低位报警还是高位报警 CJNE A,#30,RETUNE ;低位报警声 SJMP I2 I1: CJNE A,#20,RETUNE ;高位报警声 I2: MOV TCNTA,#0 INC TCNTB MOV A,TCNTB CJNE A,#25,RETUNE MOV TCNTA,#0 MOV TCNTB,#0 LCALL DELAY2RETUNE: RETIDISP: MOV A,LED_0 ;数码管显示子程序 MOVC A,@A+DPTR ;将字段码转换显示码 CLR P2.3 MOV P0,A LCALL DELAY SETB P2.3 MOV A,LED_1 MOVC A,@A+DPTR CLR P2.2 MOV P0,A LCALL DELAY SETB P2.2 MOV A,LED_2 MOVC A,@A+DPTRORL A,#80H ;显示小数点 MOV BUFFER+2,A ;送显示缓存 CLR P2.1 MOV P0,A LCALL DELAY SETB P2.1 RETDELAY: MOV R6,#10 ;延时5msD1: MOV R7,#250 DJNZ R7,$ DJNZ R6,D1 RETDELAY2: MOV R5,#20D2: MOV R6,#20D3: MOV R7,#250 DJNZ R7,$ DJNZ R6,D3 DJNZ R5,D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 共阴极接法 DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9, END
一周热门 更多>