📄 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 + -