|
各位大神看看我做的智能输液监控系统的程序哪错了?现在还没加控制电机模块,只用显示出检测到的液滴滴速就行。但是在proteus中仿真显示器没反应怎么回事
;滴速定时5s得出的T1计数值再乘以12就是1分钟的滴数,可是为什么不显示呢?
DS:
MOV TMOD , #51H;定时器T0定时方式一,T1计数方式一(01010001)
MOV TL0 , #0B0H
MOV TH0 , #3CH;置50ms初值
MOV 20H , #100;设置循环次数100,100*50ms=5s
MOV TH1 , #00H
MOV TL0 , #000H
MOV 21H , #0
MOV 22H , #0;存放采集到的数据
SETB TR1;启动T1
SETB TR0;启动T0
WAIT: AJMP WAIT;等待中断
RET
T0INT: ;定时5s产生中断
DJNZ 20H , NEXT1
CLR TR1;关闭T1
CLR TR0;关闭T0
MOV 21H , TL1
MOV 22H , TH1
ACALL DISPLAY
AJMP EXIT
NEXT1: MOV TL0 , #0B0H
MOV TH0 , #3CH;继续定时
EXIT: RETI;显示
DISPLAY:
MOV A , 21H;取5s计数值
MOV B , #10;16进制转换为10进制
DIV AB;A/B的商存入A,余数存入B
MOV R1 , A;R1存放十位数
MOV R2 , B;R2存放个位数
ADD B , R2;相当于B*2
MOV R2 , B
ADD B , R2;相当于B*4
MOV R2 , B
ADD B , R2;相当于B*8
ADD B , R2;相当于B*12
ADDC A , R1;相当于A*2
MOV R1 , A
ADDC A , R1;相当于A*4
MOV R1 , A
ADDC A , R1;相当于A*8
ADDC A , R1;相当于A*12
MOV R1 , A;此时R1存放以分为单位的十位数
MOV R2 , B;此时R2存放以分为单位的个位数
MOV R3 , #50;设导通频率为50
LOOP1:MOV A , R2;取个位数
ACALL CHANG;调用显示
CLR P2.1;开个位显示
ACALL DLY10ms;调用延时10ms程序
SETB P2.1;开关个位显示
MOV A , R1;取十位数
ACALL CHANG;调用显示
CLR P2.0;开十位显示
ACALL DLY10ms;调用延时10ms程序
SETB P2.0;开关十位显示
RET
CHANG:MOVC A , @A+DPTR;取表子程序
MOV P0 , A
RET
DLY10ms:
MOV R6 , #20
D1:
MOV R7 , #248
DJNZ R7 , $
DJNZ R6 , D1
RET;延时返回
TABLE:DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB 0C6H,0A1H,86H,8EH
RET;液位
|
|