51单片机汇编程序,MOV SBUF, ACC 。当ACC 为 11000000B ,7段数码管应该输出0,但是为什么错了? 求单片机程序:汇编语言数字钟

\u5355\u7247\u673a\u6c47\u7f16\u8bed\u8a00\u6d41\u7a0b\u56fe

\u540c\u60c5\u4f60

\u7528DS1302+\u5355\u7247\u673a\u6bd4\u8f83\u7b80\u5355 ;DS1302\u7a0b\u5e8f(51\u6c47\u7f16)
;\u63a8\u8350
;1.\u6bcf\u6b21\u4e0a\u7535\uff0c\u5fc5\u987b\u628a\u79d2\u5bc4\u5b58\u5668\u9ad8\u4f4d\uff08\u7b2c7\u4f4d\uff09\u8bbe\u7f6e\u4e3a0\uff0c\u65f6\u949f\u624d\u80fd\u8d70\u65f6\u3002
;2.\u5982\u679c\u9700\u8981\u5199\u5165\u6570\u636e\u548c\u65f6\u949f\u65e5\u5386\u4fe1\u606f\uff0c\u5fc5\u987b\u628a\u201c\u5199\u4fdd\u62a4\u201d\u5bc4\u5b58\u5668\u8bbe\u7f6e\u6210\u4e3a0
;\u5185\u5b58\u6570\u636e\u5b9a\u4e49
BitCnt data 3Ch ; \u6570\u636e\u4f4d\u8ba1\u6570\u5668
ByteCnt data 3Dh ; \u6570\u636e\u5b57\u8282\u8ba1\u6570\u5668
Command data 3Eh ; \u547d\u4ee4\u5b57\u8282\u5730\u5740
RcvDat DATA 40H ; \u63a5\u6536\u6570\u636e\u7f13\u51b2\u533a
XmtDat DATA 50H ; \u53d1\u9001\u6570\u636e\u7f13\u51b2\u533a
;\u7aef\u53e3\u4f4d\u5b9a\u4e49
IO_DATA bit P1.6 ; \u6570\u636e\u4f20\u9001\u603b\u7ebf
SCLK bit P1.5; \u65f6\u949f\u63a7\u5236\u603b\u7ebf
RST bit P1.7 ; \u590d\u4f4d\u603b\u7ebf
RS BIT P3.5
RW BIT P3.6
EN BIT P3.7
ORG 0000H
ORG 0013H
LCALL JKS
AJMP KS

;**************************** ;main program
ORG 0030H
KS: CLR RST
MOV SP,#2AH

;----LCD\u521d\u59cb\u5316----
CLR EN ;\u4f7f\u80fd\u7aef\u4e3a0\uff0c\u6db2\u6676\u6267\u884c\u547d\u4ee4
INIT_LCD:
MOV A,#38H ;\u53cc\u5217\u663e\u793a\uff0c\u5b57\u5f625*7\u70b9\u9635
ACALL WCOM
ACALL DELAY1
MOV A,#38H ;\u53cc\u5217\u663e\u793a\uff0c\u5b57\u5f625*7\u70b9\u9635
ACALL WCOM
ACALL DELAY1
MOV A,#38H ;\u53cc\u5217\u663e\u793a\uff0c\u5b57\u5f625*7\u70b9\u9635
ACALL WCOM
ACALL DELAY1
MOV A,#0CH ;\u5f00\u663e\u793a\uff0c\u5173\u5149\u6807
ACALL WCOM
ACALL DELAY1
MOV A,#01H ;\u6e05\u9664 LCD \u663e\u793a\u5c4f
ACALL WCOM
ACALL DELAY1
MOV A,#06H ;\u5730\u5740\u52a01
ACALL WCOM
ACALL DELAY1
;------------------------------------\u521d\u59cb\u53161302-------------------------
SET1302:
LCALL Write_Enable;\u5199\u5141\u8bb8
LCALL Osc_Disable
LCALL Write_Multiplebyte;\u521d\u59cb\u53161302,\u5c06\u6211\u4eec\u8981\u8bbe\u5b9a\u7684\u6570\u636e\u5199\u5165
LCALL Read_Multiplebyte;\u5c06\u6211\u4eec\u8bbe\u5b9a\u7684\u6570\u636e\u8bfb\u51fa\u6765
LCALL Osc_Enable
START:
ACALL LCD
LCALL Read_Multiplebyte
AJMP START
;---------------------LCD\u663e\u793a-------------------------
LCD:
MOV A,#11001000B
LCALL WCOM
MOV A,#0;\u663e\u793a\u65f6\u95f4
MOV A,42H
LCALL SSH2
MOV A,#00111010B
LCALL WDATA
MOV A,41H
LCALL SSH2
MOV A,#00111010B
LCALL WDATA
MOV A,40H
LCALL SSH2
MOV A,#11000000B
LCALL WCOM
MOV A,#0;\u663e\u793a\u65e5\u671f\u5b57\u7b26
MOV A,46H
LCALL SSH2
MOV A,#00101101B
LCALL WDATA
MOV A,44H
LCALL SSH2
MOV A,#00101101B
LCALL WDATA
MOV A,43H
LCALL SSH2
RET
SSH2:
MOV B,#16
DIV AB
MOV 58H,B
MOV 59H,A
MOV A,59H
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL WDATA
MOV A,58H
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL WDATA
RET
;-----------------------------------------------------
; \u5199\u6307\u4ee4\u3001\u6570\u636e\u4f7f\u80fd\u5b50\u7a0b\u5e8f
;-----------------------------------------------------
WCOM: ;\u5199\u6307\u4ee4\u4f7f\u80fd
ACALL DELAY0
MOV P0,A
CLR RS
CLR RW
CLR EN
CLR EN
CLR EN
SETB EN
RET
WDATA: ;\u5199\u6570\u636e\u4f7f\u80fd
ACALL DELAY0
MOV P0,A
SETB RS ;RS=H,RW=L,D0-D7=\u6570\u636e\uff0cE=\u9ad8\u8109\u51b2
CLR RW
CLR EN
CLR EN
CLR EN
SETB EN
RET
;****\u5224\u5fd9\u97f3****
DELAY0:
MOV P0,#0FFH
CLR RS
SETB RW
CLR EN
NOP
SETB EN
JB P0.7,DELAY0
RET
TAB:DB 00110000B,00110001B,00110010B,00110011B
DB 00110100B,00110101B,00110110B,00110111B
DB 00111000B,00111001B

;********************************************************************************************
;\u53d1\u9001\u6570\u636e\u7a0b\u5e8f
;\u540d\u79f0:Send_Byte
;\u63cf\u8ff0:\u53d1\u9001ByteCnt \u4e2a\u5b57\u8282\u7ed9\u88ab\u63a7\u5668DS1302
;\u547d\u4ee4\u5b57\u8282\u5730\u5740\u5728Command \u4e2d
;\u6240\u53d1\u9001\u6570\u636e\u7684\u5b57\u8282\u6570\u5728ByteCnt \u4e2d\u53d1\u9001\u7684\u6570\u636e\u5728XmtDat \u7f13\u51b2\u533a\u4e2d
;********************************************************************************************
Send_Byte:
CLR RST ;\u590d\u4f4d\u5f15\u811a\u4e3a\u4f4e\u7535\u5e73\u6240\u6709\u6570\u636e\u4f20\u9001\u7ec8\u6b62
NOP
CLR SCLK; \u6e05\u65f6\u949f\u603b\u7ebf
NOP
SETB RST ;\u590d\u4f4d\u5f15\u811a\u4e3a\u9ad8\u7535\u5e73\u903b\u8f91\u63a7\u5236\u6709\u6548
NOP
MOV A,Command; \u51c6\u5907\u53d1\u9001\u547d\u4ee4\u5b57\u8282
MOV BitCnt,#08h ;\u4f20\u9001\u4f4d\u6570\u4e3a8
S_Byte0:
RRC A ;\u5c06\u6700\u4f4e\u4f4d\u4f20\u9001\u7ed9\u8fdb\u4f4d\u4f4dC
MOV IO_DATA,C ;\u4f4d\u4f20\u9001\u81f3\u6570\u636e\u603b\u7ebf
NOP
SETB SCLK ;\u65f6\u949f\u4e0a\u5347\u6cbf\u53d1\u9001\u6570\u636e\u6709\u6548
NOP
CLR SCLK ;\u6e05\u65f6\u949f\u603b\u7ebf
DJNZ BitCnt,S_Byte0 ;\u4f4d\u4f20\u9001\u672a\u5b8c\u6bd5\u5219\u7ee7\u7eed
NOP
S_Byte1: ;\u51c6\u5907\u53d1\u9001\u6570\u636e
MOV A,@R0 ;\u4f20\u9001\u6570\u636e\u8fc7\u7a0b\u4e0e\u4f20\u9001\u547d\u4ee4\u76f8\u540c
MOV BitCnt,#08h
S_Byte2:
RRC A
MOV IO_DATA,C
NOP
SETB SCLK
NOP
CLR SCLK
DJNZ BitCnt,S_Byte2
INC R0 ;\u53d1\u9001\u6570\u636e\u7684\u5185\u5b58\u5730\u5740\u52a01
DJNZ ByteCnt,S_Byte1 ;\u5b57\u8282\u4f20\u9001\u672a\u5b8c\u6bd5\u5219\u7ee7\u7eed
NOP
CLR RST ;\u903b\u8f91\u64cd\u4f5c\u5b8c\u6bd5\u6e05RST
RET
;***************************************************************************************
;\u63a5\u6536\u6570\u636e\u7a0b\u5e8f;
;\u540d\u79f0:Receive_Byte
;\u63cf\u8ff0:\u4ece\u88ab\u63a7\u5668DS1302 \u63a5\u6536ByteCnt \u4e2a\u5b57\u8282\u6570\u636e
;\u547d\u4ee4\u5b57\u8282\u5730\u5740\u5728Command \u4e2d
;\u6240\u63a5\u6536\u6570\u636e\u7684\u5b57\u8282\u6570\u5728ByteCnt \u4e2d\u63a5\u6536\u7684\u6570\u636e\u5728RcvDat \u7f13\u51b2\u533a\u4e2d
;***********************************************************************************
Receive_Byte:
CLR RST ;\u590d\u4f4d\u5f15\u811a\u4e3a\u4f4e\u7535\u5e73\u6240\u6709\u6570\u636e\u4f20\u9001\u7ec8\u6b62
NOP
CLR SCLK ;\u6e05\u65f6\u949f\u603b\u7ebf
NOP
SETB RST ;\u590d\u4f4d\u5f15\u811a\u4e3a\u9ad8\u7535\u5e73\u903b\u8f91\u63a7\u5236\u6709\u6548
MOV A,Command ;\u51c6\u5907\u53d1\u9001\u547d\u4ee4\u5b57\u8282
MOV BitCnt,#08h ;\u4f20\u9001\u4f4d\u6570\u4e3a8
R_Byte0:
RRC A ;\u5c06\u6700\u4f4e\u4f4d\u4f20\u9001\u7ed9\u8fdb\u4f4d\u4f4dC
MOV IO_DATA,C ;\u4f4d\u4f20\u9001\u81f3\u6570\u636e\u603b\u7ebf
NOP
SETB SCLK ;\u65f6\u949f\u4e0a\u5347\u6cbf\u53d1\u9001\u6570\u636e\u6709\u6548
NOP
CLR SCLK ;\u6e05\u65f6\u949f\u603b\u7ebf
DJNZ BitCnt,R_Byte0 ;\u4f4d\u4f20\u9001\u672a\u5b8c\u6bd5\u5219\u7ee7\u7eed
NOP
R_Byte1: ;\u51c6\u5907\u63a5\u6536\u6570\u636e
CLR A ;\u6e05\u7c7b\u52a0\u5668
CLR C ;\u6e05\u8fdb\u4f4d\u4f4dC
MOV BitCnt,#08h ;\u63a5\u6536\u4f4d\u6570\u4e3a8
R_Byte2:
NOP
MOV C,IO_DATA ;\u6570\u636e\u603b\u7ebf\u4e0a\u7684\u6570\u636e\u4f20\u9001\u7ed9C
RRC A ;\u4ece\u6700\u4f4e\u4f4d\u63a5\u6536\u6570\u636e
SETB SCLK ;\u65f6\u949f\u603b\u7ebf\u7f6e\u9ad8
NOP
CLR SCLK ;\u65f6\u949f\u4e0b\u964d\u6cbf\u63a5\u6536\u6570\u636e\u6709\u6548
DJNZ BitCnt,R_Byte2 ;\u4f4d\u63a5\u6536\u672a\u5b8c\u6bd5\u5219\u7ee7\u7eed
MOV @R1,A ;\u63a5\u6536\u5230\u7684\u5b8c\u6574\u6570\u636e\u5b57\u8282\u653e\u5165\u63a5\u6536\u5185\u5b58\u7f13\u51b2\u533a
INC R1 ;\u63a5\u6536\u6570\u636e\u7684\u5185\u5b58\u5730\u5740\u52a01
DJNZ ByteCnt,R_Byte1 ;\u5b57\u8282\u63a5\u6536\u672a\u5b8c\u6bd5\u5219\u7ee7\u7eed
NOP
CLR RST ;\u903b\u8f91\u64cd\u4f5c\u5b8c\u6bd5\u6e05RST
RET

;--\u5199\u4fdd\u62a4\u5bc4\u5b58\u5668\u64cd\u4f5c------------------------------------------
Write_Enable:
MOV Command,#8Eh ;\u547d\u4ee4\u5b57\u8282\u4e3a8E
MOV ByteCnt,#1 ;\u5355\u5b57\u8282\u4f20\u9001\u6a21\u5f0f
MOV R0,#XmtDat ;\u6570\u636e\u5730\u5740\u8986\u7ed9R0
MOV XmtDat,#00h ;\u6570\u636e\u5185\u5bb9\u4e3a0 \u5199\u5165\u5141\u8bb8
ACALL Send_Byte ;\u8c03\u7528\u5199\u5165\u6570\u636e\u5b50\u7a0b\u5e8f
RET

;\u5f53\u5199\u4fdd\u62a4\u5bc4\u5b58\u5668\u7684\u6700\u9ad8\u4f4d\u4e3a1 \u65f6\u7981\u6b62\u6570\u636e\u5199\u5165\u5bc4\u5b58\u5668---------------
Write_Disable:
MOV Command,#8Eh ;\u547d\u4ee4\u5b57\u8282\u4e3a8E
MOV ByteCnt,#1 ;\u5355\u5b57\u8282\u4f20\u9001\u6a21\u5f0f
MOV R0,#XmtDat ;\u6570\u636e\u5730\u5740\u8986\u7ed9R0
MOV XmtDat,#80h ;\u6570\u636e\u5185\u5bb9\u4e3a80h \u7981\u6b62\u5199\u5165
ACALL Send_Byte ;\u8c03\u7528\u5199\u5165\u6570\u636e\u5b50\u7a0b\u5e8f
RET ;\u8fd4\u56de\u8c03\u7528\u672c\u5b50\u7a0b\u5e8f\u5904


;\u5f53\u628a\u79d2\u5bc4\u5b58\u5668\u7684\u7b2c7 \u4f4d\u65f6\u949f\u505c\u6b62\u4f4d\u8bbe\u7f6e\u4e3a0 \u65f6\u8d77\u52a8\u65f6\u949f\u5f00\u59cb---------
Osc_Enable:
MOV Command,#80h ; \u547d\u4ee4\u5b57\u8282\u4e3a80
MOV ByteCnt,#1 ; \u5355\u5b57\u8282\u4f20\u9001\u6a21\u5f0f
MOV R0,#XmtDat ;\u6570\u636e\u5730\u5740\u8986\u7ed9R0
MOV XmtDat,#00h ;\u6570\u636e\u5185\u5bb9\u4e3a0 \u632f\u8361\u5668\u5de5\u4f5c\u5141\u8bb8
ACALL Send_Byte ;\u8c03\u7528\u5199\u5165\u6570\u636e\u5b50\u7a0b\u5e8f
RET ;\u8fd4\u56de\u8c03\u7528\u672c\u5b50\u7a0b\u5e8f\u5904


;\u5f53\u628a\u79d2\u5bc4\u5b58\u5668\u7684\u7b2c7 \u4f4d\u65f6\u949f\u505c\u6b62\u4f4d\u8bbe\u7f6e\u4e3a1 \u65f6\u65f6\u949f\u632f\u8361\u5668\u505c\u6b62HT1380 \u8fdb\u5165\u4f4e\u529f\u8017\u65b9\u5f0f---------------
Osc_Disable:
MOV Command,#80h ;\u547d\u4ee4\u5b57\u8282\u4e3a80
MOV ByteCnt,#1 ;\u5355\u5b57\u8282\u4f20\u9001\u6a21\u5f0f
MOV R0,#XmtDat ;\u6570\u636e\u5730\u5740\u8986\u7ed9R0
MOV XmtDat,#80h ;\u6570\u636e\u5185\u5bb9\u4e3a80h \u632f\u8361\u5668\u505c\u6b62
ACALL Send_Byte ;\u8c03\u7528\u5199\u5165\u6570\u636e\u5b50\u7a0b\u5e8f
RET ;\u8fd4\u56de\u8c03\u7528\u672c\u5b50\u7a0b\u5e8f\u5904


;\u5199\u516500 \u5e746 \u670821 \u65e5\u661f\u671f\u4e0913 \u65f659 \u520659---------------------
Write_Multiplebyte:
MOV Command,#0BEh ;\u547d\u4ee4\u5b57\u8282\u4e3aBEh
MOV ByteCnt,#8 ;\u591a\u5b57\u8282\u5199\u5165\u6a21\u5f0f\u6b64\u6a21\u5757\u4e3a8 \u4e2a
MOV R0,#XmtDat ;\u6570\u636e\u5730\u5740\u8986\u7ed9R0
MOV XmtDat,#59h ;\u79d2\u5355\u5143\u5185\u5bb9\u4e3a59h
MOV XmtDat+1,#59h ;\u5206\u5355\u5143\u5185\u5bb9\u4e3a59h
MOV XmtDat+2,#13h ;\u65f6\u5355\u5143\u5185\u5bb9\u4e3a13h
MOV XmtDat+3,#21h ;\u65e5\u671f\u5355\u5143\u5185\u5bb9\u4e3a21h
MOV XmtDat+4,#06h ;\u6708\u5355\u5143\u5185\u5bb9\u4e3a06h
MOV XmtDat+5,#03h ;\u661f\u671f\u5355\u5143\u5185\u5bb9\u4e3a03h
MOV XmtDat+6,#0 ;\u5e74\u5355\u5143\u5185\u5bb9\u4e3a00h
MOV XmtDat+7,#0 ;\u5199\u4fdd\u62a4\u5355\u5143\u5185\u5bb9\u4e3a00h
ACALL Send_Byte ;\u8c03\u7528\u5199\u5165\u6570\u636e\u5b50\u7a0b\u5e8f
RET ;\u8fd4\u56de\u8c03\u7528\u672c\u5b50\u7a0b\u5e8f\u5904


;\u8bfb\u51fa\u5bc4\u5b58\u56680-7 \u7684\u5185\u5bb9\u7a0b\u5e8f\u8bbe\u7f6e\u5982\u4e0b
Read_Multiplebyte:
MOV Command,#0BFh ;\u547d\u4ee4\u5b57\u8282\u4e3aBFh
MOV ByteCnt,#8 ;\u591a\u5b57\u8282\u8bfb\u51fa\u6a21\u5f0f\u6b64\u6a21\u5757\u4e3a8 \u4e2a
MOV R1,#RcvDat ;\u6570\u636e\u5730\u5740\u8986\u7ed9R1
ACALL Receive_Byte; \u8c03\u7528\u8bfb\u51fa\u6570\u636e\u5b50\u7a0b\u5e8f
RET; \u8fd4\u56de\u8c03\u7528\u672c\u5b50\u7a0b\u5e8f\u5904


DELAY1: ;\u5ef6\u65f610MS
MOV 21H,#75
D2: MOV 22H,#100
DJNZ 22H,$
DJNZ 21H,D2
RET
;=============================================================================================
END

你仔细查看手册sbuf应该是先发送高位,这样发出去后就反过来了,解决办法是将程序反过来再发送,最简单的是将要发送的值保存到位寻址区,在从位寻找区合并回来发送

把 164 和数码管之间的连线,序号,全反过来即可。

数码管分共阴共阳!!!

扩展阅读:51单片机小车编程 ... 51单片机经典汇编程序 ... 51单片机时钟程序 ... 51单片机8位数码管时钟 ... 51单片机入门编程语言 ... 单片机51系列仿真过程 ... 如何自己编程做游戏 ... 51单片机新手简易时钟 ... 单片机计数器1-99的编程 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网