📄 serial.lst
字号:
C51 COMPILER V7.50 SERIAL 02/06/2005 01:26:59 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c BROWSE DEBUG OBJECTEXTEND TABS(3)
line level source
1 // 题目:串口初始化C代码
2 // 要求:
3 // 1.波特率1200bps,无奇偶校验,停止位1,数据位8
4 // 2.定时器T1做波特率发生器
5
6 // 软件模拟测试说明:
7 // 1.这个测试采用查询方式进行串口通讯
8 // 2.将软件仿真环境的晶震设为11.0592 MHz
9 // 3.软件模拟全速运行, 观察波特率是1200bps
10 // 4.在串口1中输入数字或字母,可观察到通讯是否有误。
11
12
13
14 // 本例程在查询方式下使用MCU51嵌入式专业仿真器对串口进行(单步、全速)硬件仿真
15
16 #include <reg51.h>
17
18 //串口初始化
19 void serial_init(void)
20 {
21 1 //ET1 = 0; //CLR 0ABH ;禁止T1中断
22 1 TMOD = 0x20; //MOV 89H,#20H ;timer 1 mode 2: 8-Bit reload(定时器T1 模式2: 8位自动初值重装)
23 1 TH1 = 0xE8; //MOV 8DH,#0E8H
24 1 TL1 = 0xE8; //MOV 8BH,#0E8H ;1200bps, 11.059
25 1 TR1 = 1; //SETB 8EH ;启动定时器1
26 1
27 1 SCON = 0x50; // mode 1: 10-bit UART, enable receiver(模式1: 10位异步发送/接收, 使能接收允许位)
28 1 //SM1 = 1; // ;串行口 模式1
29 1 //SM0 = 0;
30 1 //REN = 1; // ;允许串行中断接收
31 1
32 1 SM2 = 1; //SETB O9DH ;收到有效的停止位时才将RI置1
33 1
34 1 //ES = 1; //SETB 0ACH ;允许串行中断
35 1 EA = 1; //SETB 0AFH ;总中断开
36 1 }
37
38
39 // 查询方式接收串口数据
40 unsigned char getchar(void)
41 {
42 1 while(!RI);// 没有收到串口数据则一直等待
43 1 RI=0;
44 1 return SBUF;
45 1 }
46
47 // 查询方式发送串口数据
48 void putchar(unsigned char ch)
49 {
50 1 SBUF=ch;
51 1 while(!TI);
52 1 TI=0;
53 1 }
54
55 code unsigned char HEX_TAB []="0123456789ABCDEF";
C51 COMPILER V7.50 SERIAL 02/06/2005 01:26:59 PAGE 2
56 void puthex(unsigned char ch)
57 {
58 1 unsigned char i,j;
59 1 i=ch>>4;
60 1 j=ch&0x0f;
61 1 putchar(HEX_TAB[i]);
62 1 putchar(HEX_TAB[j]);
63 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 59 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -