分享一个stc12c5a16s2单片机电压电流表,含有原理图和程序,有需要的自己下载参考。
单片机电压电流表的实物图:
原理图:
电压电流表的汇编语言源程序:
- ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
- ;字节地址分配
- ;0C\0D\0E\4位分别对应电流的3位由高位到底位
- ;10H,11H,12H对应电压的3个数值
- ;13H,14H,15H,16H,17H对应功率的5个数值
- ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
- P1ASF EQU 9DH ;P1口设置寄存器
- ADC_CONTOR EQU BCH ;ADC控制寄存器
- ADC_RES EQU BDH ;ADC输出高8位
- ADC_RESL EQU BEH ;ADC低8为输出
- AUXR1 EQU A2H ;设置寄存器
- IJISHU EQU 30H ;电流比较次数计数
- UJISHU EQU 31H ;电压比较次数计数
- IL EQU 32H ;电流低位
- IH EQU 33H ;电流高位
- UL EQU 34H ;电压低位
- UH EQU 35H ;电压高位
- RS BIT P2.5 ;定义RS为P2.5
- RW BIT P2.6 ;定义RW为P2.6
- E BIT P2.7 ;定义E为P2.7
- ORG 0000H
- LJMP START
- ORG 002BH
- START: MOV P1ASF,#00000011B ;开启P1.0和P1.1作为AD的输入端口
- MOV AUXR1,#04H ;设置AD输出方式
- MOV SP,#5FH ;设置栈底
- MOV IJISHU,#00H
- MOV UJISHU,#00H
- ;×××××××××××××××××××××××××
- LCD: MOV P0,#38H ;设置功能
- LCALL XML
- MOV P0,#38H ;设置功能
- LCALL XML
- MOV P0,#01H ;清除屏幕
- LCALL XML
- MOV P0,#0CH ;设置显示屏开,光标关
- LCALL XML
- MOV P0,#1CH ;设置
- LCALL XML
- ;×××××××××××××××××××××××××××
- ;主程序
- ;--------------------------------------------------------------------------------------------------
- MAIN: MOV ADC_CONTOR,#11001001B ;开启P1.1的AD转换,电流
- LCALL AD ;调用AD子程序
- MOV A,ADC_RES
- CJNE A,IH,MAINI
- MOV A,ADC_RESL
- CJNE A,IL,MAINI
- MOV IJISHU,#00H
- SJMP MAINI1
- MAINI: INC IJISHU
- MOV A,#20
- CJNE A,IJISHU,MAINI1
- MOV IJISHU,#00H
- MOV IH,ADC_RES ;保存电流数据
- MOV IL,ADC_RESL
- MAINI1: MOV 0AH,IH
- MOV 0BH,IL
- LCALL 2TO10
- MOV 0CH,18H
- MOV 0DH,19H
- MOV 0EH,1AH
- MOV A,0AH
- RRC A
- MOV 0AH,A
- MOV A,0BH
- RRC A
- MOV 0BH,A
- MOV A,0AH
- RRC A
- MOV A,0BH
- RRC A
- MOV 09H,A ;09H保存8位电流数据
- MOV ADC_CONTOR,#11001000B ;开启P1.0的AD转换 电压
- LCALL AD ;调用AD子程序
- MOV A,ADC_RES
- CJNE A,UH,MAINU
- MOV A,ADC_RESL
- CJNE A,UL,MAINU
- MOV UJISHU,#00H
- SJMP MAINU1
- MAINU: INC UJISHU
- MOV A,#20
- CJNE A,UJISHU,MAINU1
- MOV UJISHU,#00H
- MOV UH,ADC_RES ;保存电压数据
- MOV UL,ADC_RESL
- MAINU1: MOV 0AH,UH
- MOV 0BH,UL
- LCALL 2TO10
- MOV 10H,18H
- MOV 11H,19H
- MOV 12H,1AH
- MOV A,0AH
- RRC A
- MOV 0AH,A
- MOV A,0BH
- RRC A
- MOV 0BH,A
- MOV A,0AH
- RRC A
- MOV A,0BH
- RRC A
- MOV 08H,A ;08H保存8位电压数据
- MOV B,09H
- MUL AB
- MOV R2,B
- MOV R3,A
- MOV R4,#61H ;/25000
- MOV R5,#A8H
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 13H,A
- MOV R4,#09H
- MOV R5,#C4H ;/2500
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 14H,A
- MOV R4,#00H
- MOV R5,#250 ;/250
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 15H,A
- MOV R4,#00H
- MOV R5,#25 ;/25
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 16H,A
- MOV A,R3
- CLR C
- RLC A
- CLR C
- RLC A
- MOV R3,A
- MOV R5,#10
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 17H,A
- LCALL XIANSHI
- LJMP MAIN
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- ;AD转换子程序
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- AD: MOV A,ADC_CONTOR
- JNB E4H,AD
- CLR E4H
- MOV ADC_CONTOR,A
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- ;二-十进制转换子程序,同时加便宜量完成1602的0-9字模地址的转换 输出结果18H 19H 1AH
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- 2TO10: MOV R2,0AH
- MOV R3,0BH
- MOV R4,#0
- MOV R5,#2
- LCALL DIVD
- MOV A,R6
- MOV R2,A
- MOV A,R7
- MOV R3,A
- MOV R4,#00H
- MOV R5,#100
- LCALL DIVD
- MOV 18H,R7
- MOV A,#30H
- ADD A,18H
- MOV 18H,A
- MOV R5,#10
- LCALL DIVD
- MOV 19H,R7
- MOV A,#30H
- ADD A,19H
- MOV 19H,A
- MOV 1AH,R3
- MOV A,#30H
- ADD A,1AH
- MOV 1AH,A
- RET
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××
- ;双字节除法运算子程序
- ;入口条件: 被除数在R2、R3、除数在R4、R5中,商在R6、R7中。R1用于计数位移量
- ;出口信息: 余数在R2、R3中,双字节商在R4、R5中,OV=1 时溢出。
- ;影响资源: PSW、A、R1~R7
- ;××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- DIVD: PUSH A
- PUSH PSW
- MOV R1,#00H ;计数器清零
- MOV R6,#00H
- MOV R7,#00H
- LCALL SUBBD ;判断够不够减
- JC DIVDE
- DIVD1: MOV A,R4
- JB ACC.7,DIVD3 ;判断最高位是不是1
- CLR C ;除数左移一位
- MOV A,R5
- RLC A
- MOV R5,A
- MOV A,R4
- RLC A
- MOV R4,A
- INC R1 ;左移计数器计数
- LCALL SUBBD ;比较左移后够不够减
- JNC DIVD1 ;够减转移,不够减继续
- LCALL DIVDR ;除数右移一位
- DEC R1 ;右移了,所以要-1
- DIVD3: CLR C
- MOV A,R3 ;开始减法
- SUBB A,R5
- MOV R3,A
- MOV A,R2
- SUBB A,R4
- MOV R2,A
- INC R7
- DIVD4: CJNE R1,#00H,DIVD5 ;判断是不是到最后一位了
- SJMP DIVDE
- DIVD5: LCALL DIVDR ;除数右移一位
-
- …………余下代码请下载附件…………
复制代码
所有资料下载:
108_1316154_e5898954f06cb7b.zip
(519.24 KB, 下载次数: 441)
|