📄 timer.lst
字号:
400 02F3 F550 MOV SENDATA,A
401 02F5 7120 ACALL Send_Data
402 02F7 22 RET
403 02F8 75328E Send_Enable:MOV COMMAND,#8EH
404 02FB 753101 MOV BYTECNT,#1
405 02FE 755000 MOV SENDATA,#00H
406 0301 7120 ACALL Send_Data
407 0303 22 RET
408 0304
409 0304 ;发送命令字节Send_Cmd程序
410 0304 ;描述:命令字节即DS1302的控制字,要与DS1302通信,首先要发送命令字节(具体作用
411 0304 ;见说明书)
412 0304 C292 Send_Cmd: CLR RST ;复位pin为低电平所有数据传送终止
413 0306 00 NOP ;空操作
414 0307 C290 CLR SCLK ;使串行时钟信号为低电平
415 0309 00 NOP
416 030A D292 SETB RST ;在读写数据期间RST只能为高
417 030C 00 NOP
418 030D E532 MOV A ,COMMAND;将命令字节中的内容送到累加器A
419 030F 753008 MOV BITCNT,#8 ; BITCNT此时为8位
420 0312 Sent_Bit:
421 0312 13 RRC A ;累加器A的内容和进位标志Cy一起向右环移一位,
422 0313 ;A.0进入Cy,Cy进入A.7
423 0313 9291 MOV IO,C ;将Cy位中的内容经IO端口送到DS1302中
424 0315 00 NOP
425 0316 D290 SETB SCLK ;SCLK时钟的上沿时数据被写入DS1302
426 0318 00 NOP
427 0319 C290 CLR SCLK
428 031B D530F4 DJNZ BITCNT, Sent_Bit ;BITCNT减1不为0则转移到Sent_Cmd
429 031E 00 NOP
430 031F 22 RET ;返回主程序
431 0320
432 0320 ;发送数据程序Sent_Data
433 0320 ;描述:将BYETCNT个字节发送到DS1302中,要发送的数据存放在SENDAT开始的发送
434 0320 ;数据缓冲区中(从P1.1发送到IO),此程序由Sent_Cmd和Sent_Byte两部分组成
435 0320 7104 Send_Data: ACALL Send_Cmd ;发送命令字节
436 0322 ;下面开始写入字节数据
437 0322 Sent_Byte0:
438 0322 7850 MOV R0,#SENDATA;将SENTDATA的地址传给R0
439 0324 E6 MOV A,@R0 ;将发送数据缓冲区的第一个字节送给A 寄存器间接
440 0325 ;寻址
441 0325 753008 MOV BITCNT,#8 ;令数据位计数器为8位
442 0328 Sent_Byte1:
443 0328 13 RRC A ;以下7行程序和传送命令是一个道理
444 0329 9291 MOV IO,C
445 032B 00 NOP
446 032C D290 SETB SCLK
447 032E 00 NOP
448 032F C290 CLR SCLK
449 0331 D530F4 DJNZ BITCNT,Sent_Byte1;完成一个字节的传送
450 0334 08 INC R0 ;R0中的内容自加1即使地址字节加1来到下
451 0335 ;个要传送的缓冲区单元
452 0335 D531EA DJNZ BYTECNT,Sent_Byte0;查看所需传送的字节是否已传完如没有则
453 0338 ;继续传送此为一循环程序
454 0338 00 NOP
455 0339 C292 CLR RST ;复位信号为低所有读写数据停止
456 033B 22 RET
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 9
G:\sheji2\1\timer.asm
457 033C
458 033C ;接受数据Rec_Data程序
459 033C ;描述:从DS1302中读出数据(IO到P1.1),此程序由发送命令字节程序和读出数据程序两部
460 033C ;分组成,发送的数据字节存放在RECDATA开始的接受数据缓冲区单元中
461 033C 7104 Rec_Data: ACALL Send_Cmd ;传送命令字节
462 033E ;下面开始接受数据
463 033E Rec_Data0:
464 033E E4 CLR A ;清累加器
465 033F C3 CLR C ;清Cy
466 0340 753008 MOV BITCNT,#8
467 0343 Rec_Data1:
468 0343 A291 MOV C,IO 将IO口的数据位传送到Cy
469 0345 D290 SETB SCLK
470 0347 00 NOP
471 0348 C290 CLR SCLK ;SCLK时钟下沿将IO的数据位传送到Cy
472 034A 13 RRC A
473 034B D530F5 DJNZ BITCNT,Rec_Data1;查看一个字节是否传完
474 034E 7940 MOV R1,#RECDATA ;将接受数据缓冲区的开始地址传给R1
475 0350 F7 MOV @R1,A ;将A的内容传给缓冲区单元
476 0351 09 INC R1 ;缓冲区单元地址自加1
477 0352 D531E9 DJNZ BYTECNT,Rec_Data0;查看读入字节数是否符合要求
478 0355 00 NOP
479 0356 C292 CLR RST ;所有数据读写终止
480 0358 22 RET ;返回主程序
481 0359
482 0359
483 0359 ;对在接受数据缓冲区中的秒数据单元分成高四位和低四位分别放在两个显示缓冲单元中的低四位中
484 0359 E4 Deal_SMH: CLR A ;令累加器A的各位为0
485 035A 7940 MOV R1,#RECDATA ;将接受数据缓冲区的首地址传送给R1
486 035C D7 XCHD A,@R1 ;累加器A的低4位与R1中地址所存储数据的低四
487 035D ;位交换
488 035D F591 MOV DATE2,A ;在低四位存放秒的个位
489 035F E4 CLR A
490 0360 E7 MOV A,@R1
491 0361 C4 SWAP A
492 0362 F590 MOV DATE1,A ;在低四位存放秒的十位
493 0364 439130 ORL DATE2,#30H
494 0367 439030 ORL DATE1,#30H
495 036A 22 RET
496 036B
497 036B 53900F Deal_M: ANL DATE1,#0FH
498 036E 53910F ANL DATE2,#0FH
499 0371 E4 CLR A
500 0372 E590 MOV A,DATE1
501 0374 C4 SWAP A
502 0375 4591 ORL A,DATE2
503 0377 22 RET
504 0378
505 0378 53900F Deal_H: ANL DATE1,#0FH
506 037B 53910F ANL DATE2,#0FH
507 037E E4 CLR A
508 037F E590 MOV A,DATE1
509 0381 C4 SWAP A
510 0382 4591 ORL A,DATE2
511 0384 22 RET
512 0385 END
Defined Symbols:
BITCNT 000030 48
BYTECNT 000031 49
COMMAND 000032 50
DATE 000092 146
DATE1 000090 144
DATE2 000091 145
DATE3 000094 148
DATE_N 000093 147
E 0000A2 162
IO 000091 145
RECDATA 000040 64
RS 0000A0 160
RST 000092 146
RW 0000A1 161
SCLK 000090 144
SENDATA 000050 80
Defined Labels:
ADJUST_HOUR 0001CF 463
ADJUST_MIN 00017D 381
ADJUST_TIME 00014C 332
BUSY 000286 646
BUSY_SW 0000EF 239
CLOCK_ENABLE 0002AF 687
CLOCK_UNABLE 0002BB 699
D1 000298 664
D2 000101 257
DEAL_H 000378 888
DEAL_M 00036B 875
DEAL_SMH 000359 857
DELAY 000296 662
DELAY_SW 0000FF 255
DISPLAY_SPOT 00022C 556
DISPLAY_SPOT_SW 0000B8 184
DISPLAY_SW 000097 151
DISPLAY_TIME 00023F 575
DISPLAY_TIME1 000253 595
EQUAL_2 00020A 522
HERE 00013C 316
IT0P 000059 89
JUMP 0001C6 454
JUMP1 000224 548
KEY1_FI 00014E 334
KEY1_FO 000224 548
KEY1_S 000165 357
KEY1_T 0001C7 455
KEY2 00018D 397
KEY22 0001BD 445
KEY222 0001DF 479
KEY2222 00021B 539
KEY3 000109 265
KEY33 000143 323
KEY_2 000078 120
LCDINT 000265 613
LCDMAIN 000030 48
LOOP 000032 50
LOOP1 000194 404
LOOP2 0001E6 486
NO2 0001FC 508
NO3 0001F8 504
NO5 0001A6 422
NO9 0001AA 426
NO99 000208 520
NO_59 000071 113
NO_99 000074 116
READ_HOUR 0002D9 729
READ_MIN 0002D0 720
READ_SEC 0002C7 711
REC_DATA 00033C 828
REC_DATA0 00033E 830
REC_DATA1 000343 835
SEND_CMD 000304 772
SEND_DATA 000320 800
SEND_ENABLE 0002F8 760
SEND_HOUR 0002ED 749
SEND_MIN 0002E2 738
SENT_BIT 000312 786
SENT_BYTE0 000322 802
SENT_BYTE1 000328 808
SHOW 000081 129
STOP 000077 119
STOPWATCH 000108 264
WAIT1 000155 341
WAIT2 00017D 381
WAIT3 0001AE 430
WAIT4 0001CF 463
WAIT5 00020C 524
WEI 000055 85
WRDATE 00029F 671
WRDATE_SW 0000DF 223
WRLCD 000276 630
WRLCD_SW 0000CB 203
YU 000051 81
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -