MỤC LỤC
MỤC LỤC 1
CHƯƠNG I. ĐẶT VẤN ĐỀ VÀ VÀ NHIỆM VỤ THƯ 3
I. Đặt vấn đề 3
II. Các nhiệm vụ , chức năng của rơle số bảo vệ cách điện: 3
III.Nhiệm vụ cụ thể của Rơle số bảo vệ cách điện cho một động cơ tại nhà máy phân đạm Hà Bắc 4
CHƯƠNG 2:TỔNG QUAN VỀ RƠLE SỐ 5
I. Tổng quan về sự phát triển của Rơle số 5
II. Các chức năng của rơle số 6
2.1 .Chức năng đo lường : 6
2.2. Chức năng lấy mẫu và canh sự cố 7
2.3. Chức năng bảo vệ rơle và ghi chép sự cố 7
2.4. Chức năng chống sự cố 7
2.5. Chức năng tự động đóng lại 8
2.6. Chức năng giao tiếp với người dùng 8
III. Các chủng loại Rơle thành bộ ngày nay 8
3.1.Đường đây truyền tải 8
3.2. Đường dây phân phối 9
3.3. Bảo vệ máy biến áp 9
3.4. Bảo vệ môtơ 9
CHƯƠNG 3: THIẾT KẾ TỔNG QUÁT 10
I.Phương hướng giải quyết vấn đề 10
II.Giới thiệu về một số vi mạch dùng trong thiết bị 16
2.1 Vi điều khiển 89C52 16
2.3 Đồng hồ thời gian thực DS12887 34
CHƯƠNG 4:TÍNH TOÁN THIẾT KẾ CHI TIẾT 41
I.Tính toán thiết kế mạch đo: 41
II .Mạch số hoá: 43
III. Hiển thị kết quả đo: 45
IV. Bàn phím chức năng 49
V. EEPRROM 53
VI. Ghép nối máy tính. 53
CHƯƠNG 5. THIẾT KẾ PHẦN MỀM 56
I. Lưu đồ thuật toán cho vi điều khiển: 56
1. Lưu đồ thuật toán cho chương trình khởi tạo: 56
2. Lưu đồ chương trình phục vụ ngắt phím: 57
3. Lưu đồ chương trình phục vụ phím FUNC: 58
4. Lưu đồ chương trình phục vụ phím INC: 59
6. Lưu đồ chương trình phục vụ phím OK: 61
7. Chương trình phục vụ ngắt RTC 62
8. Chương trình phục vụ ngắt truyền tin 63
 II.thiết kế giao diện trên PC bằng Visual Basic: 
1. Giao diện 
2. lưu đồ chương trình nhận bản tin của máy tính 
CHƯƠNG 6: CHẠY THỬ, ĐÁNH GIÁ KẾT QUẢ 
PHỤ LỤC:
I. Chương trình phần mềm cho vi điều khiển của Rơle số bảo vệ cách điện.
II. Chương trình phần mềm cho Giao diện trên PC với rơle cách điện.
III. Tài liệu tham khảo.
Lời nói đầu:
Ngày nay, sự phát triển của công nghệ vi điện tử, kỹ thuật vi xử lý đã tạo ra những bước ngoặt cho quá trình tự động hoá sản xuất cũng như các hoạt động xã hội khác. Điều này đã mang lại những lợi ích to lớn: mở rộng chức năng của hệ thống, nâng cao độ tin cậy, giảm giá thành sản phẩm. Tuy nhiên, việc triển khai ứng dụng những tiến bộ nói trên vào nước ta còn nhiều hạn chế.
Việc nghiên cứu thiết kế những thiết bị sử dụng những tiến bộ này là cần thiết.
Em thực hiện đồ án nghiên cứu và thiết kế Rơle số bảo vệ cách điện sử dụng Vi điều khiển với sự hướng dẫn của PGS. Nguyễn Bình Thành và ThS.Trần Văn Tuấn. Nhằm mục đích khẳng lại định những kiến thức lý thuyết đã học bằng thực tế nâng cao kỹ năng kinh nghiệm thiết kế. 
Do thời gian ngắn và kinh nghiệm bản thân còn hạn chế nên đề tài chắc chắn không tránh khỏi những thiếu sót, rất mong được sự góp ý từ phía thầy cô và các bạn. 
Em xin chân thành cảm ơn sự giúp đỡ tận tình của các thầy, cô trong bộ môn và các bạn đã giúp em hoàn thành đồ án.
                
              
                                            
                                
            
 
            
                 124 trang
124 trang | 
Chia sẻ: banmai | Lượt xem: 2946 | Lượt tải: 2 
              
            Bạn đang xem trước 20 trang tài liệu Rơ le số bảo vệ cách điện, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
 tam chan ra data
 922 0623 C295 	clr	Clock	;xoa tam chan ra clock
 923 0625 C3 	clr	C
 924 0626 7E04 	mov	r6,#04h	;so digit duoc dua ra LED
 925 	Next_Byte:
 926 0628 7F08 	mov	r7,#08h	;so lan quay bit trong acc
 927 062A E7 	mov	a,@r1	
 928 062B 09 	inc	r1
 929 	Next_Bit:
 930 062C 33 	rlc	a	
 931 062D 9296 	mov	Data,C	;dua data ra P2.4 (noi voi chan D of 4094)
 932 062F D295 	setb	Clock	 ;dung xung clk (Chan Clk of 4094)
 933 0631 00 	nop	;tao do rong xung clk
 934 0632 00 	nop	 	
 935 0633 C295 	clr	Clock	;ha xung clock
 936 0635 00 	nop	
 937 0636 DFF4 	djnz	r7,Next_Bit	;Dua ra het 1 digit(8 bit) thi 
 938 	;chuyen sang digit tiep theo
 939 0638 DEEE 	djnz	r6,Next_Byte	;Dua ra het 4 digit thi dung
 940 063A 22 	ret
 941 ;====================================================
 942 	BCDto7thanh:
 943 063B E50C 	mov	a,digit4
 944 063D 12065F 	lcall	Trabang
 945 0640 F50C 	mov	digit4,a
 946 
 947 0642 E50B 	mov	a,digit3
 948 0644 12065F 	lcall	Trabang
 949 0647 F50B 	mov	digit3,a
 950 
 951 0649 E50A 	mov	a,digit2
 952 064B 12065F 	lcall	Trabang
 953 064E F50A 	mov	digit2,a
 954 
 955 0650 E509 	mov	a,digit1
 956 0652 12065F 	lcall	Trabang
 957 0655 F509 	mov	digit1,a
 958 
 959 0657 E508 	mov	a,digit0
 960 0659 12065F 	lcall	Trabang
 961 065C F508 	mov	digit0,a
 962 065E 22 	ret
963 ;========================
 964 	Trabang:
 965 065F C083 	push dph
 966 0661 C082 	push dpl
 967 0663 90066C 	mov dptr,#Table
 968 0666 93 	movc a,@a+dptr 	
 969 0667 D082 	pop	dpl
 970 0669 D083 	pop	dph 
 971 066B 22 	ret
 972 	Table:
 973 066C C0 	db	0C0h 	; 0
 974 066D F9 	db	0F9h	; 1
 975 066E A4 	db	0A4h	; 2	
 976 066F B0 	db	0B0h	; 3
 977 0670 99 	db	 99h	; 4
 978 0671 92 	db	 92h	; 5
 979 0672 82 	db	 82h	; 6
 980 0673 F8 	db	0F8h	; 7
 981 0674 80 	db	 80h 	; 8
 982 0675 90 	db	 90h	; 9
 983;============================================
 984 ;===================================================
 985 ;CHUONG TRINH PHUC VU NGAT PHIM
 986 ;Thuc hien thay doi cac thong so cac che do chay cua role
 987 ;Ghi lai cac thong so do vao RAM cua RTC
 988 ;Doc CSDL trong EEPROM 
 989 ;======================================
 990 	KEY_Srv:
 991 0676 C2AF 	clr	EA	;cam cac ngat khac
 992 0678 7414 	mov	a,#20	;tre 15ms de chong nhieu phim 
 993 067A 12100B 	lcall	delay_ms
 994 ;doc ma phim:
 995 067D D290 	setb	p1.0
 996 067F D291 	setb	p1.1
 997 0681 E590 	mov	a,p1
 998 0683 5403 	anl	a,#03h
 999 ;giai ma phim: 
 1000 0685 B40005 	cjne	a,#00h,notfunc
 1001 0688 1206AA 	lcall	funckey
 1002 068B 8016 	sjmp	kt
 1003 	notfunc:
 1004 068D B40105 	cjne	a,#01h,notinc
 1005 0690 120B04 	lcall	inckey
 1006 0693 800E 	sjmp	kt
 1007 	notinc:
 1008 0695 B40205 	cjne	a,#02h,notdec
 1009 0698 120C35 	lcall	deckey
 1010 069B 8006 	sjmp	kt
 1011 	notdec:
 1012 069D B40303 	cjne	a,#03h,kt
 1013 06A0 120D67 	lcall	okkey
 1014 kt:
 1015 06A3 90400C 	mov	dptr,#400ch
 1016 06A6 E0 	movx	a,@dptr	;doc thanh ghi C de xoa co UF o RTC.
 1017 06A7 D2AF 	setb	EA
 1018 06A9 32 	reti
 1019 ;================================
 1020 	funckey:
 1021 06AA 74FF 	mov	a,#255	;tre 255ms de chong nhieu phim 
 1022 06AC 12100B 	lcall	delay_ms
 1023 06AF 7401 	mov	a,#ClearDsp
 1024 06B1 120E61 	lcall	writecommand
 1025 
 1026 06B4 056C 	inc	func_reg
 1027 06B6 E56C 	mov	a,func_reg
 1028 
 1029 06B8 B40C07 	cjne	a,#0ch,not_run
 1030 06BB 756C01 	mov	func_reg,#01h
 1031 06BE 120708 	lcall	run
 1032 06C1 22 	ret
 1033 	not_run:
 1034 06C2 B40204 	cjne	a,#02h,not_stop
 1035 06C5 120749 	lcall	stop
 1036 06C8 22 	ret
 1037 	not_stop:
 1038 06C9 B40304 	cjne	a,#03h,not_sethour
 1039 06CC 12075D 	lcall	sethour
 1040 06CF 22 	ret
 1041 	not_sethour:
 1042 06D0 B40404 	cjne	a,#04h,not_setmin
 1043 06D3 12079A 	lcall	setmin
 1044 06D6 22 	ret
 1045 	not_setmin:
 1046 06D7 B40504 	cjne	a,#05h,not_setday
 1047 06DA 1207D9 	lcall	setday
 1048 06DD 22 	ret
 1049 	not_setday:
 1050 06DE B40604 	cjne	a,#06h,not_setmonth
 1051 06E1 120815 	lcall	setmonth
 1052 06E4 22 	ret
 1053 	not_setmonth:
 1054 06E5 B40704 	cjne	a,#07h,not_setyear
 1055 06E8 120853 	lcall	setyear
 1056 06EB 22 	ret
 1057 	not_setyear:
 1058 06EC B40804 	cjne	a,#08h,not_setmode
 1059 06EF 120890 	lcall	setmode
 1060 06F2 22 	ret
 1061 	not_setmode:
 1062 06F3 B40904 	cjne	a,#09h,not_setU0
 1063 06F6 1208EB 	lcall	setU0
 1064 06F9 22 	ret
 1065 	not_setU0:
 1066 06FA B40A04 	cjne	a,#0ah,not_setRp
 1067 06FD 12093E 	lcall	setRp
 1068 0700 22 	ret
 1069 	not_setRp:
 1070 0701 B40B03 	cjne	a,#0bh,Ignore
 1071 0704 120988 	lcall	xemsuco
 1072 	Ignore:
 1073 0707 22 	ret
 1074;===============================
 1075 	run:
 1076 0708 D201 	setb	runf	
 1077 070A 7400 	mov	a,#00h
 1078 070C 120E57 	lcall	placecursor
 1079 070F 120EA4 	lcall	prtLCD
 1080 0712 46312052 	db	"F1 Run Rcd= ",0h
 756E2052
 63643D20
 20202020
 20202020
 00
 1081 0727 7440 	mov	a,#40h
 1082 0729 120E57 	lcall	placecursor
 1083 072C 120EA4 	lcall	prtLCD
 1084 072F 20202020 	db	" - - ",0h	; Vd:"10:25 14-02-04 "
 20202020
 2D20202D
 20202020
 20202020
 00
 1085 
 1086 0744 90400C 	mov	dptr,#400ch
 1087 0747 E0 	movx	a,@dptr	;doc thanh ghi C de xoa co UF.
 1088 0748 22 	ret
 1089 ;===================================
 1090 	stop:
 1091 0749 C201 	clr	runf
 1092 074B 7400 	mov	a,#00h
 1093 074D 120E57 	lcall	placecursor
 1094 0750 120EA4 	lcall	prtLCD
 1095 0753 46322020 	db	"F2 Stop",0h
 53746F70
 00
 1096 075C 22 	ret
 1097 ;==================================
 1098 	sethour:
 1099 075D 7400 	mov	a,#00h
 1100 075F 120E57 	lcall	placecursor
 1101 0762 120EA4 	lcall	prtLCD
 1102 0765 46332053 	db	"F3 Set hour:",0h
 65742068
 6F75723A
 00
 1103 	Hiengio:
 1104 0772 7440 	mov	a,#40h
 1105 0774 120E57 	lcall	placecursor
 1106 0777 120EA4 	lcall	prtLCD
 1107 077A 20486F75 	db	" Hour= ? ",0h
 723D2020
 203F2020
 20202020
 20202020
 00
 1108 078F 7447 	mov	a,#47h
 1109 0791 120E57 	lcall	placecursor
 1110 0794 E55C 	mov	a,hour_reg
 1111 0796 120EBA 	lcall	Hien_2digit
 1112 0799 22 	ret
 1113 ;==========================
 1114 	setmin:
 1115 079A 7400 	mov	a,#00h
 1116 079C 120E57 	lcall	placecursor
 1117 079F 120EA4 	lcall	prtLCD
 1118 07A2 46342053 	db	"F4 Set minute:",0h
 6574206D
 696E7574
 653A00
 1119 	Hienphut:
 1120 07B1 7440 	mov	a,#40h
 1121 07B3 120E57 	lcall	placecursor
 1122 07B6 120EA4 	lcall	prtLCD
 1123 07B9 204D696E 	db	" Min= ? ",0h
 3D202020
 3F202020
 20202020
 20202020
 00
 1124 07CE 7446 	mov	a,#46h
 1125 07D0 120E57 	lcall	placecursor
 1126 07D3 E55B 	mov	a,min_reg
 1127 07D5 120EBA 	lcall	Hien_2digit
 1128 07D8 22 	ret
 1129 ;==========================
 1130 	setday:
 1131 07D9 7400 	mov	a,#00h
 1132 07DB 120E57 	lcall	placecursor
 1133 07DE 120EA4 	lcall	prtLCD
 1134 07E1 46352053 	db	"F5 Set day:",0h
 65742064
 61793A00
 1135 	Hienngay:
 1136 07ED 7440 	mov	a,#40h
 1137 07EF 120E57 	lcall	placecursor
 1138 07F2 120EA4 	lcall	prtLCD
 1139 07F5 20446179 	db	" Day= ? ",0h
 3D202020
 3F202020
 20202020
 20202020
 00
 1140 080A 7446 	mov	a,#46h
 1141 080C 120E57 	lcall	placecursor
 1142 080F E55D 	mov	a,day_reg
 1143 0811 120EBA 	lcall	Hien_2digit
 1144 0814 22 	ret
 1145 ;================================
 1146 	setmonth:
 1147 0815 7400 	mov	a,#00h
 1148 0817 120E57 	lcall	placecursor
 1149 081A 120EA4 	lcall	prtLCD
 1150 081D 46362053 	db	"F6 Set month:",0h
 6574206D
 6F6E7468
 3A00
 1151 	Hienthang:
 1152 082B 7440 	mov	a,#40h
 1153 082D 120E57 	lcall	placecursor
 1154 0830 120EA4 	lcall	prtLCD
 1155 0833 204D6F6E 	db	" Month= ? ",0h
 74683D20
 20203F20
 20202020
 20202020
 00
 1156 0848 7448 	mov	a,#48h
 1157 084A 120E57 	lcall	placecursor
 1158 084D E55E 	mov	a,month_reg
 1159 084F 120EBA 	lcall	Hien_2digit
 1160 0852 22 	ret
 1161;================================
 1162 	setyear:
 1163 0853 7400 	mov	a,#00h
 1164 0855 120E57 	lcall	placecursor
 1165 0858 120EA4 	lcall	prtLCD
 1166 085B 46372053 	db	"F7 Set year:",0h
 65742079
 6561723A
 00
 1167 	Hiennam:
 1168 0868 7440 	mov	a,#40h
 1169 086A 120E57 	lcall	placecursor
 1170 086D 120EA4 	lcall	prtLCD
 1171 0870 20596561 	db	" Year= ? ",0h
 723D2020
 203F2020
 20202020
 20202020
 00
 1172 0885 7447 	mov	a,#47h
 1173 0887 120E57 	lcall	placecursor
 1174 088A E55F 	mov	a,year_reg
 1175 088C 120EBA 	lcall	Hien_2digit
 1176 088F 22 	ret
 1177 ;===========================
 1178 	setmode:
 1179 0890 7401 	mov	a,#ClearDsp
 1180 0892 120E61 	lcall	writecommand
 1181 
 1182 0895 904010 	mov	dptr,#4010h
 1183 0898 E0 	movx	a,@dptr
 1184 0899 13 	rrc	a
 1185 089A 9202 	mov	mode,c
 1186 
 1187 089C 7400 	mov	a,#00h
 1188 089E 120E57 	lcall	placecursor
 1189 08A1 120EA4 	lcall	prtLCD
 1190 08A4 46382053 	db	"F8 Set mode:",0h
 6574206D
 6F64653A
 00
 1191 	Hienmode:
 1192 08B1 7442 	mov	a,#42h
 1193 08B3 120E57 	lcall	placecursor
 1194 08B6 200219 	jb	mode,doclap
 1195 08B9 120EA4 	lcall	prtLCD
 1196 08BC 20436861 	db	" Chay theo? ",0h
 79207468
 656F3F20
 20202020
 20202020
 00
 1197 08D1 22 	ret
 1198 	doclap:
 1199 08D2 120EA4 	lcall	prtLCD
 1200 08D5 20436861 	db	" Chay doc lap? ",0h
 7920646F
 63206C61
 703F2020
 20202020
 00
 1201 08EA 22 	ret
 1202 ;=========================
 1203 	setU0:
 1204 08EB 904011 	mov	dptr,#4011h
 1205 08EE E0 	movx	a,@dptr
 1206 08EF F562 	mov	U0hi,a
 1207 08F1 A3 	inc	dptr
 1208 08F2 E0 	movx	a,@dptr
 1209 08F3 F563 	mov	U0lo,a
 1210 
 1211 08F5 20023F 	jb	mode,chay_doclap	
 1212 08F8 7400 	mov	a,#00h
 1213 08FA 120E57 	lcall	placecursor
 1214 08FD 120EA4 	lcall	prtLCD
 1215 0900 46392053 	db	"F9 Set U0:",0h
 65742055
 303A00
 1216 	HienU0:
 1217 090B 7440 	mov	a,#40h
 1218 090D 120E57 	lcall	placecursor
 1219 0910 120EA4 	lcall	prtLCD
 1220 0913 2055303D 	db	" U0= V? ",0h
 20202020
 20202056
 3F202020
 20202020
 00
 1221 0928 856273 	mov	bytehi,U0hi
 1222 092B 856372 	mov	bytelo,U0lo
 1223 092E 120EF9 	lcall	hextodec
 1224 0931 7F45 	mov	r7,#45h
 1225 0933 120ED9 	lcall	display5d
 1226 0936 22 	ret
 1227 	chay_doclap:
 1228 0937 756C0B 	mov	func_reg,#0bh
 1229 093A 020988 	ljmp	xemsuco
 1230 093D 22 	ret
 1231 ;========================
 1232 	setRp:
 1233 093E 904013 	mov	dptr,#4013h
 1234 0941 E0 	movx	a,@dptr
 1235 0942 F560 	mov	Rphi,a
 1236 0944 A3 	inc	dptr
 1237 0945 E0 	movx	a,@dptr
 1238 0946 F561 	mov	Rplo,a
 1239 
 1240 0948 7400 	mov	a,#00h
 1241 094A 120E57 	lcall	placecursor
 1242 094D 120EA4 	lcall	prtLCD
 1243 0950 46313020 	db	"F10 Set Rp:",0h
 53657420
 52703A00
 1244 	HienRp:
 1245 095C 7440 	mov	a,#40h
 1246 095E 120E57 	lcall	placecursor
 1247 0961 120EA4 	lcall	prtLCD
 1248 0964 2052703D 	db	" Rp= k? ",0h
 20202020
 2020206B
 3F202020
 20202020
 00
 1249 0979 856073 	mov	bytehi,Rphi
 1250 097C 856172 	mov	bytelo,Rplo
 1251 097F 120EF9 	lcall	hextodec
 1252 0982 7F45 	mov	r7,#45h
 1253 0984 120ED9 	lcall	display5d
 1254 0987 22 	ret
 1255 ;===========================
 1256 	xemsuco:
 1257 0988 7400 	mov	a,#00h
 1258 098A 120E57 	lcall	placecursor
 1259 098D 120EA4 	lcall	prtLCD
 1260 0990 20205072 	db	" Press inc key or",0h
 65737320
 696E6320
 6B657920
 6F7200
 1261 09A3 7440 	mov	a,#40h
 1262 09A5 120E57 	lcall	placecursor
 1263 09A8 120EA4 	lcall	prtLCD
 1264 09AB 64656320 	db	"dec key to see fault",0h
 6B657920
 746F2073
 65652066
 61756C74
 00
 1265 09C0 74C8 	mov	a,#200
 1266 09C2 12100B 	lcall	delay_ms
 1267 09C5 74C8 	mov	a,#200
 1268 09C7 12100B 	lcall	delay_ms
 1269 09CA 74C8 	mov	a,#200
 1270 09CC 12100B 	lcall	delay_ms
 1271 09CF 74C8 	mov	a,#200
 1272 09D1 12100B 	lcall	delay_ms
 1273 09D4 74C8 	mov	a,#200
 1274 09D6 12100B 	lcall	delay_ms
 1275 
 1276 09D9 904015 	mov	dptr,#4015h
 1277 09DC E0 	movx	a,@dptr
 1278 09DD F56A 	mov	fpt_hi,a
 1279 09DF A3 	inc	dptr
 1280 09E0 E0 	movx	a,@dptr
 1281 09E1 F56B 	mov	fpt_lo,a
 1282 
 1283 09E3 856A73 	mov	XH,fpt_hi	
 1284 09E6 856B72 	mov	XL,fpt_lo	 	
 1285 09E9 757700 	mov	YH,#00h	
 1286 09EC 757608 	mov	YL,#08h
 1287 09EF 120FF7 	lcall	sub16
 1288 09F2 857B6A 	mov	fpt_hi,ZH
 1289 09F5 857A6B 	mov	fpt_lo,ZL
 1290 	
 1291 09F8 1209FF 	lcall	Doc_CSDL
 1292 
 1293 09FB 120A35 	lcall	HienCSDL
 1294 09FE 22 	ret
 1295 ;=========================
 1296 	Doc_CSDL:
 1297 09FF C0A0 	push	P2
 1298 0A01 7C02 	mov	r4,#2
 1299 	Doclai:
 1300 0A03 7B08 	mov	r3,#08h
 1301 0A05 856AA0 	mov	p2,fpt_hi	
 1302 0A08 A86B 	mov	r0,fpt_lo	
 1303 0A0A 790B 	mov	r1,#digit3
 1304 loop2:
 1305 0A0C E2 	movx	a,@r0
 1306 0A0D F7 	mov	@r1,a
 1307 0A0E 09 	inc	r1
 1308 0A0F 08 	inc	r0
 1309 0A10 B80002 	cjne	r0,#00h,Ro_notfull
 1310 0A13 05A0 	inc	P2
 1311 	Ro_notfull:
 1312 0A15 DBF5 	djnz	r3,loop2
 1313 0A17 00 	nop
 1314 0A18 DCE9 	djnz	r4,Doclai
 1315 0A1A 850B5B 	mov	min_reg,digit3
 1316 0A1D 850C5C 	mov	hour_reg,digit4
 1317 0A20 850D5D 	mov	day_reg,digit5
 1318 0A23 850E5E 	mov	month_reg,digit6
 1319 0A26 850F5F 	mov	year_reg,digit7
 1320 0A29 851064 	mov	Rcdhi,digit8
 1321 0A2C 851165 	mov	Rcdlo,digit9
 1322 0A2F 851259 	mov	Ghichu,digit10
 1323 0A32 D0A0 	pop	P2
 1324 0A34 22 	ret
 1325 ;==========================
 1326 	HienCSDL:
 1327 0A35 7401 	mov 	a,#ClearDsp
 1328 0A37 120E61 	lcall 	writecommand 
 1329 0A3A 120EA4 	lcall	prtLCD
 1330 0A3D 20203A20 	db	" : - - ",0h
 20202020
 2D20202D
 20202020
 20202020
 00
 1331 0A52 7440 	mov	a,#40h
 1332 0A54 120E57 	lcall	placecursor
 1333 0A57 120EA4 	lcall	prtLCD
 1334 0A5A 5263643D 	db	"Rcd= ",0h
 20202020
 20202020
 20202020
 20202020
 00
 1335 
 1336 0A6F 7400 	mov	a,#00h	;Hien thi gio hien tai
 1337 0A71 120E57 	lcall	placecursor	;tren LCD
 1338 0A74 E55C 	mov	a,hour_reg
 1339 0A76 120EBA 	lcall	Hien_2digit
 1340 
 1341 0A79 7403 	mov	a,#03h	;Hien thi phut hien tai
 1342 0A7B 120E57 	lcall	placecursor	;tren LCD
 1343 0A7E E55B 	mov	a,min_reg
 1344 0A80 120EBA 	lcall	Hien_2digit
 1345 
 1346 0A83 7406 	mov	a,#06h	;Hien thi ngay hien tai
 1347 0A85 120E57 	lcall	placecursor	;tren LCD
 1348 0A88 E55D 	mov	a,day_reg
 1349 0A8A 120EBA 	lcall	Hien_2digit
 1350 
 1351 
 1352 0A8D 7409 	mov	a,#09h	;Hien thi thang hien tai
 1353 0A8F 120E57 	lcall	placecursor	;tren LCD
 1354 0A92 E55E 	mov	a,month_reg
 1355 0A94 120EBA 	lcall	Hien_2digit
 1356 
 1357 0A97 740C 	mov	a,#0ch	;Hien thi nam hien tai	
 1358 0A99 120E57 	lcall	placecursor	;tren LCD
 1359 0A9C E55F 	mov	a,year_reg	
 1360 0A9E 120EBA 	lcall	Hien_2digit
 1361 
 1362 0AA1 755A44 	mov	vitriLCD,#44h	;vi tri can hien tren LCD
 1363 0AA4 12042D 	lcall	HienRcd	;goi chuong trinh hien thi Rcd len LCD va LED
 1364 
 1365 0AA7 856A73 	mov	bytehi,fpt_hi
 1366 0AAA 856B72 	mov	bytelo,fpt_lo
 1367 0AAD 120EF9 	lcall	hextodec
 1368 0AB0 7F0F 	mov	r7,#0fh
 1369 0AB2 120ED9 	lcall	display5d	
 1370 0AB5 744A 	mov	a,#4ah	
 1371 0AB7 120E57 	lcall	placecursor
 1372 0ABA A859 	mov	r0,Ghichu
 1373 0ABC B8010F 	cjne	r0,#01h,noAT	
 1374 0ABF 120EA4 	lcall	prtLCD
 1375 0AC2 20202053 	db	" SAFE ",0h
 41464520
 202000
 1376 0ACD 22 	ret
 1377 	noAT:
 1378 0ACE B8020F 	cjne	r0,#02h,noCB	
 1379 0AD1 120EA4 	lcall	prtLCD
 1380 0AD4 20205741 	db	" WARNING ",0h
 524E494E
 472000
 1381 0ADF 22 	ret	
 1382 	noCB:
 1383 0AE0 B8030F 	cjne	r0,#03h,noSCD	
 1384 0AE3 120EA4 	lcall	prtLCD
 1385 0AE6 4641554C 	db	"FAULT STOP",0h
 54205354
 4F5000
 1386 0AF1 22 	ret	
 1387 noSCD:
 1388 0AF2 B8040E 	cjne	r0,#04h,noSCC	
 1389 0AF5 120EA4 	lcall	prtLCD
 1390 0AF8 4641554C 	db	"FAULT RUN ",0h
 54205255
 4E2000
 1391 	noSCC:
 1392 0B03 22 	ret	
 1393;===============================
 1394;==============================
 1395 	inckey:
 1396 0B04 E56C 	mov	a,func_reg
 1397 ;kiem tra xem o function nao
 1398 0B06 B40304 	cjne	a,#03h,no_inchour
 1399 0B09 120B45 	lcall	inchour
 1400 0B0C 22 	ret
 1401 	no_inchour:
 1402 0B0D B40404 	cjne	a,#04h,no_incmin
 1403 0B10 120B53 	lcall	incmin
 1404 0B13 22 	ret
 1405 	no_incmin:
 1406 0B14 B40504 	cjne	a,#05h,no_incday
 1407 0B17 120B61 	lcall	incday
 1408 0B1A 22 	ret
 1409 	no_incday:
 1410 0B1B B40604 	cjne	a,#06h,no_incmonth
 1411 0B1E 120B6F 	lcall	incmonth
 1412 0B21 22 	ret
 1413 	no_incmonth:
 1414 0B22 B40704 	cjne	a,#07h,no_incyear
 1415 0B25 120B7D 	lcall	incyear
 1416 0B28 22 	ret
 1417 	no_incyear:
 1418 0B29 B40804 	cjne	a,#08h,no_incmode
 1419 0B2C 120B8B 	lcall	incmode
 1420 0B2F 22 	ret
 1421 	no_incmode:
 1422 0B30 B40904 	cjne	a,#09h,no_incU0
 1423 0B33 120B91 	lcall	incU0
 1424 0B36 22 	ret
 1425 	no_incU0:
 1426 0B37 B40A04 	cjne	a,#0ah,no_incRp
 1427 0B3A 120BC2 	lcall	incRp
 1428 0B3D 22 	ret
 1429 	no_incRp:
 1430 0B3E B40B03 	cjne	a,#0bh,Ign_inc
 1431 0B41 120BF3 	lcall	nextfault
 1432 	Ign_inc:
 1433 0B44 22 	ret
 1434 ;=======================
 1435 	inchour:	
 1436 0B45 055C 	inc	hour_reg
 1437 0B47 E55C 	mov	a,hour_reg
 1438 0B49 B41803 	cjne	a,#24,hienho
 1439 0B4C 755C00 	mov	hour_reg,#0
 1440 hienho:
 1441 0B4F 120772 	lcall	Hiengio
 1442 0B52 22 	ret
 1443 ;========================
 1444 	incmin:
 1445 0B53 055B 	inc	min_reg
 1446 0B55 E55B 	mov	a,min_reg
 1447 0B57 B43C03 	cjne	a,#60,hienmi
 1448 0B5A 755B00 	mov	min_reg,#0
 1449 hienmi:
 1450 0B5D 1207B1 	lcall	Hienphut
 1451 0B60 22 	ret
 1452 ;==========================
 1453 	incday:
 1454 0B61 055D 	inc	day_reg
 1455 0B63 E55D 	mov	a,day_reg
 1456 0B65 B42003 	cjne	a,#32,hienda
 1457 0B68 755D01 	mov	day_reg,#1
 1458 hienda:
 1459 0B6B 1207ED 	lcall	Hienngay
 1460 0B6E 22 	ret
 1461 ;===========================
 1462 	incmonth:
 1463 0B6F 055E 	inc	month_reg
 1464 0B71 E55E 	mov	a,month_reg
 1465 0B73 B40D03 	cjne	a,#13,hienmon
 1466 0B76 755E01 	mov	month_reg,#1
 1467 	hienmon:
 1468 0B79 12082B 	lcall	Hienthang
 1469 0B7C 22 	ret
 1470 ;==========================
 1471 	incyear:
 1472 0B7D 055F 	inc	year_reg
 1473 0B7F E55F 	mov	a,year_reg
 1474 0B81 B46403 	cjne	a,#100,hienye
 1475 0B84 755F00 	mov	year_reg,#0
 1476 	hienye:
 1477 0B87 120868 	lcall	Hiennam
 1478 0B8A 22 	ret
 1479 ;============================
 1480 	incmode:
 1481 0B8B B202 	cpl	mode
 1482 0B8D 1208B1 	lcall	Hienmode
 1483 0B90 22 	ret
 1484 ;============================
 1485 	incU0:
 1486 0B91 856273 	mov	XH,U0hi	;Moi lan nhan phim inc U0 duoc tang
 1487 0B94 856372 	mov	XL,U0lo	;1V (ta phai su dung chuong trinh 
 1488 0B97 757700 	mov	YH,#00h	;add16 vi U0 chua trong 2 byte)
 1489 0B9A 757601 	mov	YL,#01h
 1490 0B9D 120FE7 	lcall	add16
 1491 0BA0 857B62 	mov	U0hi,ZH	;Luu ket qua Z->U0
 1492 0BA3 857A63 	mov	U0lo,ZL
 1493 
 1494 0BA6 857B73 	mov	XH,ZH	;kiem tra xem U0 da tang qua gia 
 1495 0BA9 857A72 	mov	XL,ZL	;tri max chua 	
 1496 0BAC 757701 	mov	YH,#01h	;(max of U0 =500V =>01F4h)
 1497 0BAF 7576F5 	mov	YL,#0F5h
 1498 0BB2 120FF7 	lcall	sub16
 1499 0BB5 200006 	jb	ZOV,okinc_U0	;Neu da lon hon gia tri max thi dua
 1500 0BB8 756200 	mov	U0hi,#00h	;ve gia tri min(min of U0=250V=>00FAh)
 1501 0BBB 7563FA 	mov	U0lo,#0FAh
 1502 	okinc_U0:
 1503 0BBE 12090B 	lcall	HienU0	;Sau khi tang xong goi chuong trinh hien
 1504 0BC1 22 	ret	;thi U0 len LCD
 1505 	
 1506 ;=============================
 1507 	incRp:
 1508 0BC2 856073 	mov	XH,Rphi	;Moi lan nhan phim inc Rp duoc tang
 1509 0BC5 856172 	mov	XL,Rplo	;1k (ta phai su dung chuong trinh 
 1510 0BC8 757700 	mov	YH,#00h	;add16 vi Rp chua trong 2 byte)
 1511 0BCB 757601 	mov	YL,#01h
 1512 0BCE 120FE7 	lcall	add16
 1513 0BD1 857B60 	mov	Rphi,ZH	;Luu ket qua Z->Rp
 1514 0BD4 857A61 	mov	Rplo,ZL
 1515 
 1516 0BD7 857B73 	mov	XH,ZH	;kiem tra xem Rp da tang qua gia 
 1517 0BDA 857A72 	mov	XL,ZL	;tri max chua 	
 1518 0BDD 757703 	mov	YH,#03h	;(max of Rp =1000k =>03E8h)
 1519 0BE0 7576E9 	mov	YL,#0E9h
 1520 0BE3 120FF7 	lcall	sub16
 1521 0BE6 200006 	jb	ZOV,okinc_Rp	;Neu da lon hon gia tri max thi dua
 1522 0BE9 756002 	mov	Rphi,#02h	;ve gia tri min(min of Rp =600k =>0258h)
 1523 0BEC 756158 	mov	Rplo,#58h
 1524 	okinc_Rp: 	
 1525 0BEF 12095C 	lcall	HienRp	;Sau khi tang xong goi chuong trinh hien
 1526 0BF2 22 	ret	;thi Rp len LCD
 1527 ;=============================
 1528 	nextfault:
 1529 0BF3 856A73 	mov	XH,fpt_hi	
 1530 0BF6 856B72 	mov	XL,fpt_lo	 	
 1531 0BF9 757700 	mov	YH,#00h	
 1532 0BFC 757608 	mov	YL,#08h
 1533 0BFF 120FE7 	lcall	add16
 1534 0C02 857B6A 	mov	fpt_hi,ZH
 1535 0C05 857A6B 	mov	fpt_lo,ZL
 1536 
 1537 0C08 857B73 	mov	XH,ZH	;kiem tra xem fpt da tang qua gia 
 1538 0C0B 857A72 	mov	XL,ZL	;tri max chua 	
 1539 0C0E 75778F 	mov	YH,#8fh	
 1540 0C11 7576FF 	mov	YL,#0ffh
 1541 0C14 120FF7 	lcall	sub16
 1542 0C17 200006 	jb	ZOV,okinc_fpt
 1543 0C1A 756A80 	mov	fpt_hi,#80h	
 1544 0C1D 756B00 	mov	fpt_lo,#00h	
 1545 	okinc_fpt:
 1546 0C20 856A73 	mov	bytehi,fpt_hi
 1547 0C23 856B72 	mov	bytelo,fpt_lo
 1548 0C26 120EF9 	lcall	hextodec
 1549 0C29 7F0E 	mov	r7,#0eh
 1550 0C2B 120ED9 	lcall	display5d
 1551 
 1552 0C2E 1209FF 	lcall	Doc_CSDL
 1553 
 1554 0C31 120A35 	lcall	HienCSDL
 1555 0C34 22 	ret
 1556 ;==============================
 1557 	deckey:
 1558 0C35 E56C 	mov	a,func_reg
 1559 ;kiem tra xem o function nao:
 1560 
 1561 0C37 B40304 	cjne	a,#03h,no_dechour
 1562 0C3A 120C76 	lcall	dechour
 1563 0C3D 22 	ret
 1564 	no_dechour:
 1565 0C3E B40404 	cjne	a,#04h,no_decmin
 1566 0C41 120C85 	lcall	decmin
 1567 0C44 22 	ret
 1568 	no_decmin:
 1569 0C45 B40504 	cjne	a,#05h,no_decday
 1570 0C48 120C93 	lcall	decday
 1571 0C4B 22 	ret
 1572 	no_decday:
 1573 0C4C B40604 	cjne	a,#06h,no_decmonth
 1574 0C4F 120CA1 	lcall	decmonth
 1575 0C52 22 	ret
 1576 	no_decmonth:
 1577 0C53 B40704 	cjne	a,#07h,no_decyear
 1578 0C56 120CAF 	lcall	decyear
 1579 0C59 22 	ret
 1580 	no_decyear:
 1581 0C5A B40804 	cjne	a,#08h,no_decmode
 1582 0C5D 120CBD 	lcall	decmode
 1583 0C60 22 	ret
 1584 	no_decmode:
 1585 0C61 B40904 	cjne	a,#09h,no_decU0
 1586 0C64 120CC3 	lcall	decU0
 1587 0C67 22 	ret
 1588 	no_decU0:
 1589 0C68 B40A04 	cjne	a,#0ah,no_decRp
 1590 0C6B 120CF4 	lcall	decRp
 1591 0C6E 22 	ret
 1592 	no_decRp:
 1593 0C6F B40B03 	cjne	a,#0bh,Ign_dec
 1594 0C72 120D25 	lcall	backfault
 1595 	Ign_dec:
 1596 0C75 22 	ret
 1597 ;===========================
 1598 
 1599 	dechour:
 1600 0C76 155C 	dec	hour_reg
 1601 0C78 E55C 	mov	a,hour_reg
 1602 0C7A B4FF02 	cjne	a,#255,hienh
 1603 0C7D 7417 	mov	a,#23
 1604 	hienh:
 1605 0C7F F55C 	mov	hour_reg,a
 1606 0C81 120772 	lcall	Hiengio
 1607 0C84 22 	ret
 1608 ;==========================
 1609 	decmin:
 1610 0C85 155B 	dec	min_reg
 1611 0C87 E55B 	mov	a,min_reg
 1612 0C89 B4FF03 	cjne	a,#255,hienm
 1613 0C8C 755B3B 	mov	min_reg,#59
 1614 hienm:
 1615 0C8F 1207B1 	lcall	Hienphut
 1616 0C92 22 	ret
 1617 ;============================
 1618 	decday:
 1619 0C93 155D 	dec	day_reg
 1620 0C95 E55D 	mov	a,day_reg
 1621 0C97 B40003 	cjne	a,#00h,hiend
 1622 0C9A 755D1F 	mov	day_reg,#31
 1623 	hiend:
 1624 0C9D 1207ED 	lcall	Hienngay
 1625 0CA0 22 	ret
 1626 ;============================
 1627 	decmonth:
 1628 0CA1 155E 	dec	month_reg
 1629 0CA3 E55E 	mov	a,month_reg
 1630 0CA5 B40003 	cjne	a,#00h,hienmo
 1631 0CA8 755E0C 	mov	month_reg,#12
 1632 	hienmo:
 1633 0CAB 12082B 	lcall	Hienthang
 1634 0CAE 22 	ret
 1635 ;==========================
 1636 	decyear:
 1637 0CAF 155F 	dec	year_reg
 1638 0CB1 E55F 	mov	a,year_reg
 1639 0CB3 B4FF03 	cjne	a,#255,hieny
 1640 0CB6 755F63 	mov	year_reg,#99
 1641 	hieny:
 1642 0CB9 120868 	lcall	Hiennam
 1643 0CBC 22 	ret
 1644 ;============================
 1645 	decmode:
 1646 0CBD B202 	cpl	mode
 1647 0CBF 1208B1 	lcall	Hienmode
 1648 0CC2 22 	ret
 1649 ;============================
 1650 	decU0:
 1651 0CC3 856273 	mov	XH,U0hi	;Moi lan nhan phim dec U0 duoc giam
 1652 0CC6 856372 	mov	XL,U0lo	;1V (ta phai su dung chuong trinh 
 1653 0CC9 757700 	mov	YH,#00h	;sub16 vi U0 chua trong 2 byte)
 1654 0CCC 757601 	mov	YL,#01h
 1655 0CCF 120FF7 	lcall	sub16
 1656 0CD2 857B62 	mov	U0hi,ZH	;Luu ket qua Z->U0
 1657 0CD5 857A63 	mov	U0lo,ZL
 1658 
 1659 0CD8 857B73 	mov	XH,ZH	;kiem tra xem U0 da giam qua gia 
 1660 0CDB 857A72 	mov	XL,ZL	;tri min chua 	
 1661 0CDE 757700 	mov	YH,#00h	;(min of U0=250V=>00FAh)
 1662 0CE1 7576FA 	mov	YL,#0FAh
 1663 0CE4 120FF7 	lcall	sub16
 1664 0CE7 300006 	jnb	ZOV,okdec_U0	;Neu da nho hon gia tri min thi dua
 1665 0CEA 756201 	mov	U0hi,#01h	;ve gia tri max(max of U0 =500V =>01F4h)
 1666 0CED 7563F4 	mov	U0lo,#0F4h
 1667 	okdec_U0:	
 1668 0CF0 12090B 	lcall	HienU0	;Sau khi giam xong goi chuong trinh hien
 1669 0CF3 22 	ret	;thi U0 len LCD	
 1670 
 1671 ;=======================================
 1672 	decRp:
 1673 0CF4 856073 	mov	XH,Rphi	;Moi lan nhan phim dec Rp duoc giam
 1674 0CF7 856172 	mov	XL,Rplo	;1k (ta phai su dung chuong trinh 
 1675 0CFA 757700 	mov	YH,#00h	;sub16 vi Rp chua trong 2 byte)
 1676 0CFD 757601 	mov	YL,#01h
 1677 0D00 120FF7 	lcall	sub16
 1678 0D03 857B60 	mov	Rphi,ZH	;Luu ket qua Z->Rp
 1679 0D06 857A61 	mov	Rplo,ZL
 1680 
 1681 0D09 857B73 	mov	XH,ZH	;kiem tra xem Rp da giam qua gia 
 1682 0D0C 857A72 	mov	XL,ZL	;tri min chua 	
 1683 0D0F 757702 	mov	YH,#02h	;(min of Rp =600k =>0258h)
 1684 0D12 757658 	mov	YL,#58h
 1685 0D15 120FF7 	lcall	sub16
 1686 0D18 300006 	jnb	ZOV,okdec_Rp	;Neu da nho hon gia tri min thi dua
 1687 0D1B 756003 	mov	Rphi,#03h	;ve gia tri max(max of Rp =1000k =>03E8h)
 1688 0D1E 7561E8 	mov	Rplo,#0E8h
 1689 	okdec_Rp:
 1690 0D21 12095C 	lcall	HienRp	;Sau khi giam xong goi chuong trinh hien 
 1691 
 1692 0D24 22 	ret	;thi Rp len LCD
 1693 ;==========================
 1694 	backfault:
 1695 0D25 856A73 	mov	XH,fpt_hi	
 1696 0D28 856B72 	mov	XL,fpt_lo	 	
 1697 0D2B 757700 	mov	YH,#00h	
 1698 0D2E 757608 	mov	YL,#08h
 1699 0D31 120FF7 	lcall	sub16
 1700 0D34 857B6A 	mov	fpt_hi,ZH
 1701 0D37 857A6B 	mov	fpt_lo,ZL
 1702 
 1703 0D3A 857B73 	mov	XH,ZH	;kiem tra xem fpt da giam qua gia 
 1704 0D3D 857A72 	mov	XL,ZL	;tri min chua 	
 1705 0D40 757780 	mov	YH,#80h	
 1706 0D43 757600 	mov	YL,#00h
 1707 0D46 120FF7 	lcall	sub16
 1708 0D49 300006 	jnb	ZOV,okdec_fpt	
 1709 0D4C 756A8F 	mov	fpt_hi,#8fh	
 1710 0D4F 756BFF 	mov	fpt_lo,#0ffh
 1711 	okdec_fpt:
 1712 0D52 856A73 	mov	bytehi,fpt_hi
 1713 0D55 856B72 	mov	bytelo,fpt_lo
 1714 0D58 120EF9 	lcall	hextodec
 1715 0D5B 7F4D 	mov	r7,#4dh
 1716 0D5D 120ED9 	lcall	display5d
 1717 	
 1718 0D60 1209FF 	lcall	Doc_CSDL
 1719 
 1720 0D63 120A35 	lcall	HienCSDL
 1721 0D66 22 	ret
 1722 ;=========================
 1723 ;=========================
 1724 	okkey:
 1725 0D67 E56C 	mov	a,func_reg
 1726 ;kiem tra xem o function nao:
 1727 
 1728 0D69 B40304 	cjne	a,#03h,no_okhour
 1729 0D6C 120DA8 	lcall	okhour
 1730 0D6F 22 	ret
 1731 	no_okhour:
 1732 0D70 B40404 	cjne	a,#04h,no_okmin
 1733 0D73 120DBA 	lcall	okmin
 1734 0D76 22 	ret
 1735 	no_okmin:
 1736 0D77 B40504 	cjne	a,#05h,no_okday
 1737 0D7A 120DCC 	lcall	okday
 1738 0D7D 22 	ret
 1739 	no_okday:
 1740 0D7E B40604 	cjne	a,#06h,no_okmonth
 1741 0D81 120DDE 	lcall	okmonth
 1742 0D84 22 	ret
 1743 	no_okmonth:
 1744 0D85 B40704 	cjne	a,#07h,no_okyear
 1745 0D88 120DF0 	lcall	okyear
 1746 0D8B 22 	ret
 1747 	no_okyear:
 1748 0D8C B40804 	cjne	a,#08h,no_okmode
 1749 0D8F 120E02 	lcall	okmode
 1750 0D92 22 	ret
 1751 	no_okmode:
 1752 0D93 B40904 	cjne	a,#09h,no_okU0
 1753 0D96 120E15 	lcall	okU0
 1754 0D99 22 	ret
 1755 	no_okU0:
 1756 0D9A B40A04 	cjne	a,#0ah,no_okRp
 1757 0D9D 120E2B 	lcall	okRp
 1758 0DA0 22 	ret
 1759 	no_okRp:
 1760 0DA1 B40B03 	cjne	a,#0bh,Ign_ok
 1761 0DA4 120E41 	lcall	ok_fpt
 1762 	Ign_ok:
 1763 0DA7 22 	ret
 1764 ;========================
 1765 ;========================
 1766 	okhour:
 1767 0DA8 904004 	mov	dptr,#4004h
 1768 0DAB E55C 	mov	a,hour_reg
 1769 0DAD F0 	movx	@dptr,a
 1770 
 1771 0DAE 744F 	mov	a,#4fh
 1772 0DB0 120E57 	lcall	placecursor
 1773 0DB3 120EA4 	lcall	prtLCD
 1774 0DB6 4F4B00 	db	"OK",0h
 1775 0DB9 22 	ret
 1776 ;==========================
 1777 	okmin:
 1778 0DBA 904002 	mov	dptr,#4002h
 1779 0DBD E55B 	mov	a,min_reg
 1780 0DBF F0 	movx	@dptr,a
 1781 
 1782 0DC0 744F 	mov	a,#4fh
 1783 0DC2 120E57 	lcall	placecursor
 1784 0DC5 120EA4 	lcall	prtLCD
 1785 0DC8 4F4B00 	db	"OK",0h
 1786 0DCB 22 	ret
 1787 ;=========================
 1788 	okday:
 1789 0DCC 904007 	mov	dptr,#4007h
 1790 0DCF E55D 	mov	a,day_reg
 1791 0DD1 F0 	movx	@dptr,a
 1792 
 1793 0DD2 744F 	mov	a,#4fh
 1794 0DD4 120E57 	lcall	placecursor
 1795 0DD7 120EA4 	lcall	prtLCD
 1796 0DDA 4F4B00 	db	"OK",0h
 1797 0DDD 22 	ret
 1798 ;==========================
 1799 	okmonth:
 1800 0DDE 904008 	mov	dptr,#4008h
 1801 0DE1 E55E 	mov	a,month_reg
 1802 0DE3 F0 	movx	@dptr,a
 1803 
 1804 0DE4 744F 	mov	a,#4fh
 1805 0DE6 120E57 	lcall	placecursor
 1806 0DE9 120EA4 	lcall	prtLCD
 1807 0DEC 4F4B00 	db	"OK",0h
 1808 0DEF 22 	ret
 1809 ;==========================
 1810 	okyear:
 1811 0DF0 904009 	mov	dptr,#4009h
 1812 0DF3 E55F 	mov	a,year_reg
 1813 0DF5 F0 	movx	@dptr,a
 1814 
 1815 0DF6 744F 	mov	a,#4fh
 1816 0DF8 120E57 	lcall	placecursor
 1817 0DFB 120EA4 	lcall	prtLCD
 1818 0DFE 4F4B00 	db	"OK",0h
 1819 0E01 22 	ret
 1820 ;===========================
 1821 	okmode:
 1822 0E02 904010 	mov	dptr,#4010h
 1823 0E05 A202 	mov	c,mode
 1824 0E07 33 	rlc	a
 1825 0E08 F0 	movx	@dptr,a
 1826 
 1827 0E09 744F 	mov	a,#4fh
 1828 0E0B 120E57 	lcall	placecursor
 1829 0E0E 120EA4 	lcall	prtLCD
 1830 0E11 4F4B00 	db	"OK",0h
 1831 0E14 22 	ret
 1832 ;===========================
 1833 	okU0:
 1834 0E15 904011 	mov	dptr,#4011h
 1835 0E18 E562 	mov	a,U0hi
 1836 0E1A F0 	movx	@dptr,a
 1837 
 1838 0E1B A3 	inc	dptr
 1839 0E1C E563 	mov	a,U0lo
 1840 0E1E F0 	movx	@dptr,a
 1841 
 1842 0E1F 744F 	mov	a,#4fh
 1843 0E21 120E57 	lcall	placecursor
 1844 0E24 120EA4 	lcall	prtLCD
 1845 0E27 4F4B00 	db	"OK",0h
 1846 0E2A 22 	ret
 1847 ;==============================
 1848 	okRp:
 1849 0E2B 904013 	mov	dptr,#4013h
 1850 0E2E E560 	mov	a,Rphi
 1851 0E30 F0 	movx	@dptr,a
 1852 
 1853 0E31 A3 	inc	dptr
 1854 0E32 E561 	mov	a,Rplo
 1855 0E34 F0 	movx	@dptr,a
 1856 
 1857 0E35 744F 	mov	a,#4fh
 1858 0E37 120E57 	lcall	placecursor
 1859 0E3A 120EA4 	lcall	prtLCD
 1860 0E3D 4F4B00 	db	"OK",0h
 1861 0E40 22 	ret
 1862 ;==================================
 1863 	ok_fpt:
 1864 0E41 904015 	mov	dptr,#4015h	;giu trong RTC
 1865 0E44 E56A 	mov	a,fpt_hi
 1866 0E46 F0 	movx	@dptr,a
 1867 0E47 A3 	inc	dptr
 1868 0E48 E56B 	mov	a,fpt_lo
 1869 0E4A F0 	movx	@dptr,a
 1870 
 1871 0E4B 7452 	mov	a,#52h
 1872 0E4D 120E57 	lcall	placecursor
 1873 0E50 120EA4 	lcall	prtLCD
 1874 0E53 4F4B00 	db	"OK",0h
 1875 0E56 22 	ret
 1876 ;===================================
 1877 ;=====================================
 1878 ;subroutine placecursor
 1879 ;Input: Accumulator indicates the position of cursor
 1880 ;the first small line :00h -> 27h
 1881 ;the second small line : 40h -> 67h
 1882 ;Output: None
 1883 ;===================================
 1884 	placecursor:
 1885 0E57 C0E0 	push	acc
 1886 0E59 4480 	orl	a,#80h	
 1887 0E5B 120E61 	lcall	writecommand	
 1888 0E5E D0E0 	pop	acc
 1889 0E60 22 	ret
 1890 ;===================================
 1891 ;subroutine writecommand 
 1892 ;(Write Command to 8 bit LCD Module)
 1893 ;Input: A = Command Byte
 1894 ;Call OutPort function to write
 1895 ;===================================
 1896 	writecommand:
 1897 0E61 C2A5 	clr	LCD_E 
 1898 0E63 C2A4 	clr	LCD_RS 
 1899 0E65 C2B5 	clr LCD_RW 
 1900 0E67 F580 	mov	p0,a
 1901 0E69 00 	nop
 1902 0E6A D2A5 	setb	LCD_E
 1903 0E6C 00 	nop
 1904 0E6D 00 	nop
 1905 0E6E 00 	nop
 1906 0E6F C2A5 	clr	LCD_E
 1907 0E71 120E75 	lcall busyflag
 1908 0E74 22 	ret
 1909 ;==============================================
 1910 ;subroutine busyflag
 1911 ;After each read write operation,Busy Flag (DB7) need to check.
 1912 ;The next operation can be only executed when BF bit was cleared
 1913 ;Subroutin Tests BF bit until BF bit clear
 1914 ;=============================================
 1915 	busyflag:
 1916 0E75 C0E0 	push	acc
 1917 0E77 D2B5 	setb	LCD_RW
 1918 0E79 C2A4 	clr	LCD_RS	
 1919 0E7B C2A5 	clr	LCD_E
 1920 	B_Flag:
 1921 0E7D 7580FF 	mov	p0,#0ffh
 1922 0E80 00 	nop
 1923 0E81 D2A5 	setb	LCD_E
 1924 0E83 00 	nop
 1925 0E84 00 	nop
 1926 0E85 00 	nop
 1927 0E86 E580 	mov	a,p0
 1928 0E88 C2A5 	clr	LCD_E 
 1929 0E8A 20E7F0 	jb	ACC.7,B_Flag 
 1930 0E8D D0E0 	pop	acc
 1931 0E8F 22 	ret
 1932 ;===============================================
 1933 ;subroutine writedata 
 1934 ;(Write Data to 8 bit LCD)
 1935 ;Input: A = Character to write (ascii code)
 1936 ;Call OutPort function to write
 1937 ;===============================================
 1938 	writedata:
 1939 0E90 C2A5 	clr LCD_E 
 1940 0E92 D2A4 	setb LCD_RS 
 1941 0E94 C2B5 	clr LCD_RW 
 1942 0E96 F580 	mov	p0,a	
 1943 0E98 00 	nop
 1944 0E99 D2A5 	setb	LCD_E
 1945 0E9B 00 	nop
 1946 0E9C 00 	nop
 1947 0E9D 00 	nop
 1948 0E9E C2A5 	clr	LCD_E
 1949 0EA0 120E75 	lcall busyflag
 1950 0EA3 22 	ret
 1951 ; *************************** PRINT LCD ********************
 1952 ; subroutine prtLCD
 1953 ; takes the string immediately following the call and
 1954 ; displays on the LCD. the string is read with the
 1955 ; mov a, @a+dptr
 1956 ; instruction. thus, the string is in data memory. since
 1957 ; the string immediately follows code, the microcontroller
 1958 ; is used with overlapping code and data memories (the von
 1959 ; Newman architecture). string must be terminated with a
 1960 ; null (0). upon termination this routine jumps to the
 1961 ; instruction immediately following the string.
 1962 ; input : none
 1963 ; output : none
 1964 ; destroys : acc, dptr
 1965 ; *********************************************************
 1966 	prtLCD:	
 1967 0EA4 D083	pop	dph 
 1968 0EA6 D082	pop	dpl
 1969 	prtNext:
 1970 0EA8 7400	mov	a,#00h 
 1971 0EAA 93	movc	a,@a+dptr 
 1972 0EAB B40002	cjne	a,#0,chrOK 
 1973 0EAE 8007	sjmp	retPrtLCD
 1974 	chrOK:
 1975 
 1976 0EB0 120E90	lcall	writedata 
 1977 0EB3 A3 	 	inc dptr 
 1978 0EB4 020EA8 ljmp	prtNext 
 1979 	retPrtLCD:
 1980 0EB7 7401	mov	a,#1h 
 1981 0EB9 73	jmp	@a+dptr
 1982 ;===============================
 1983 ;subroutine Hien_2digit
 1984 ;Doi so chua trong a sang ASCII
 1985 ;va hien thi no tren LCD
 1986 ;input a
 1987 ;output hien Dg1,Dg2 len LCD
 1988 ;===============================
 1989 	Hien_2digit:
 1990 0EBA C0F0 	push	b
 1991 0EBC 75F00A 	mov	b,#10
 1992 0EBF 84 	div	ab
 1993 0EC0 4430 	orl	a,#30h
 1994 0EC2 120E90 	lcall	writedata
 1995 0EC5 E5F0 	mov	a,b
 1996 0EC7 4430 	orl	a,#30h
 1997 0EC9 120E90 	lcall	writedata
 1998 0ECC D0F0 	pop	b
 1999 0ECE 22 	ret
 2000 ;==========================================
 2001 ;subroutine display5d & 3digit
 2002 ;hien thi len LCD chu so 5 digit BCD dat o 5 o nho 
 2003 ;digit4, digit3, digit2, digit1, digit0
 2004 ;cac thanh ghi duoc dung r0, r1, r7, acc
 2005 ;input : digit4, digit3, digit2, digit1, digit0 
 2006 ; : chua ma BCD so can hien
 2007 ; : r7 = vi tri con tro LCD tren dong (tu 00h - 39h)
 2008 ;============================================
 2009 	display3d:
 2010 0ECF EF 	mov	a,r7
 2011 0ED0 120E57 	lcall	placecursor
 2012 0ED3 7903 	mov	r1,#3
 2013 0ED5 780A 	mov	r0,#digit2
 2014 0ED7 8008 	sjmp	chua_hien
 2015 	display5d:
 2016 0ED9 EF 	mov	a,r7
 2017 0EDA 120E57 	lcall	placecursor
 2018 0EDD 7905 	mov	r1,#5
 2019 0EDF 780C 	mov	r0,#digit4
 2020 	chua_hien:
 2021 0EE1 E6 	mov	a,@r0
 2022 0EE2 B4000A 	cjne	a,#00h,hiendigit
 2023 0EE5 18 	dec	r0
 2024 0EE6 19 	dec	r1
 2025 0EE7 0F 	inc	r7
 2026 0EE8 EF 	mov	a,r7
 2027 0EE9 120E57 	lcall	placecursor
 2028 0EEC B901F2 	cjne	r1,#1,chua_hien
 2029 	hiendigit:
 2030 0EEF E6 	mov	a,@r0
 2031 0EF0 4430 	orl	a,#30h
 2032 0EF2 120E90 	lcall	writedata
 2033 0EF5 18 	dec	r0
 2034 0EF6 D9F7 	djnz	r1,hiendigit
 2035 0EF8 22 	ret
 2036 ;===========================================
 2037 ;subroutine hextodec
 2038 ;input : bytelo,bytehi
 2039 ;output : Digit4,Digit3,Digit2,Digit1,Digit0
 2040 ;===========================================
 2041 	hextodec:
 2042 0EF9 857373 	mov	XH,bytehi
 2043 0EFC 857272 	mov	XL,bytelo
 2044 0EFF 757700 	mov	YH,#00h
 2045 0F02 75760A 	mov	YL,#0ah
 2046 0F05 120F9A 	lcall	DIV16
 2047 0F08 857A08 	mov	digit0,Z0
 2048 0F0B 857D73 	mov	XH,Z3
 2049 0F0E 857C72 	mov	XL,Z2
 2050 0F11 120F9A 	lcall	DIV16
 2051 0F14 857A09 	mov	digit1,Z0
 2052 0F17 857D73 	mov	XH,Z3
 2053 0F1A 857C72 	mov	XL,Z2
 2054 0F1D 120F9A 	lcall	DIV16
 2055 0F20 857A0A 	mov	digit2,Z0
 2056 0F23 857D73 	mov	XH,Z3
 2057 0F26 857C72 	mov	XL,Z2
 2058 0F29 120F9A 	lcall	DIV16
 2059 0F2C 857A0B 	mov	digit3,Z0
 2060 0F2F 857D73 	mov	XH,Z3
 2061 0F32 857C72 	mov	XL,Z2	
 2062 0F35 120F9A 	lcall	DIV16
 2063 0F38 857A0C 	mov	digit4,Z0
 2064 0F3B 22 	ret	
 2065 ;============================================
 2066 ; subroutine mul16
 2067 ; Multiply two 16-Bit Unsigned Words
 2068 ;	Z(Z3:Z2:Z1:Z0) = X(XH:XL) * Y(YH:YL)
 2069 ; input: XH, XL, YH, YL 	
 2070 ; output: Z3, Z2, Z1, Z0
 2071 ; Z3 is the most significant byte.
 2072 ;	 Z0 is the least significant byte. 
 2073 ; lcall: BMW	
 2074 ; destroys: a, b, c
 2075 ;=============================================
 2076 	mul16:
 2077 0F3C C0E0 	push	acc
 2078 0F3E C0F0 	push	b
 2079 0F40 120F78 	lcall bmw 	; XL * Y(YH:YL)
 2080 0F43 E57C 	mov a,Z2
 2081 0F45 C0E0 	push acc 	; push Z2_1
 2082 0F47 E57B 	mov a,Z1
 2083 0F49 C0E0 	push acc 	; push Z1_1
 2084 0F4B E57A 	mov a,Z0
 2085 0F4D C0E0 	push acc 	; push Z0_1
 2086 0F4F 857372 	mov XL,XH 	; put XH in XL
 2087 0F52 120F78 	lcall bmw 	; XH * Y(YH:YL)
 2088 0F55 857AF0 	mov b,Z0 	; save Z0_2 in b register
 2089 0F58 D0E0 	pop acc 	; recall Z0_1
 2090 0F5A F57A 	mov	Z0,a	; *************** Z0 = Z0_1 	
 2091 0F5C D0E0 	pop acc 	; Z1_1 
 2092 0F5E 25F0 	add a,b 	; a = Z1_1 + Z0_2
 2093 0F60 857BF0 	 mov b,Z1 	; save Z1_2 in b register
 2094 0F63 F57B 	mov Z1,a 	; *************** Z1 = a 
 2095 0F65 D0E0 	pop acc 	; Z2_1 
 2096 0F67 35F0 	 addc a,b 	; a = zl2_1 + zh1_2 + c 
 2097 0F69 857CF0 	mov b,Z2 	; save Z2_2 in b register
 2098 0F6C F57C 	mov Z2,a 	; *************** Z2 = a 
 2099 0F6E E4 	clr a 	; acc = 0
 2100 0F6F 35F0 	addc a,b 	; a = 0 + Z2_2 + c 
 2101 0F71 F57D 	mov Z3,a 	; Z3 = a 
 2102 0F73 D0F0 	pop	b
 2103 0F75 D0E0 	pop	acc
 2104 0F77 22 	ret 	
 2105 ;=======================================
 2106 ; subroutine bmw	
 2107 ;	Z(Z2:Z1:Z0) = XL * Y(YH:YL)
 2108 ; input: XL, YH,,YL
 2109 ; output: Z(Z2:Z1:Z0)
 2110 ;	 Z2 is the most significant byte.
 2111 ;	 Z0 is the least significant.
 2112 ; destroys: a, b, r0, c
 2113 ;=======================================
 2114 	bmw:
 2115 0F78 C0D0 	push	psw
 2116 0F7A 75D000 	mov	psw,#0
 2117 0F7D E572 	mov a,XL
 2118 0F7F 8576F0 	mov b,YL
 2119 0F82 A4 	mul ab 
 2120 0F83 F57A 	mov Z0,a
 2121 0F85 C0F0 	push	b 
 2122 0F87 E572 	 mov a,XL 
 2123 0F89 8577F0 	mov b,YH 
 2124 0F8C A4 	mul ab 
 2125 0F8D D000 	pop	0
 2126 0F8F 28 	add a,r0 
 2127 0F90 F57B 	mov Z1,a 
 2128 0F92 E4 	clr a 
 2129 0F93 35F0 	addc a,b 
 2130 0F95 F57C 	mov Z2,a 
 2131 0F97 D0D0 	pop	psw
 2132 0F99 22 	ret 
 2133 
 2134 ;=================================================================
 2135 ;subroutine div16
 2136 ;	Z = X / Y
 2137 ; input : X:(XH,XL); Y:(YH,YL) 
 2138 ; output : Z3,Z2 hold high and low bytes of the quotient 
 2139 ;	 Z1,Z0 hold high and low bytes of the remainder 
 2140 ; ZOV is set if Y=0, i.e., the result is out of range.
 2141 ; calls : sub16
 2142 ; destroys: a, r0, r1, r2, r3, r7, flags
 2143 ;==================================================================
 2144 	div16:
 2145 0F9A E577 	mov	a,YH	;get divisor high byte
 2146 0F9C 4576 	orl	a,YL	;OR with low byte
 2147 0F9E 7003 	jnz	div_OK	;divisor OK if not 0
 2148 0FA0 D200 	setb	ZOV	;else, overflow
 2149 0FA2 22 	ret
 2150 	div_OK:
 2151 0FA3 A973 	mov	r1,XH	;store dividend in r1, r0
 2152 0FA5 A872 	mov	r0,XL 
 2153 0FA7 757300 	mov	XH,#0	;clear partial remainder
 2154 0FAA 757200 	mov	XL,#0 
 2155 0FAD 7B00 	mov	r3,#0	;clear partial quotient
 2156 0FAF 7A00 	mov	r2,#0
 2157 0FB1 7F10 	mov	r7,#16	;set loop count
 2158 	div_loop:
 2159 0FB3 C3 	clr	C	;clear carry flag
 2160 0FB4 E8 	mov	a,r0	;shift the highest bit of the dividend...
 2161 0FB5 33 	rlc	a	; ... into...
 2162 0FB6 F8 	mov	r0,a
 2163 0FB7 E9 	mov	a,r1
 2164 0FB8 33 	rlc	a
 2165 0FB9 F9 	mov	r1,a
 2166 0FBA E572 	mov	a,XL ; ... the lowest bit of the partial ...
 2167 0FBC 33 	rlc	a	; ... remainder
 2168 0FBD F572 	mov	XL,a
 2169 0FBF E573 	mov	a,XH
 2170 0FC1 33 	rlc	a
 2171 0FC2 F573 	mov	XH,a
 2172 0FC4 120FF7 	lcall	sub16	; attempt to subtract to see if the...
 2173 	; ... partial remainder is as large or...
 2174 	; ... larger than the divisor.;
 2175 
 2176 0FC7 A200 	mov	c,ZOV ; get subtraction external borrow
 2177 0FC9 B3 	cpl	c	;complement external borrow;
 2178 0FCA 5006 	jnc	div_1
 2179 0FCC 857B73 	mov	XH,ZH
 2180 0FCF 857A72 	mov	XL,ZL
 2181 	div_1:	
 2182 0FD2 EA 	mov	a,r2	; add result bit to partial quotient
 2183 0FD3 33 	rlc	a
 2184 0FD4 FA 	mov	r2,a
 2185 0FD5 EB 	mov	a,r3
 2186 0FD6 33 	rlc	a
 2187 0FD7 FB 	mov	r3,a
 2188 0FD8 DFD9 	djnz	r7,div_loop
 2189 0FDA 8B7D 	mov	Z3,r3 ; put quotient in Z3, and Z2
 2190 0FDC 8A7C 	mov	Z2,r2
 2191 0FDE 85737B 	mov	Z1,XH ; get remainder, saved before the...
 2192 0FE1 85727A 	mov	Z0,XL ; last subtraction
 2193 0FE4 C200 	clr	ZOV ; divisor is not 0
 2194 0FE6 22 	ret 
 2195 ;========================================================
 2196 ; subroutine ADD16
 2197 ; input : X (XH:XL),Y:(YH:YL)
 2198 ; output: Z (ZH:ZL),ZOV 
 2199 ; 	 Z=X+Y. 
 2200 ; destroys: a, flags
 2201 ;=================================================================
 2202 	 add16:
 2203 0FE7 C3 	clr	c
 2204 0FE8 E572 	mov	a,XL	; load X low byte into accumulator
 2205 0FEA 2576 	add a,YL ; add Y low byte
 2206 0FEC F57A 	mov ZL,a ; put result in Z low byte
 2207 0FEE E573 	mov a,XH ; load X high byte into accumulator
 2208 0FF0 3577 	addc a,YH ; add Y high byte with the carry from low ...
 2209 	 ; ... byte operation
 2210 0FF2 F57B 	mov ZH,a ; save result in Z high byte
 2211 0FF4 9200 	mov ZOV,C ; set ZOV if external carry
 2212 0FF6 22 	ret 
 2213 ;===================================================
 2214 ;subroutine sub16
 2215 ;	 Z(ZH,ZL) = X(XH,XL) - Y(YH,YL)	
 2216 ;	 if (Y > X) 
 2217 ;	 ZOV = 1 	 	
 2218 ;===================================================
 2219 	sub16:
 2220 0FF7 C0E0 	push	acc
 2221 0FF9 E572 	mov	a,XL ; load X low byte into accumulator
 2222 0FFB C3 	clr c ; clear carry flag
 2223 0FFC 9576 	subb a,YL ; subract Y low byte
 2224 0FFE F57A 	mov ZL,a ; put result in Z low byte
 2225 1000 E573 	mov a,XH ; load X high byte into accumulator
 2226 1002 9577 	subb a,YH ; subtract Y high byte with the borrow ...
 2227 ; ... from low byte operation
 2228 1004 F57B 	mov ZH,a ; save result in Z high byte
 2229 1006 9200 	mov ZOV,c ; set ZOV id an external borrow is produced
 2230 1008 D0E0 	pop	acc
 2231 100A 22 	ret 
 2232 ;============================
 2233 ;subroutine delay_ms
 2234 ;delay time 1 milisecond
 2235 ;100h-a6h=5a=90
 2236 ;90x11=990 milisecond
 2237 ;input acc= milisecond delay
 2238 ;============================
 2239 	delay_ms:
 2240 100B C0E0 	push	acc
 2241 100D 74A6 	mov	a,#0a6h
 2242 	dilp:
 2243 100F 04 	inc	a
 2244 1010 00 	nop
 2245 1011 00 	nop
 2246 1012 00 	nop
 2247 1013 00 	nop
 2248 1014 00 	nop
 2249 1015 00 	nop
 2250 1016 00 	nop
 2251 1017 00 	nop
 2252 1018 70F5 	jnz	dilp
 2253 101A 00 	nop
 2254 101B 00 	nop
 2255 101C 00 	nop
 2256 101D D0E0 	pop	acc
 2257 101F D5E0E9 	djnz	acc,delay_ms
 2258 1022 22 	ret
 2259 ;====================================================================
 2260 ; subroutine div32
 2261 ; 32-Bit Unsigned Division
 2262 ;
 2263 ; input: internal registers X3, X2, X1, and X0 hold the 32-bit
 2264 ; unsigned dividend. similarly, internal registers Y1 and
 2265 ; Y0 hold the high and low bytes of the unsigned divisor.
 2266 ;
 2267 ; output: internal registers Z5, Z4, Z3, and Z2 hold the 32-bit
 2268 ; quotient of Z=X / Y. internal registers Z1 and Z0 hold
 2269 ; the high and low bytes of the remainder. addressible bit
 2270 ; ZOV is set if Y=0, i.e., the result is out of range.
 2271 ;
 2272 ; internal registers PR3, PR2, PR1, and PR0 store the
 2273 ; partial remainder. r5, r4, r3, and r2 hold the partially
 2274 ; computed quotient.
 2275 ;
 2276 ; calls: SUB32
 2277 ; destroys: a, r2, r3, r4, r5, r7, flags
 2278 ;====================================================================
 2279 	div32:
 2280 1023 E577 	mov a, Y1 ; get divisor high byte
 2281 1025 4576 	orl a, Y0 ; OR with low byte
 2282 1027 7003 	jnz div32_OK ; divisor OK if not 0
 2283 1029 D200 	setb ZOV ; else, overflow
 2284 102B 22 	ret
 2285 	div32_OK:
 2286 102C 757800 	mov Y2, #0 ; high 16 bits of Y is 0
 2287 102F 757900 	mov Y3, #0
 2288 1032 857571 	mov PR3, X3 ; store dividend
 2289 1035 857470 	mov PR2, X2
 2290 1038 85736F 	mov PR1, X1
 2291 103B 85726E 	mov PR0, X0
 2292 103E 757500 	mov X3, #0 ; clear partial remainder
 2293 1041 757400 	mov X2, #0
 2294 1044 757300 	mov X1, #0
 2295 1047 757200 	mov X0, #0
 2296 104A 7D00 	mov r5, #0
 2297 104C 7C00 	mov r4, #0
 2298 104E 7B00 	mov r3, #0 	; clear partial quotient
 2299 1050 7A00 	mov r2, #0
 2300 1052 7F20 	mov r7, #32 	; set loop count
 2301 
 2302 	div32_loop:
 2303 1054 C3 	clr C 	; clear carry flag
 2304 1055 E56E 	mov a, PR0 	; shift the highest bit of the dividend...
 2305 1057 33 	rlc a 	; ... into...
 2306 1058 F56E 	mov PR0, a
 2307 105A E56F 	mov a, PR1
 2308 105C 33 	rlc a
 2309 105D F56F 	mov PR1, a
 2310 105F E570 	mov a, PR2
 2311 1061 33 	rlc a
 2312 1062 F570 	mov PR2, a
 2313 1064 E571 	mov a, PR3
 2314 1066 33 	rlc a
 2315 1067 F571 	mov PR3, a
 2316 
 2317 1069 E572 	mov a, X0 ; ... the lowest bit of the partial ...
 2318 106B 33 	rlc a 	; ... remainder
 2319 106C F572 	mov X0, a
 2320 106E E573 	mov a, X1
 2321 1070 33 	rlc a
 2322 1071 F573 	mov X1, a
 2323 1073 E574 	mov a, X2
 2324 1075 33 	rlc a
 2325 1076 F574 	mov X2, a
 2326 1078 E575 	mov a, X3
 2327 107A 33 	rlc a
 2328 107B F575 	mov X3, a
 2329 
 2330 107D 1210B0 	lcall SUB32	; attempt to subtract to see if the...
 2331 	; ... partial remainder is as large or...
 2332 	; ... larger than the divisor.
 2333 
 2334 1080 A200 	mov C, ZOV 	; get subtraction external barrow
 2335 1082 B3 	cpl C 	; complement external barrow
 2336 1083 500C 	jnc div32_1
 2337 1085 857D75 	mov X3, Z3
 2338 1088 857C74 	mov X2, Z2
 2339 108B 857B73 	mov X1, Z1
 2340 108E 857A72 	mov X0, Z0
 2341 	div32_1:
 2342 
 2343 1091 EA 	mov a, r2 ; add result bit to partial quotient
 2344 1092 33 	rlc a
 2345 1093 FA 	mov r2, a
 2346 1094 EB 	mov a, r3
 2347 1095 33 	rlc a
 2348 1096 FB 	mov r3, a
 2349 1097 EC 	mov a, r4
 2350 1098 33 	rlc a
 2351 1099 FC 	mov r4, a
 2352 109A ED 	mov a, r5
 2353 109B 33 	rlc a
 2354 109C FD 	mov r5, a
 2355 
 2356 109D DFB5 	djnz r7, div32_loop
 2357 
 2358 109F 8D7F 	mov Z5, r5 ; put quotient in Z3, and Z2
 2359 10A1 8C7E 	mov Z4, r4
 2360 10A3 8B7D 	mov Z3, r3
 2361 10A5 8A7C 	mov Z2, r2
 2362 10A7 85737B 	mov Z1, X1 ; get remainder, saved before the...
 2363 10AA 85727A 	mov Z0, X0 ; last subtraction
 2364 10AD C200 	clr ZOV ; divisor is not 0
 2365 10AF 22 	ret 
 2366;=========================================================
 2367 ;subroutine sub32 
 2368 ;32 bit unsigned subtraction
 2369 ;input: internal register X3, X2 , X1 ,X0 and Y3 ,Y2 ,Y1 ,Y0 hold the 32 bit 
 2370 ;	unsigned intergers
 2371 ;output:internal register Z3, Z2, Z1 and Z0 hold the result Z=X-Y.
 2372 ;destroy : a, flag
 2373 ; if Y > X then ZOV = 1
 2374;===================================================
 2375 	sub32:
 2376 10B0 E572 	mov	a,X0
 2377 10B2 C3 	clr	c
 2378 10B3 9576 	subb	a,Y0
 2379 10B5 F57A 	mov	Z0,a
 2380 10B7 E573 	mov	a,X1
 2381 10B9 9577 	subb	a,Y1
 2382 10BB F57B 	mov	Z1,a
 2383 10BD E574 	mov	a,X2
 2384 10BF 9578 	subb	a,Y2
 2385 10C1 F57C 	mov	Z2,a
 2386 10C3 E575 	mov	a,X3
 2387 10C5 9579 	subb	a,Y3
 2388 10C7 F57D 	mov	Z3,a
 2389 10C9 9200 	mov	ZOV,c
 2390 10CB 22 	ret
 2391 ;=====================================
 2392 	tre_800ms:
 2393 10CC 74FF 	mov	a,#0ffh	;tre 0.8ms chong nhieu o 
 2394 10CE 12100B 	lcall	delay_ms	; mach khi power on
 2395 10D1 74FF 	mov	a,#0ffh	
 2396 10D3 12100B 	lcall	delay_ms
 2397 10D6 74FF 	mov	a,#0ffh
 2398 10D8 12100B 	lcall	delay_ms
 2399 10DB 22 	ret
II. Tài liệu tham khảo.
1- Dallas Maxim DS12887 Real Time Clock	  Maxim-ic com/errata.
2- Kỹ thuật đo lường các đại lượng vật lý 1,2	 Phạm Thượng Hàn.
3- MCS-51 Family Mcrocontrollers architectual overview
4- Programming and interfacing the 8051 Microcontroller	 
	 Sencer Yeralan Ashutosh Ahluwalia 
5- MCS51 microcontroller family user’s manual INTEL: www.intel.com.
6- Sơ đồ chân linh kiện bán dẫn	 Dương Minh Trí.
7- Giáo trình Vật liệu điện Nguyễn Thế Thắng.
8- Kỹ thuật ghép nối máy tính Ngô Diên Tập.
Frame bản tin trong truyền thông giữa rơle với máy tính:
“#”
Địa chỉ máy nhận bản tin
Mã lệnh(đọc/viết)
Mã bản tin
Nội dung bản tin nếu là lệnh viết
“/”
“#”
01
04
03
“/”
“#”
01
04
05
“/”
“#”
01
04
06
“/”
            Các file đính kèm theo tài liệu này:
 ro_le_so_bao_ve_cach_dien_1339.doc ro_le_so_bao_ve_cach_dien_1339.doc