?? ds13020.asm
字號:
;內存數據定義
BitCnt data 30h ; 數據位計數器
ByteCnt data 31h ; 數據字節計數器
Command data 32h ; 命令字節地址
RcvDat DATA 40H ; 接收數據緩沖區
XmtDat DATA 50H ; 發送數據緩沖區
;端口位定義
Dio bit P1.3 ; 數據傳送總線
Sclk bit P1.4 ; 時鐘控制總線
nRst bit P1.2 ; 復位總線
ORG 0x0000
AJMP Main
Main:
MOV SP, #0x60
MOV SCON, #0x50;
MOV TMOD, #0x21; //Timer0 - 16bit timer mode
MOV TL1, #253;
MOV TH1, #253;
SETB TR1
SETB TI
OscEnable(); // 時鐘停止位使能
WriDs(0x8e,0x0); // 允許寫入單個數據字節
ChargeEnable(); // 充電使能
Osc24();
void OscEnable()
{
WriDs(0x80,0);
}
void Osc24()
{
WriDs(0x84,0);
}
void ChargeEnable()
{
WriDs(0x90,0xa5); //涓流充電,一個二極管,一個2k的電阻
}
Loop:
Send_Byte:
CLR nRst ;復位引腳為低電平所有數據傳送終止
NOP
CLR SCLK ;清時鐘總線
NOP
SETB nRst ;復位引腳為高電平邏輯控制有效
NOP
MOV A, Command ;準備發送命令字節
MOV BitCnt, #08h ;傳送位數為8
S_Byte0:
RRC A ;將最低位傳送給進位位C
MOV Dio, C ;位傳送至數據總線
NOP
SETB Sclk ;時鐘上升沿發送數據有效
NOP
CLR Sclk ;清時鐘總線
DJNZ BitCnt, S_Byte0 ;位傳送未完畢則繼續
NOP
S_Byte1: ;準備發送數據
MOV A, @R0 ;傳送數據過程與傳送命令相同
MOV BitCnt, #08h
S_Byte2:
RRC A
MOV Dio, C
NOP
SETB Sclk
NOP
CLR Sclk
DJNZ BitCnt, S_Byte2
INC R0 ;發送數據的內存地址加1
DJNZ ByteCnt, S_Byte1 ;字節傳送未完畢則繼續
NOP
CLR nRst ;邏輯操作完畢清nRst
RET
Receive_Byte:
CLR nRst ;復位引腳為低電平所有數據傳送終止
NOP
CLR Sclk ;清時鐘總線
NOP
SETB nRst ;復位引腳為高電平邏輯控制有效
MOV A, Command ;準備發送命令字節
MOV BitCnt,#08h ;傳送位數為8
R_Byte0:
RRC A ;將最低位傳送給進位位C
MOV Dio, C ;位傳送至數據總線
NOP
SETB Sclk ;時鐘上升沿發送數據有效
NOP
CLR Sclk ;清時鐘總線
DJNZ BitCnt, R_Byte0 ;位傳送未完畢則繼續
NOP
R_Byte1: ;準備接收數據
CLR A ;清類加器
CLR C ;清進位位C
MOV BitCnt, #08h ;接收位數為8
R_Byte2:
NOP
MOV C, Dio ;數據總線上的數據傳送給C
RRC A ;從最低位接收數據
SETB Sclk ;時鐘總線置高
NOP
CLR Sclk ;時鐘下降沿接收數據有效
DJNZ BitCnt, R_Byte2 ;位接收未完畢則繼續
MOV @R1, A ;接收到的完整數據字節放入接收內存緩沖區
INC R1 ;接收數據的內存地址加1
DJNZ ByteCnt, R_Byte1 ;字節接收未完畢則繼續
NOP
CLR nRst ;邏輯操作完畢清nRst
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -