彙編編寫的模擬串列埠通訊程式T2作為波特率控制UART_RXD 是硬中斷0或1口,如果能進入中斷,說明該線有一個起始位產生,進入中斷後呼叫下面的接收程式。退出硬中斷之前還需要將硬中斷標誌重新復位。UART_TXD 是任何其它IO即可。UART_SEND: PUSH IE PUSH DPH PUSH DPL PUSH PSW PUSH 00H PUSH ACC CLR EA SETB UART_TXD ;START BIT MOV R0,A CLR TR2 ;TR2置1,計數器2啟動,時間計數啟動。 MOV A,RCAP2L;計數器2重新裝載值 MOV TL2,A ;置計數器2初值 ;T2需要重新裝載 MOV A,DPH MOV A,RCAP2H MOV TH2,A MOV A,R0 SETB TR2 ;TR2置1,計數器 JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 CLR UART_TXD ;START BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 MOV R0,#08HUART_SEND_LOOP: RRC A MOV UART_TXD,C ;8 BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 DJNZ R0,UART_SEND_LOOP SETB UART_TXD ;END BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 POP ACC POP 00H POP PSW POP DPL POP DPH POP IE RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UART_REC: PUSH IE PUSH DPH PUSH DPL CLR EA CLR TR2 ;TR2置1,計數器2啟動,時間計數啟動。 MOV A,RCAP2L;計數器2重新裝載值 MOV TL2,A ;置計數器2初值 ;T2需要重新裝載 MOV A,DPH MOV A,RCAP2H MOV TH2,A JB UART_RXD,$ ;REC SETB TR2 ;TR2置1,計數器2啟動,時間計數啟動。 JNB TF2,$ CLR TF2 ;0.5 BIT JNB TF2,$ CLR TF2 ;1 BIT JNB TF2,$ CLR TF2 ;1.5 BIT MOV C,UART_RXD MOV ACC.0,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;2.5 MOV C,UART_RXD MOV ACC.1,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;3.5 MOV C,UART_RXD MOV ACC.2,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;4.5 MOV C,UART_RXD MOV ACC.3,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;5.5 MOV C,UART_RXD MOV ACC.4,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;6.5 MOV C,UART_RXD MOV ACC.5,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;7.5 MOV C,UART_RXD MOV ACC.6,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;8.5 MOV C,UART_RXD MOV ACC.7,C JNB TF2,$ CLR TF2 ;9.5 JNB UART_RXD,$ ;等待停止位,並重新復位計數器 SETB UART_RXD POP DPL POP DPH POP IE RET補充回答: 串列埠除錯1. 傳送:向總線上發命令2. 接收:從匯流排接收命令,並分析是地址還是資料。3. 定時傳送:從記憶體中取數並向主機發送. 經過除錯,以上功能基本實現,可以透過上位機對微控制器進行實時控制。 程式如下://這是一個微控制器C51串列埠接收(中斷)和傳送例程,可以用來測試51微控制器的中斷接收 //和查詢傳送,傳送沒有必要用中斷,因為程式的開銷是一樣的 #include
彙編編寫的模擬串列埠通訊程式T2作為波特率控制UART_RXD 是硬中斷0或1口,如果能進入中斷,說明該線有一個起始位產生,進入中斷後呼叫下面的接收程式。退出硬中斷之前還需要將硬中斷標誌重新復位。UART_TXD 是任何其它IO即可。UART_SEND: PUSH IE PUSH DPH PUSH DPL PUSH PSW PUSH 00H PUSH ACC CLR EA SETB UART_TXD ;START BIT MOV R0,A CLR TR2 ;TR2置1,計數器2啟動,時間計數啟動。 MOV A,RCAP2L;計數器2重新裝載值 MOV TL2,A ;置計數器2初值 ;T2需要重新裝載 MOV A,DPH MOV A,RCAP2H MOV TH2,A MOV A,R0 SETB TR2 ;TR2置1,計數器 JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 CLR UART_TXD ;START BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 MOV R0,#08HUART_SEND_LOOP: RRC A MOV UART_TXD,C ;8 BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 DJNZ R0,UART_SEND_LOOP SETB UART_TXD ;END BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 POP ACC POP 00H POP PSW POP DPL POP DPH POP IE RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UART_REC: PUSH IE PUSH DPH PUSH DPL CLR EA CLR TR2 ;TR2置1,計數器2啟動,時間計數啟動。 MOV A,RCAP2L;計數器2重新裝載值 MOV TL2,A ;置計數器2初值 ;T2需要重新裝載 MOV A,DPH MOV A,RCAP2H MOV TH2,A JB UART_RXD,$ ;REC SETB TR2 ;TR2置1,計數器2啟動,時間計數啟動。 JNB TF2,$ CLR TF2 ;0.5 BIT JNB TF2,$ CLR TF2 ;1 BIT JNB TF2,$ CLR TF2 ;1.5 BIT MOV C,UART_RXD MOV ACC.0,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;2.5 MOV C,UART_RXD MOV ACC.1,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;3.5 MOV C,UART_RXD MOV ACC.2,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;4.5 MOV C,UART_RXD MOV ACC.3,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;5.5 MOV C,UART_RXD MOV ACC.4,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;6.5 MOV C,UART_RXD MOV ACC.5,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;7.5 MOV C,UART_RXD MOV ACC.6,C JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 ;8.5 MOV C,UART_RXD MOV ACC.7,C JNB TF2,$ CLR TF2 ;9.5 JNB UART_RXD,$ ;等待停止位,並重新復位計數器 SETB UART_RXD POP DPL POP DPH POP IE RET補充回答: 串列埠除錯1. 傳送:向總線上發命令2. 接收:從匯流排接收命令,並分析是地址還是資料。3. 定時傳送:從記憶體中取數並向主機發送. 經過除錯,以上功能基本實現,可以透過上位機對微控制器進行實時控制。 程式如下://這是一個微控制器C51串列埠接收(中斷)和傳送例程,可以用來測試51微控制器的中斷接收 //和查詢傳送,傳送沒有必要用中斷,因為程式的開銷是一樣的 #include