這是我前些時間用匯編語言編寫的48V電池組在線單個電池充電程序。請各指教。
下載:
充電器.doc
(22 KB, 下載次數: 12)
2017-10-24 15:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- ; 中斷入口程序 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- 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
復制代碼
|