📄 rs232_com.lst
字号:
C51 COMPILER V7.06 RS232_COM 04/13/2008 20:13:40 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE RS232_COM
OBJECT MODULE PLACED IN D:\VW\MY_PRO~1\CAB_BU~1\BASIC_~1\RS232\RS232_COM.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE D:\VW\MY_PRO~1\CAB_BU~1\BASIC_~1\RS232\RS232_COM.C DB SB OE
stmt level source
1
2 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3 //描述:
4 // 该程序INT0按键程序+显示程序+RS232通讯 &
5 // 按键计数显示在数码管1-2(从右至左),并且发送该数据。 &
6 // 接收到的数据在数码管3-4上显示。 &
7 // 通讯波特率:19200 &
8 // 每次收发一个字节 &
9
10 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
11 //【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! &
12 //【声明】 作者: PIAE小组 &
13
14 #include <reg52.h>
15 #include <intrins.h>
16 #include <RS232_def.h>
17
18
19 void INT0_Counter( void ) interrupt 0 using 1
20 {//INT0按键为计数按键
21 1 EA = 0;
22 1 Show_TX_Data++; //计数单元加1
23 1 TXD_flag = 1;//置要发送标志位
24 1 EA = 1;
25 1 }
26
27
28 void RS232_RXD( void ) interrupt 4 using 1
29 {//接收数据函数,在中断服务程序中调用
30 1 EA = 0;//关闭所有中断
31 1 ES = 0;//关闭串口
32 1 if(RI==1)
33 1 {
34 2 RI = 0;
35 2 RX_data = SBUF;
36 2 RXD_flag = 1;//置接收到数据标志
37 2 }
38 1 _nop_();
39 1 ES = 1;//打开串口
40 1 EA = 1;//打开中断
41 1 }
42 //*******************************************************
43
44 void main(void)
45 {
46 1 CPU_init();
47 1 _nop_();
48 1 while(1)
49 1 {
50 2 NOPS;
51 2 //////////////////////// 接收处理程序/////////////////////////////////
52 2 if( RXD_flag )
53 2 {
54 3 EA = 0;//关闭CPU中断
55 3 LED_RED = !LED_RED;//指示灯状态变化
C51 COMPILER V7.06 RS232_COM 04/13/2008 20:13:40 PAGE 2
56 3 RXD_flag = 0;//清除标志
57 3 Show_RX_Data = RX_data;//接收对方发送的数据
58 3 EA = 1;
59 3 }
60 2 ///////////////////////发送处理程序/////////////////////////////////
61 2 if( TXD_flag )
62 2 {
63 3 EA = 0;
64 3 LED_GRE = !LED_GRE;//指示灯状态变化
65 3 TXD_flag = 0;
66 3 TX_data = Show_TX_Data;//给发送的数据赋值
67 3 RS232_TXD();
68 3 _nop_();
69 3 EA = 1;
70 3 }
71 2 ///////////////////////数码管显示程序/////////////////////////////////
72 2 led_seg7(1,Show_TX_Data);
73 2 led_seg7(3,Show_RX_Data);
74 2 ///////////////////////数码管显示程序/////////////////////////////////
75 2 }//while 结束
76 1 }//main结束
77
78
79 void Delay(uchar delay_time)
80 {//延时程序
81 1 while(delay_time--)
82 1 {}
83 1 }
84
85
86 void CPU_init(void)
87 {//初始化CPU
88 1 SCON = 0x50; //串口方式1
89 1 PCON = 0x80; //串口波特率加速
90 1 TMOD = 0x21;
91 1 TH1=0xFD; //19200bps
92 1 TL1=0xFD;
93 1 TR1 = 1;
94 1 TI = 0;
95 1 RI = 0;
96 1 PS = 1; //串口中断的优先级设为最高
97 1
98 1 IT0 = 1;//外部中断0负边沿触发
99 1 EX0 = 1;//打开外部中断0
100 1
101 1 ES = 1;//打开串口中断
102 1 EA = 1; //打开总中断
103 1 SJA1000_CS = 1;//片选无效
104 1 }
105
106 void RS232_TXD( void )
107 {
108 1 EA = 0;//关闭所有中断
109 1 ES = 0;//关闭串口中断,采用查询发送方式
110 1 TI = 1;
111 1 while(TI)
112 1 {
113 2 TI = 0;//一字节发送完后清除标志位
114 2 SBUF = TX_data;
115 2 while(!TI)
116 2 {}//等待发送
117 2 TI = 0;
C51 COMPILER V7.06 RS232_COM 04/13/2008 20:13:40 PAGE 3
118 2 }
119 1 _nop_();
120 1 ES = 1;//打开串口中断
121 1 EA = 1;//打开中断
122 1 }
123
124 void led_seg7(uchar from,uchar number) //from(1_4):数码管显示起始位置(从右到左),number:显示的数
125 {
126 1 uchar digit,temp_l;
127 1 uchar temp_h=0x7f;
128 1 temp_h = _cror_(temp_h,from-1); //确定从哪一位开始显示,即确定高四位
129 1 temp_h = temp_h & 0xf0; //取高四位
130 1 temp_l = P2 & 0x0f; //取P2的低四位
131 1 P2 = temp_h | temp_l; //设定P2口
132 1
133 1 if(number==0)
134 1 {
135 2 P0 = led[0];
136 2 Delay(5);
137 2 P0 = 0xff;
138 2 }
139 1 else
140 1 {
141 2 while(number)
142 2 {
143 3 digit = number%10 ;
144 3 number /= 10;
145 3 P0 = led[digit] ;
146 3 Delay(5);
147 3 temp_h = P2 & 0xf0; //取P2的高四位
148 3 temp_h = temp_h | 0x0f; //拼装 temp_h,进行位选
149 3 temp_h = _cror_(temp_h,1);
150 3 temp_h = temp_h & 0xf0; //取高四位
151 3 temp_l = P2 & 0x0f; //取P2的低四位
152 3 P0 = 0xff;
153 3 P2 = temp_h | temp_l; //设定P2口
154 3 }//while结束
155 2 }//else结束
156 1
157 1 }
C51 COMPILER V7.06 RS232_COM 04/13/2008 20:13:40 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
CPU_init . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
Show_RX_Data . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0000H 1
RS232_RXD. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Show_TX_Data . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0001H 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
RS232_TXD. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
LED_RED. . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A1H 1
LED_GRE. . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A2H 1
SJA1000_CS . . . . . . . . . . . . . . ABSBIT ----- BIT 00A0H 1
ES . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1
TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1
PS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BCH 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
RX_data. . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0002H 1
TX_data. . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0003H 1
SBUF . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0099H 1
PCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0087H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
led. . . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 11
EX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A8H 1
IT0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0088H 1
TH1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008DH 1
_Delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0008H -----
delay_time . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
TL1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008BH 1
TR1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008EH 1
INT0_Counter . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
RXD_flag . . . . . . . . . . . . . . . PUBLIC DATA BIT 0000H 1
TXD_flag . . . . . . . . . . . . . . . PUBLIC DATA BIT 0001H 1
_led_seg7. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
from . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
number . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
digit. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
temp_l . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
temp_h . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 253 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -