;*********************************************************************** ; 自收發光電檢測.dt ;*********************************************************************** PORT5 == 0x05 ;定義端口5,6,7 PORT6 == 0x06 PORT7 == 0x07 ;----------------------------------------------------------------------- IOCE == 0x0E ;定義WDT控制寄存器IOCE ;----------------------------------------------------------------------- DLY1 == 12 ;定義延時置數單元DLY1,DLY2,DLY3,DLY4 DLY2 == 13 DLY3 == 14 DLY4 == 15 BUFFER == 16 ;定義暫存器BUFFER,存放當前輸出 ;----------------------------------------------------------------------- ORG 0X00 INIT: MOV A,@0X11 ;關閉看門狗功能 IOW IOCE MOV A,@0XFF ;設定PORT5全部為輸入 IOW PORT5 MOV A,@0X00 ;設定PORT6、PORT7全部為輸出 IOW PORT6 IOW PORT7 MOV A,@0XFF ;設置暫存器BUFFER初值, MOV BUFFER,A MOV PORT7,A ;PORT7輸出指示LED全暗 MOV A,@0X00 MOV PORT6,A ;PORT6輸出低電平,熄滅光電發射管 GDCHECK: MOV A,@0XFF ;PORT6輸出高電平,點亮光電發射管 MOV PORT6,A CALL DL10 ;發射時間維持5ms左右 MOV A,PORT5 ;從PORT5讀入光電接收管狀態 AND A,@0B00000111 ;屏蔽高5位,只保留3位 XOR A,@0XFF ;光電接收管狀態值反向 MOV BUFFER,A ;送暫存器BUFFER保存 MOV A,@0X00 ;PORT6輸出低電平,熄滅光電發射管 MOV PORT6,A DISPLAY: MOV A,BUFFER ;發光二極管顯示光電接收狀態值 MOV PORT7,A CALL DELAY ;采樣延時 JMP GDCHECK ;繼續進行自收發光電信號檢測 ;----------------------------------------------------------------------- DELAY: MOV A,@1 ;延時,需要調整 MOV DLY3,A ;1 DEL: MOV A,@10 ;1*(DLY3) MOV DLY2,A ;1*(DLY3) INNER2 MOV A,@250 ;1*(DLY3)*(DLY2) MOV DLY1,A ;1*(DLY3)*(DLY2) INNER1: DJZ DLY1 ;1*(DLY3)*(DLY2)*(DLY1) JMP INNER1 ;1*(DLY3)*(DLY2)*(DLY1) DJZ DLY2 ;1*(DLY3)*(DLY2) JMP INNER2 ;1*(DLY3)*(DLY2) DJZ DLY3 ;1*(DLY3) JMP DEL ;1*(DLY3) RET ;延時返回 ;----------------------------------------------------------------------- DL10: MOV A,2 ;延時5ms左右,需要調整 MOV DLY4,A INNER3: DJZ DLY4 JMP INNER3 RET EOP |