?? serial.src
字號:
; serial.SRC generated from: serial.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE serial.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND TABS(3)
$NOMOD51
NAME SERIAL
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?serial_init?SERIAL SEGMENT CODE
?PR?serial?SERIAL SEGMENT CODE
?PR?getchar?SERIAL SEGMENT CODE
?PR?_putchar?SERIAL SEGMENT CODE
?PR?_puthex?SERIAL SEGMENT CODE
?CO?SERIAL SEGMENT CODE
PUBLIC HEX_TAB
PUBLIC _puthex
PUBLIC _putchar
PUBLIC getchar
PUBLIC serial
PUBLIC serial_init
RSEG ?CO?SERIAL
HEX_TAB:
DB '0' ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9'
DB 'A' ,'B' ,'C' ,'D' ,'E' ,'F' ,000H
; // 題目:串口初始化C代碼
; // 要求:
; // 1.波特率1200bps,無奇偶校驗,停止位1,數據位8
; // 2.定時器T1做波特率發生器
;
; /*
; * 軟件模擬測試說明:
; * 1.這個測試采用查詢方式進行串口通訊
; * 2.將軟件仿真環境的晶震設為11.059 MHz
; * 3.軟件模擬全速運行, 觀察波特率是1200bps
; * 4.在串口1中輸入數字或字母,可觀察到通訊是否有誤。
; */
;
; #pragma src
;
; #include <reg51.h>
;
; //串口初始化
; void serial_init(void)
RSEG ?PR?serial_init?SERIAL
serial_init:
; SOURCE LINE # 19
; {
; SOURCE LINE # 20
; //ET1 = 0; //CLR 0ABH ;禁止T1中斷
; TMOD = 0x20; //MOV 89H,#20H ;timer 1 mode 2: 8-Bit reload(定時器T1 模式2: 8位自動初值重裝)
; SOURCE LINE # 22
MOV TMOD,#020H
; TH1 = 0xE8; //MOV 8DH,#0E8H
; SOURCE LINE # 23
MOV TH1,#0E8H
; TL1 = 0xE8; //MOV 8BH,#0E8H ;1200bps, 11.059
; SOURCE LINE # 24
MOV TL1,#0E8H
; TR1 = 1; //SETB 8EH ;啟動定時器1
; SOURCE LINE # 25
SETB TR1
;
; SCON = 0x50; // mode 1: 10-bit UART, enable receiver(模式1: 10位異步發送/接收, 使能接收允許位)
; SOURCE LINE # 27
MOV SCON,#050H
; //SM1 = 1; // ;串行口 模式1
; //SM0 = 0;
; //REN = 1; // ;允許串行中斷接收
;
; SM2 = 1; //SETB O9DH ;收到有效的停止位時才將RI置1
; SOURCE LINE # 32
SETB SM2
;
; ES = 1; //SETB 0ACH ;允許串行中斷
; SOURCE LINE # 34
SETB ES
; EA = 1; //SETB 0AFH ;總中斷開
; SOURCE LINE # 35
SETB EA
; }
; SOURCE LINE # 36
RET
; END OF serial_init
CSEG AT 00023H
LJMP serial
;
; //中斷方式處理串口數據
;
; void serial(void) interrupt 4 using 1
RSEG ?PR?serial?SERIAL
USING 1
serial:
; SOURCE LINE # 40
; {
; if(RI)
; SOURCE LINE # 42
; {
; SOURCE LINE # 43
; // RI = 0;
; // 串口接收, 采用臨時緩沖
; }
; SOURCE LINE # 46
; #if 0
; if(TI)
; {
; // TI = 0;
; // 串口發送, 沒有必要使用中斷方式
; }
; #endif
;
; }
; SOURCE LINE # 55
?C0003:
RETI
; END OF serial
;
; // 查詢方式接收串口數據
; unsigned char getchar(void)
RSEG ?PR?getchar?SERIAL
getchar:
USING 0
; SOURCE LINE # 58
; {
; SOURCE LINE # 59
?C0004:
; while(!RI);
; SOURCE LINE # 60
JNB RI,?C0004
?C0005:
; RI=0;
; SOURCE LINE # 61
CLR RI
; return SBUF;
; SOURCE LINE # 62
MOV R7,SBUF
; }
; SOURCE LINE # 63
?C0006:
RET
; END OF getchar
; // 查詢方式發送串口數據
; void putchar(unsigned char ch)
RSEG ?PR?_putchar?SERIAL
_putchar:
; SOURCE LINE # 65
;---- Variable 'ch?340' assigned to Register 'R7' ----
; {
; SOURCE LINE # 66
; SBUF=ch;
; SOURCE LINE # 67
MOV SBUF,R7
?C0007:
; while(!TI);
; SOURCE LINE # 68
JNB TI,?C0007
?C0008:
; TI=0;
; SOURCE LINE # 69
CLR TI
; }
; SOURCE LINE # 70
RET
; END OF _putchar
;
; code unsigned char HEX_TAB []="0123456789ABCDEF";
; void puthex(unsigned char ch)
RSEG ?PR?_puthex?SERIAL
_puthex:
USING 0
; SOURCE LINE # 73
;---- Variable 'ch?441' assigned to Register 'R7' ----
; {
; SOURCE LINE # 74
; unsigned char i,j;
; i=ch>>4;
; SOURCE LINE # 76
MOV A,R7
SWAP A
ANL A,#0FH
MOV R6,A
;---- Variable 'i?442' assigned to Register 'R6' ----
; j=ch&0x0f;
; SOURCE LINE # 77
MOV A,R7
ANL A,#0FH
;---- Variable 'j?443' assigned to Register 'R5' ----
MOV R5,A
; putchar(HEX_TAB[i]);
; SOURCE LINE # 78
MOV A,R6
MOV DPTR,#HEX_TAB
MOVC A,@A+DPTR
MOV R7,A
LCALL _putchar
; putchar(HEX_TAB[j]);
; SOURCE LINE # 79
MOV A,R5
MOVC A,@A+DPTR
MOV R7,A
LCALL _putchar
; }
; SOURCE LINE # 80
RET
; END OF _puthex
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -