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 |
Chia sẻ: banmai | Lượt xem: 2629 | 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