📄 iouart.lst
字号:
C51 COMPILER V7.08 IOUART 07/23/2008 15:46:42 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE IOUART
OBJECT MODULE PLACED IN iouart.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE iouart.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************
2 IO口模拟232测试程序,仿单片机Keil Cx51应用开发技术中的程序
3 主要的功能是在利用串口调试工具发送一个8bit的数据,而后单片机
4 接收后把这个数据发送给模拟串口
5 *********************************************************/
6 #include "STC12C2052AD.H"
7 sbit Tx_Pin=P3^7;//发送端口
8 sbit Rx_Pin=P1^0;//接收端口
9 sbit Baud0=P1^6;
10 sbit Baud1=P1^7;//波特率选择
11 bit Flag=0;//若标志位为1,则表示串口已经过了一位的时间
12 #define unchar unsigned char
13 #define unint unsigned int
14 unchar HighTime;
15 unchar LowTime;
16 /********************************************************/
17 bit CheckAvailStartBit()//检测开始位
18 {
19 1 return(Rx_Pin==0);//若为0,则返回1,即有数据传送
20 1 //若为1,则返回0,即没有接收到数据
21 1 }
22 /********************************************************/
23 void Timer0() interrupt 1//定时器中断处理
24 {
25 1 Flag=1;
26 1 TL0=LowTime;
27 1 TH0=HighTime;
28 1 }
29 /********************************************************/
30 unchar ReceiveByte()//接收字节
31 {
32 1 unchar Data;
33 1 unint i;
34 1 Data=0x00;
35 1 TR0=1;//开始定时
36 1 while(Flag==0);
37 1 Flag=0;//开始位不采样
38 1 for(i=0;i<=7;i++)
39 1 {
40 2 Data>>=1;//移位处理
41 2 if(Rx_Pin==1)//为1的话,则进行处理
42 2 {
43 3 Data|=0x80;
44 3 }
45 2 while(Flag==0);//若Flag为0,则时间还未到,等待
46 2 //若Flag为1,则一位的时间已经到,准备接收数据
47 2 Flag=0;
48 2 }
49 1 while(Flag==0);//对第9位停止位的处理
50 1 Flag=0;
51 1 while(Flag==0)
52 1 {
53 2 if(Rx_Pin)//检测到停止位,退出
54 2 {
55 3 break;
C51 COMPILER V7.08 IOUART 07/23/2008 15:46:42 PAGE 2
56 3 }
57 2 }
58 1 TR0=0;//关闭定时器
59 1 return(Data);//返回数据
60 1 }
61 /********************************************************/
62 void SendByte(unchar Data)
63 {
64 1 unint i;
65 1 TR0=1;//开始定时
66 1 Tx_Pin=0;//起始位,0
67 1 while(Flag==0);
68 1 Flag=0;
69 1 for(i=0;i<=7;i++)
70 1 {
71 2 if(Data&0x01)
72 2 {
73 3 Tx_Pin=1;
74 3 }
75 2 else
76 2 {
77 3 Tx_Pin=0;
78 3 }
79 2 Data>>=1;
80 2 while(Flag==0);
81 2 Flag=0;
82 2 }
83 1 Tx_Pin=1;//结束位
84 1 TR0=0;//关闭定时器
85 1 }
86 /********************************************************/
87 void main()
88 {
89 1 unchar temp;
90 1 TMOD=0x01;//定时器0为模式1,自动重装载
91 1 TR0=0;
92 1 PCON=0x00;
93 1 if(Baud1==1)
94 1 {
95 2 if(Baud0==1)
96 2 {
97 3 HighTime=0xFF;
98 3 LowTime=0xD0;//在这个分频下波特率为19200
99 3 }
100 2 else
101 2 {
102 3 HighTime=0xFF;
103 3 LowTime=0xA0;//在这个分频下波特率为9600,也是默认的波特率
104 3 }
105 2 }
106 1 else
107 1 {
108 2 if(Baud0==0)
109 2 {
110 3 HighTime=0xFF;
111 3 LowTime=0x40;//在这个分频下波特率为4800
112 3 }
113 2 else
114 2 {
115 3 HighTime=0xFE;
116 3 LowTime=0x80;//在这个分频下波特率为2400
117 3 }
C51 COMPILER V7.08 IOUART 07/23/2008 15:46:42 PAGE 3
118 2 }
119 1 /********************测试*********************************/
120 1 /*********************************************************/
121 1 TH0=HighTime;
122 1 TL0=LowTime;
123 1 ET0=1;//开定时器0的中断
124 1 EA=1;//开总中断
125 1 for(;;)
126 1 {
127 2 if(CheckAvailStartBit())//模拟接收口检测到起始位
128 2 {
129 3 temp=ReceiveByte();//接收数据
130 3 SendByte(temp);//将接收到的数据发送给PC
131 3 }
132 2 }
133 1
134 1 }
135
136
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 187 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -