这是我前些时间用汇编语言编写的48V电池组在线单个电池充电程序。请各指教。
下载:
充电器.doc
(22 KB, 下载次数: 12)
- ; 中断入口程序 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ORG 0000H ;程序执行开始地址
- LJMP START ;跳到标号START执行
- ORG 0003H ;外中断0中断程序入口
- RETI ;外中断0中断返回
- ORG 0013H ;外中断1中断程序入口
- RETI ;外中断1中断返回
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; 主 程 序 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- START:
- MOV R0,#70H ;清70H-7AH共11个内存单元
- MOV R7,#0BH ;
- MOV A,#00H ;清P1口
- MOV P1,A
- MOV A,#0FFH ;P3口置高电平
- MOV P3,A
- LCALL YS3S
- CLEARDISP:
- MOV @R0,#00H ;
- INC R0 ;
- DJNZ R7,CLEARDISP ;
- MOV 20H,#00H ;清20H(标志用)
- START1:
- MOV A,#20H ;J4吸动启动48V充电回路
- MOV P1,A
- LCALL YS3S
- MOV A,70H
- CJNE A ,#0FFH,JS ; 判断充电是否结束 (70H中的数不等于FF则转JS)
- AJMP WC
- JS:
- JB P3.3,JS1 ;P3.3口为1时程序往下继续
- LCALL DGDCCD ;P3.3口为0时调用单个电池充电程序(DGDCCD)
- JS1:
- JB P3.7,JS2 ;P3.7口为1时程序往下继续
- LCALL XZCDFS ;P3.7口为0时调用选择电池充电方式程序(XZCDFS)
- JS2:
- SJMP START1 ;P3.3,P3.7口均为1时跳回START1 继续等待
- ;延时3秒钟子程序,F=12MHz
- YS3s:
- MOV R3,#28
- MOV R2,#253
- MOV R1,#219
- LOOP1:
- DJNZ R1,$
- DJNZ R2, LOOP1
- DJNZ R3, LOOP1
- NOP
- RET
- ;延时1秒钟子程序,F=12MHz
- YS1s:
- MOV R3,#9
- MOV R2,#253
- MOV R1,#219
- LOOP2:
- DJNZ R1,$
- DJNZ R2, LOOP2
- DJNZ R3, LOOP2
- NOP
- RET
- DGDCCD: ;单个电池充电程序
- LCALL YS3s
- JB P3.3,TC ;P3.3不为"0"退出子程序回到主程序继续等待 P3.3为“1”转移到TC
- CLR P1.5 ;释放J4的48V充电回路
- MOV R4,#3
- DD: ;单个电池充电程序(DGDCCD)
- LCALL YS1s
- SETB P1.7 ;点亮1灯
- SETB P1.6 ;J5吸动启动18V充电回路对第一个电池充电
- LCALL YS3s
- JB P3.4,DD ;P3.4 不为"0" 继续等待
- LCALL YS3s
- LCALL YS3s
- JB P3.4,DD ;P3.4 不为"0" 继续等待
- SETB P1.2 ;J1吸动对第二个电池充电
- CLR P1.7 ;熄灭1灯
- DD1:
- LCALL YS1s
- JB P3.4,DD1 ;P3.4 不为"0" 继续等待
- LCALL YS3s
- LCALL YS3s
- JB P3.4,DD1 ;P3.4 不为"0" 继续等待
- CLR P1.2 ;释放J1
- LCALL YS1s
- SETB P1.3 ;J2吸动对第三个电池充电
- DD2:
- LCALL YS1s
- JB P3.4 ,DD2 ;P3.4 不为"0" 继续等待
- LCALL YS3S
- LCALL YS3s
- JB P3.4 ,DD2 ;P3.4 不为"0" 继续等待
- CLR P1.3 ;释放J2
- LCALL YS1s
- SETB P1.4 ;J3吸动对第四个电池充电
- DD3:
- LCALL YS1s
- JB P3.4 ,DD3 ;P3.4 不为"0" 继续等待
- LCALL YS3S
- LCALL YS3s
- JB P3.4 ,DD3 ;P3.4 不为"0" 继续等待
- CLR P1.4 ;释放J3
- LCALL YS1s
- CLR P1.6 ;释放J5 充电全部结束
- DJNZ R4, DD
- MOV 70H ,#0FFH ;设置充电结束标记
- TC:
- RET
- XZCDFS: ;选择电池充电方式程序
- LCALL YS3s
- JB P3.7,TC1 ;P3.7不为"0"退出子程序回到主程序继续等待
- SS:
- LCALL YS1s
- CLR P3.0 ;点亮常规充电灯
- JNB P3.7 , CS
- JB P3.5 ,SS ;P3.5 不为"0" 继续等待(电池未充满继续)
- LCALL YS3s
- JB P3.5 ,SS ;P3.5 不为"0" 继续等待(电池未充满继续)
- SJMP SS0
- CS: ;测试各单个电池电压
- LCALL YS3s
- JB P3.7,SS ;P3.7不为"0"继续等待
- ;CLR P3.0 ;关常规充电灯
- CLR P3.1 ;点亮测试各单个电池电压灯
- LCALL YS1s
- JB P3.7,SS ;P3.7不为"0"继续等待
- SETB P1.7 ;1 灯点亮测量第一个电池
- SS1:
- LCALL YS3s
- JB P3.7,SS1 ;P3.7不为"0"继续等待
- LCALL YS1s
- CLR P1.7
- SETB P1.2 ;测量第二个电池
- SS2:
- LCALL YS3s
- JB P3.7,SS2 ;P3.7不为"0"继续等待
- LCALL YS1s
- CLR P1.2
- SETB P1.3 ;测量第三个电池
- SS3:
- LCALL YS3s
- JB P3.7,SS3 ;P3.7不为"0"继续等待
- LCALL YS1s
- CLR P1.3
- SETB P1.4 ;测量第四个电池
- SS4:
- LCALL YS3s
- JB P3.7,SS4 ;P3.7不为"0"继续等待
- LCALL YS1s
- CLR P1.4
- SETB P3.1
- AJMP DD ;返回单个电池充电程序
- SS0:
- CLR P1.5 ;释放J4
- LCALL YS1s
- CLR P1.6 ;释放J5 充电全部结束
- MOV 70H ,#0FFH ;设置充电结束标记
- TC1:
- RET
- WC:
- END
复制代码
|